【发布时间】:2018-07-02 15:15:59
【问题描述】:
有人知道我如何在 Visual FoxPro 中用 SQL 语言编写带参数的查询吗?它不像在 Access 中那样工作,我在这里有点迷失了。 提前谢谢!
【问题讨论】:
标签: sql visual-foxpro
有人知道我如何在 Visual FoxPro 中用 SQL 语言编写带参数的查询吗?它不像在 Access 中那样工作,我在这里有点迷失了。 提前谢谢!
【问题讨论】:
标签: sql visual-foxpro
很遗憾,您的问题过于宽泛,无法提供简单的答案。
一个查询的语法与执行不同查询的语法不同。
是的,SQL 查询语法可能与 M$ Access 略有不同。
但是,您始终可以通过 Google 搜索:vfp sql 查询语法 来查找特定的语法等价物。
注意:“WITH”参数将位于一个简单的 WHERE 子句中,类似于大多数其他 SQL 查询语言,
如WHERE Field1 = "ABC" AND Field2 = 235
但它将使用 VFP 语言语法。
您还可能想花一些时间观看免费的在线 VFP 教程视频:free on-line VFP tutorial videos
特别是标记为:FoxPro 和 SQL 语言
【讨论】:
您可以访问 w3schools.com 查看 SQL 基础知识。它不像access,这是真的,因为access,即所谓的SQL数据库引擎,对SQL有自己的理解。 VFP OTOH 更接近 ANSI SQL(IOW 更接近 SQL Server)。
你没有指定你使用的语言,但是说访问,我假设你正在尝试使用 VBA。这是使用参数的 VBA (excel) 示例:
Sub Macro1()
Dim oRecordset1 As ADODB.Recordset
Dim oConnection As ADODB.Connection
Dim oCommand As ADODB.Command
Dim oParameter1 As ADODB.Parameter
Dim oParameter2 As ADODB.Parameter
Set oConnection = New ADODB.Connection
Set oCommand = New ADODB.Command
oConnection.ConnectionString = "Provider=VFPOLEDB;Data Source=C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Northwind"
oConnection.Open
oCommand.ActiveConnection = oConnection
oCommand.CommandText = "select * from Orders where OrderDate >= ? and OrderDate < ?"
Set oParameter1 = oCommand.CreateParameter("start")
oParameter1.Type = adDate
oParameter1.Value = CDate("1996-08-01")
oCommand.Parameters.Append oParameter1
Set oParameter2 = oCommand.CreateParameter("end")
oParameter2.Type = adDate
oParameter2.Value = CDate("1996-10-01")
oCommand.Parameters.Append oParameter2
Set oRecordset = oCommand.Execute()
Sheet1.Range("A1").CopyFromRecordset (oRecordset)
End Sub
注意:参数是位置的,不是命名的。
【讨论】:
这取决于您使用的查询类型,是使用查询本机 FoxPro 表的内置 SQL 引擎,还是使用外部数据源的查询。
首先对于本机查询,它非常简单。由于它是原生 FoxPro 指令,因此您可以访问其中的每一个功能,包括变量,您可以轻松地将用户提供的数据放入其中:
LOCAL data &&This could come from user input
data = "hello world"
SELECT * FROM SomeTable WHERE Column = data &&Filtered parametrized query
另一种选择是提交 SQL 查询以供外部服务器处理,其中查询作为文本字符串发送。在这种情况下,可以使用特殊的参数标记,匹配 FoxPro 变量,然后将参数化查询发送到服务器:
LOCAL data
data = "hello world"
LOCAL hConn = SQLSTRINGCONNECT(connectionString)
SQLEXEC(hConn, "SELECT * FROM SomeTable WHERE Column = ?data", "SomeTable") &&The "?data" parametrizes the query, sending the value separate from the query itself
SQLDISCONNECT(hConn)
【讨论】:
data 就足够了,而且效果很好。 m. 前缀根本不需要,只会产生噪音。但在任何一种情况下都可以使用。
?<variable*> 语法。这会导致 FoxPro 从当前作用域中提取 data 的值。 *注意:这也是@CetinBasoz 添加m.data 注释的原因,因为如果选择了另一个具有data 列的工作区,Foxpro 将始终选择它而不是内存变量