VBA与SQL有关

mat*_*ver 1 sql ms-access vba

我正在将此代码用于Access 2010数据库,我似乎对我的SQL语句的语法有问题,但我不能在我的生活中弄清楚如何正确格式化语句.预先感谢您的任何帮助!

qdf = db.CreateQueryDef("Company_State_Q")

Dim strSQLSearch As String


strSQLSearch = "SELECT [Company Information].Company_Name, " & _
"[Company Information].Industry" & _
"FROM Company Information" & _
"WHERE [Company Information].State ='" & stateV & "'" & _
"ORDER BY [Company Information].Company_Name;"



qdf.SQL = strSQLSearch
Run Code Online (Sandbox Code Playgroud)

Han*_*sUp 12

你应该用......

Debug.Print strSQLSearch 
Run Code Online (Sandbox Code Playgroud)

...在构建strSQLSearch字符串后的代码中.然后,您可以在立即窗口中查看该字符串(使用Ctrl+ 去那里g).

在立即窗口中,我将值设置stateV为"CA"并测试您的字符串,如下所示:

stateV = "CA" : ? "SELECT [Company Information].Company_Name, " & _
"[Company Information].Industry" & _
"FROM Company Information" & _
"WHERE [Company Information].State ='" & stateV & "'" & _
"ORDER BY [Company Information].Company_Name;"
SELECT [Company Information].Company_Name, [Company Information].IndustryFROM Company InformationWHERE [Company Information].State ='CA'ORDER BY [Company Information].Company_Name;
Run Code Online (Sandbox Code Playgroud)

实际看到完成的strSQLSearch字符串后,很容易发现多个问题:

  1. IndustryFROM 应该 Industry FROM
  2. FROM Company Information 应该 FROM [Company Information]
  3. InformationWHERE 应该 Information WHERE
  4. 'CA'ORDER 应该 'CA' ORDER

考虑在SELECT语句的各个部分之间使用换行符.db引擎非常满意换行而不是空格.而且您可能会发现将语句作为几条短线而不是一条长线更容易阅读.

Dim strSQLSearch As String
strSQLSearch = "SELECT ci.Company_Name, ci.Industry" & vbCrLf & _
    "FROM [Company Information] AS ci" & vbCrLf & _
    "WHERE ci.State ='" & stateV & "'" & vbCrLf & _
    "ORDER BY ci.Company_Name;"
Debug.Print strSQLSearch
Run Code Online (Sandbox Code Playgroud)

在代码的开头你也有......

qdf = db.CreateQueryDef("Company_State_Q")
Run Code Online (Sandbox Code Playgroud)

它似乎qdf必须是DAO.QueryDef对象,所以我认为你应该使用Set关键字来分配它.

Set qdf = db.CreateQueryDef("Company_State_Q")
Run Code Online (Sandbox Code Playgroud)