为什么此SQL查询在查询设计器中工作,而在VBA for Access中不工作?
当我在Create>Query中一个接一个地执行以下两个查询时,它们工作得非常好。当我尝试在VBA中执行查询时,只有第一个(invoiceline)起作用 事实上,我知道问题不在于查询本身,而在于我建立联系的方式。我在尝试执行查询时遇到错误 按下按钮时,此查询将正确执行 按钮无单击() 此操作失败并出现错误 按钮两次单击() 第二个查询依赖于第一个查询来完成,这两个查询在Microsoft Access的查询设计器中同样可以完美地工作,但第二个查询在VBA SQL宏或过程中运行时失败 这就是我看到的错误: 运行时错误“-2147217900(80040e14)”: [QODBC][sql语法错误]未找到预期的词法元素:=) 更新 我已经尝试了所有这些,但没有运气,还有其他建议吗 01-10-2005 2005-01-10 01/10/2005 2005/01/10在这里阅读 正确的格式似乎是{d'YYYY-MM-DD'} 提供了一个函数,使日期成为正确的字符串 功能:为什么此SQL查询在查询设计器中工作,而在VBA for Access中不工作?,sql,vba,ms-access,Sql,Vba,Ms Access,当我在Create>Query中一个接一个地执行以下两个查询时,它们工作得非常好。当我尝试在VBA中执行查询时,只有第一个(invoiceline)起作用 事实上,我知道问题不在于查询本身,而在于我建立联系的方式。我在尝试执行查询时遇到错误 按下按钮时,此查询将正确执行 按钮无单击() 此操作失败并出现错误 按钮两次单击() 第二个查询依赖于第一个查询来完成,这两个查询在Microsoft Access的查询设计器中同样可以完美地工作,但第二个查询在VBA SQL宏或过程中运行时失败 这就是我看
Function fncqbDate(myDate As Date) As String
myDate = Nz(myDate, Now)
fncqbDate = "{d '" & Year(myDate) & "-" & Right("00" & Month(myDate), 2) & "-" & Right("00" & Day(myDate), 2) & "'}"
End Function
在这里读一读
正确的格式似乎是{d'YYYY-MM-DD'}
提供了一个函数,使日期成为正确的字符串
功能:
Function fncqbDate(myDate As Date) As String
myDate = Nz(myDate, Now)
fncqbDate = "{d '" & Year(myDate) & "-" & Right("00" & Month(myDate), 2) & "-" & Right("00" & Day(myDate), 2) & "'}"
End Function
正如@Minty评论和发布的,你的日期就是问题所在
- 在MS Access GUI内运行查询(如使用查询设计器)时,您将使用Access SQL方言进行管理李>
- 当通过ODBC驱动程序连接到外部数据库时,您将使用连接数据库的SQL方言进行管理,这里是Quickbooks李>
:
插入发票(CustomerRefListID、ARAccountRefListID、TxnDate、RefNumber、,
BillAddressAddr1,BillAddressAddr2,BillAddressCity,BillAddressState,
BillAddressPostalCode、BillAddressCountry、iSpend、TermsRelistid、,
DueDate、ShipDate、ItemSalesTaxRefListID、[Memo],IsToBePrinted、,
CustomerSalesTaxCodeRefListID)
价值('800001F6-1482536280','800001E-1478562986','9/23/2020','1','Brad Lamb',',
‘1921苹果巷’、‘海岸’、‘加利福尼亚’、‘94326’、‘美国’、‘0’、‘80000002-1478562832’,
#2020年10月31日,2020年10月1日,8000295C-1541711590,
“备忘录测试”,0,“8000001-1478562826”)
或者,使用CDate()
将字符串转换为日期:
插入发票(CustomerRefListID、ARAccountRefListID、TxnDate、RefNumber、,
BillAddressAddr1,BillAddressAddr2,BillAddressCity,BillAddressState,
BillAddressPostalCode、BillAddressCountry、iSpend、TermsRelistid、,
DueDate、ShipDate、ItemSalesTaxRefListID、[Memo],IsToBePrinted、,
CustomerSalesTaxCodeRefListID)
价值('800001F6-1482536280','800001E-1478562986',CDate('9/23/2020'),'1','Brad Lamb',
‘1921苹果巷’、‘海岸’、‘加利福尼亚’、‘94326’、‘美国’、‘0’、‘80000002-1478562832’,
CDate('10/31/2020')、CDate('10/01/2020')、'8000295C-1541711590',
“备忘录测试”,0,“8000001-1478562826”)
Quickbooks ODBC 在Quickbooks中,必须遵守其日期要求
{d'YYYY-MM-DD'}
或函数形式fncqbDate()
。但是,关于这些方法的文档很少,甚至不存在,并且可能因ODBC驱动程序版本而异
sql=“插入发票(CustomerRefListID、ARAccountRefListID、TxnDate、RefNumber,”_
&BillAddressAddr1,BillAddressAddr2,BillAddressCity_
&BillAddressState、BillAddressPostalCode、BillAddressCountry、_
&IsPending、TermsReflisted、DueDate、ShipDate、_
&ItemSalesTaxRefListID[Memo],IsToBePrinted_
&“CustomerSalesTaxCodeRefListID)”_
&“值('800001F6-1482536280','800001E-1478562986',{d'2020-09-23','1',”_
&“'Brad Lamb','1921 Applesed Lane','Bayshore','CA','94326','USA',0,”
&“'80000002-1478562832',{d'2020-10-31'},{d'2020-10-01'},”_
&‘8000295C-1541711590’、‘备忘录测试’、‘0’、‘80000001-1478562826’’
参数化 尽管如此,即使上述方法不起作用,这也是参数化的另一个很好的理由,参数化是任何应用程序层(如VBA)运行SQL的编程行业标准。参数化有助于客户机和服务器之间的数据类型映射,而无需引用或其他符号闭包。ADO不支持对象(而不是ADO记录集)中带有方法的参数
”准备好的带有占位符的语句(无文字数据)
sql=“插入发票(CustomerRefListID、ARAccountRefListID、TxnDate、RefNumber,”_
&BillAddressAddr1,BillAddressAddr2,BillAddressCity_
&BillAddressState、BillAddressPostalCode、BillAddressCountry、_
&IsPending、TermsReflisted、DueDate、ShipDate、_
&ItemSalesTaxRefListID[Memo],IsToBePrinted_
&“CustomerSalesTaxCodeRefListID)”_
&“值(?,,,,,,,,,,,,,,,,,,,”
& " ?, ?, ?, ?, ?, ?, ?, ?, ?)"
“开放连接
Set-oConnection=CreateObject(“ADODB.Connection”)
o连接。打开sConnectString
'初始化并运行命令
设置oCmd=create
Function fncqbDate(myDate As Date) As String
myDate = Nz(myDate, Now)
fncqbDate = "{d '" & Year(myDate) & "-" & Right("00" & Month(myDate), 2) & "-" & Right("00" & Day(myDate), 2) & "'}"
End Function