我看不出为什么这个查询不起作用。我使用msgbox
来显示我的strSQL
,但它看起来非常好。
Dim strSQL As String
strSQL = "INSERT INTO Jobs (Date, RefNo, ProjectID, PManager, PDesc, PONo, Src_Qty, WC_Qty, Rate, Total, Note, Company) "
strSQL = strSQL & "VALUES (" & JobDate.Value & ", '" _
& Text41.Value & "', '" _
& ProjectID.Value & "', '" _
& PManager.Value & "', '" _
& PDesc.Value & "', " _
& Text43.Value & ", " _
& Src_Qty.Value & ", " _
& WC_Qty.Value & ", " _
& newRate.Value & ", " _
& ProjTotal.Value & ", '" _
& Text38.Value & "', '" _
& newCompany.Value _
& "');"
MsgBox (strSQL)
DoCmd.RunSQL strSQL
答案 0 :(得分:7)
如果我没记错的话,你需要用英镑包裹你的约会日期。
"VALUES (#" & JobDate.Value & "#, '" _
我认为最后你不需要分号....
答案 1 :(得分:3)
添加一行:
Debug.Print strSQL
后
MsgBox (strSQL)
转到立即窗口(Ctrl + g)并复制完成的SQL语句。然后创建一个新查询,切换到SQL View,并粘贴到SQL语句中。找出声明失败的原因。如果您的Jobs表中的“Date”字段是Date / Time数据类型,我认为klabranche就是钱。如果您无法识别问题,请编辑您的问题以显示失败的SQL语句,并告诉我们作业字段的数据类型。
此外,您的Jobs表包含3个字段,其名称为保留字:Date;率;并注意。 (参见http://allenbrowne.com/AppIssueBadWord.html)如果保留这些字段名称,至少用方括号括起来以避免混淆访问:
strSQL = "INSERT INTO Jobs ([Date], RefNo, ...
答案 2 :(得分:2)
除了在klabranche提到的日期周围使用#deleimeters之外,你还应该使用明确的日期格式。使用格式(Jobdate,“yyyy-mm-dd”)或使用Return Dates in US #mm/dd/yyyy# format
使用yyyy-mm-dd的ISO标准仔细检查您是否在测试字段周围使用引号,并且在数字字段周围没有引号。 ProjectID可能是数字或可能是文本。
我会重命名表单上的text43和test48字段,以便更清楚它们是什么。假设这是一个绑定表单,您可以将它们设置为与字段相同的名称。
您不需要使用.Value属性。
DoCmd.RunSQL的问题在于它忽略了任何错误。以下任一项都将显示查询收到的任何错误消息。如果使用DAO,请使用Currentdb.Execute strSQL,dbfailonerror ..对于ADO,请使用CurrentProject.Connection.Execute strCommand,lngRecordsAffected,adCmdText然后,您可以删除docmd.setwarnings行(如果有)。
如果您要使用docmd.setwarnings,请确保将True语句放在任何错误处理代码中。否则可能会在以后发生奇怪的事情,尤其是在您使用应用程序时。例如,如果关闭对象,则不会再显示“是否要保存更改”消息。这可能意味着不需要的更改,删除或添加将保存到您的MDB。
两种方法之间的表现也可能有很大差异。一篇帖子称currentdb.execute花了两秒钟,而docmd.runsql花了八秒钟。一如既往YMMV。
HansUp在使用保留字段名称方面具有优势。访问Tony's Table and Field Naming Conventions
答案 3 :(得分:0)
我同意klabranche,最可能的罪魁祸首是你需要在日期值周围加上哈希标记(“#”)。然而,作为该想法的补充,如果您使用CurrentDb.Execute而不是DoCmd.RunSQL,您将收到一条信息性错误消息,它将告诉您具体是错误的。这将使调试更多更容易。希望有所帮助!
答案 4 :(得分:0)
更改我的字段名称后,这就是我的strSQL所说的:
INSERT INTO职位(JobDate,RefNo,ProjectID,PManager,PDesc,PONo,Src_Qty,WC_Qty,JobRate,JobTotal,Note,Company)VALUES(#2009-09-20#,'1','3',' Jean Jou','4',2,5,6,7,42,'9','Magnus')
我已多次检查我的文本字段,它们是正确的。
我得到“运行时错误:3134,INSERT INTO语句中的语法错误”,无论Do.Cmd或CurrentDb.Execute
谢谢你们。