2012-07-06 55 views
1

我正在使用此代码用于Access 2010数据库,而且我似乎对我的SQL语句的语法有问题,但我无法为我的生活弄清楚如何正确地格式化该声明。预先感谢您的任何帮助!VBA VBA麻烦

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 
+4

问:你是否收到任何错误信息?问:你是否有任何理由不把“来自公司信息”的内容放在方括号内?一个像这样的空间名称可能会毁了你的整个一天;) – paulsm4 2012-07-06 00:26:50

+0

paulsm4的建议是正确的,只要“stateV”给出所需的字符串,那么你的问题是没有用[] – 2012-07-06 08:59:43

回答

12

你应该使用...

Debug.Print strSQLSearch 

...在你的代码后,你建立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; 

一旦你真正看到完成strSQLSearch字符串,它很容易被发现存在多个问题:

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

考虑使用你的SELECT语句的不同部分之间的换行符。数据库引擎完全满意换行而不是空格。你可能会发现阅读陈述更简单,而不是一条长线。

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 
在你的代码中有年初

也...

qdf = db.CreateQueryDef("Company_State_Q") 

看来qdf必须是DAO.QueryDef对象,所以我觉得你应该使用Set关键字分配给它。

Set qdf = db.CreateQueryDef("Company_State_Q") 
+1

附上表名[您的帮助!此外,感谢您不仅发布正确的回复,还解释它。你知道他们怎么说教一个人钓鱼吗? – 2012-07-08 19:38:57