Sql 为什么操作查询在access VBA中不起作用?
我在Access的查询设计中测试了一个更新查询,它可以工作,但是当我尝试在我的模块中使用它时,我得到了错误: SQL语句无效;预期。。。或“更新” 我的问题是:Sql 为什么操作查询在access VBA中不起作用?,sql,vba,ms-access,Sql,Vba,Ms Access,我在Access的查询设计中测试了一个更新查询,它可以工作,但是当我尝试在我的模块中使用它时,我得到了错误: SQL语句无效;预期。。。或“更新” 我的问题是: strSql = "UPDATE " & rs.Fields("tableName") & _ " SET " & rs.Fields("foreignKeyName") & " = " & rsContacts.Fields("contactId") & _ " WHERE cont
strSql = "UPDATE " & rs.Fields("tableName") & _
" SET " & rs.Fields("foreignKeyName") & " = " & rsContacts.Fields("contactId") & _
" WHERE contactId = " & ContactID
rs:具有tableName的表,用于更新表的KeyName
rsContacts:当前位于特定联系人上的联系人ID列表。
实际字符串如下所示:
UPDATE myTable SET ContactId = 5 WHERE contactId = 2
如果查询有效,并且是一个操作查询,为什么会出现此错误
这是我的完整代码:
Public Sub updateChildTablesByVal ContactID尽可能长,ByVal CompanyID尽可能长
作为字符串的Dim strSql
将遥感器作为记录集
Dim rsPending作为记录集
strSql=从联系人中选择联系人ID_
其中companyId=&companyId&和contactId&contactId
设置rs=CurrentDb.OpenRecordsetstrSql
如果不是rs.BOF和rs.EOF,则
先走一步
strSql=从子表中选择*
设置rsChild=CurrentDb.OpenRecordsetstrSql
rsChild.MoveFirst
不使用rsChild.EOF时执行此操作
strSql=UPDATE&rsChild.FieldstableName&SET&rsChild.FieldsforeignKeyName&=&rs.fieldscocontactid&WHERE contactId=&contactId
DoCmd.RunSQL strSql
下一个
环
孩子,关上
设置rsChild=Nothing
如果结束
下面是我调试甚至解决这个问题的想法 出于本例的考虑,从Access中创建一个查询-将其命名为UpdateMyTable 然后,实际上从VBA执行这个特定的查询,而不是使用DoCmd
Dim qry As QueryDef
strSql = "UPDATE " & rsChild.Fields("tableName") & " SET " & _
rsChild.Fields("foreignKeyName") & " = " & _
rs.Fields("contactId") & " WHERE contactId = " & ContactID
Set qry = CurrentDb.QueryDefs("UpdateMyTable")
qry.SQL = strSql
qry.Execute
这样做的最大优点是,您可以非常轻松地从Access中调试它,以查看呈现的SQL并手动运行它/调整它。当数据丢失时,这种情况经常发生。你能检查一下是否有单引号吗?你能发布相关的代码,包括执行它的命令和查询中的SQL吗?@JanWalczak,我看不到任何单引号。@Hambone,你说得对。我完全忘了做那件事。我现在更新了这个问题。是否真的有必要创建一个通用的语句?根据数据类型的不同,如果您只是将这样的语句连接起来,它将是一个永无止境的问题源。。。您可以使用参数或使用记录集及其更改数据的功能。请显示执行此命令的代码。。。