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

通过VBA访问VBA更改查询条件,vba,ms-access,Vba,Ms Access,我正在尝试更改查询的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 = sqlSt

我正在尝试更改查询的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新手)

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

sqlString = "SELECT * FROM tab WHERE tab.columname='" & strVariable & "'"
对于数字数据类型:

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

您可以使用
参数

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

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。

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

SQL(另存为存储查询)

参数变量参数文本(255);
从选项卡中选择*,其中tab.collumname=[VariableParam];
VBA

Dim db作为DAO.Database
Dim rs作为DAO.Recordset
将qdf设置为DAO.QueryDef
将sqlString设置为字符串
Set db=CurrentDb()
设置qdf=db.querydfs(“mySavedQuery”)
qdf!VariableParam=“LA-85995561”
Set rs=qdf.OpenRecordset()
“rs可用于表格/报告记录源:
'Set Me.Form.Recordset=rst
'Set Me.Report.Recordset=rst

答案是我必须使用不同的标记:

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

这是关于SQL中的“”&它从来没有做过的部分“感谢所有的用户!把我带到我的解决方案!它将输入如下值:LA-85995561我尝试了Your的解决方案,它在编译时给我错误。。。并标记结束部分的第一个);“我做错了什么吗?我不知道你的目标是什么。我给出了一个如何使用VBA生成SQL文本的示例。你应该声明变量strVariable并指定一个你想要的值。或者你希望此查询要求用户输入一个值?仍然不清楚这里的变量是什么。VBA变量?你没有声明它。查询的参数,应该是。”当用户打开查询时请求?首先在查询设计器中创建工作查询,然后用VBA变量替换变量部分,如我的示例中所示。您应该生成正确的SQL文本,该文本应在查询生成器中工作。在您的示例中,SQL不工作。