通过VBA访问VBA更改查询条件

时间:2018-04-16 12:11:39

标签: vba ms-access access-vba

我正在尝试更改查询的SQL语句。

这是以下代码:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim sqlString As String

Set db = CurrentDb()
Set qdf = db.QueryDefs("Query1")

sqlString = "SELECT *all the Tables* FROM tab WHERE (((tab.columname)=*Variable*;"

qdf.SQL = sqlString

所以我的问题是变量的值没有显示......

但它必须从字符串中删除,所以我尝试了这个:

sqlString = "SELECT *all the Tables* FROM tab WHERE (((tab.columname)= " & " *Variable*" & " ;"

我必须添加"变量" (引号)

这样就可以了一半。

然后使用它设置的变量的值,但缺少引号......

此代码的目标是更改显示查询中数据的条件。 变量值为样本LA-85995561。

我想要更改值的方式是通过SQL语句。

我不能从这里进一步了解。谢谢你的帮助!

(我是VBA新手)

4 个答案:

答案 0 :(得分:0)

如果columname是文字,那么您可以使用以下内容:

sqlString = "SELECT * FROM tab WHERE tab.columname='" & strVariable & "'"

对于数字数据类型:

sqlString = "SELECT * FROM tab WHERE tab.columname=" & str(lngVariable)

答案 1 :(得分:0)

您可以使用PARAMETERS

这会传递一个文本字符串:

Sub Test()

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset

    Set db = CurrentDb
    Set qdf = db.CreateQueryDef("", "PARAMETERS MyNamedSearchValue TEXT; " & _
        "SELECT * FROM MyTable WHERE columname = MyNamedSearchValue")

    With qdf
        .Parameters("MyNamedSearchValue") = "A"
        Set rst = .OpenRecordset
    End With

    With rst
        MsgBox .Fields("MyDateField")
        .Close
    End With

    qdf.Close

End Sub

这传递了一个数字:

Sub Test()

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset

    Set db = CurrentDb
    Set qdf = db.CreateQueryDef("", "PARAMETERS MyNamedSearchValue LONG; " & _
        "SELECT * FROM MyTable WHERE columname = MyNamedSearchValue")

    With qdf
        .Parameters("MyNamedSearchValue") = 100
        Set rst = .OpenRecordset
    End With

    With rst
        MsgBox .Fields("MyDateField")
        .Close
    End With

    qdf.Close

End Sub

您必须更新SQL以满足您的需求。您也可以传递存储查询的名称,而不是在过程中编写SQL。

答案 2 :(得分:0)

使用参数化的经典示例,这是在VBA等应用程序层使用SQL时的行业最佳实践。由于您已经使用了querydef,因此您可以使用stopAccessingSecurityScopedResource()子句轻松传递参数来定义数据类型和占位符。

SQL (另存为存储的查询)

PARAMETERS

<强> VBA

PARAMETERS VariableParam Text(255);
SELECT * FROM tab WHERE tab.collumname = [VariableParam];

答案 3 :(得分:0)

Anser是我必须使用它作为cose:

WHERE (((tab.collumname)=""" & strVariable& """));"

关于&#34;&#34;&#34; &安培;从来没有做过&#34;在SQL中感谢所有的握手!把我带到我的解决方案! &LT; 3