在VBA中追加查询(运行时错误3067)

Mar*_*arc 3 ms-access vba access-vba ms-access-2010

我将表单上未绑定文本框中的七个值拉入变量.五个变量是字符串类型,两个是double.然后我使用sql将数据附加到一个表使用where语句和一个全局变量,该变量包含我从另一个表中使用的外键,因为我不确定如何使用opentogs与browseto ...

Option Compare Database
Private Sub Form_Load()

Dim rowN, rowR, mat, crew, perCom As String
Dim budEst, curBud As Double
End Sub

Private Sub btnCapSubmit_Click()
rowN = Me.CAP_ROW_N
rowR = Me.CAP_ROW_R
mat = Me.CAP_MAT
crew = Me.CAP_CREW
perCom = Me.CAP_PER
budEst = Me.CAP_BUD_EST
curBud = Me.CAP_BUD_CUR

Dim appendIt As String
appendIt = "INSERT INTO CAPITAL " & _
    "([CAPITAL].[CAP_ROW_N], CAPITAL.[CAP_ROW_R], [CAPITAL].[CAP_MAT], [CAPITAL].[CAP_CREW], [CAPITAL].[CAP_PER], [CAPITAL].[CAP_BUD_EST], [CAPITAL].[CAP_BUD_CUR]) " & _
    "VALUES ('" & rowN & "','" & rowR & "','" & mat & "','" & crew & "','" & perCom & "','" & budEst & "','" & curBud & "') WHERE [PRO_ID] = '" & gblFind & "';"
Debug.Print appendIt
DoCmd.RunSQL appendIt
DoCmd.BrowseTo acBrowseToForm, "frmSearchEdit", "NavForm.NavigationSubform", , , acFormEdit
End Sub
Run Code Online (Sandbox Code Playgroud)

Access抱怨错误#3067,"查询输入必须包含至少一个表或查询."

我不知道我在做什么.我尝试使用debug.print,但没有看到任何东西.然后我一整天都在研究这个数据库,所以我可以忽略一些非常简单的事情.

PS我也尝试用Me.CAP_ROW_N(文本框名称)替换变量,但没有骰子.

mwo*_*e02 6

目前还不清楚你在这里要做什么,但INSERT INTO ... VALUES ()声明中没有一个WHERE条款.错误3067是"查询输入必须至少包含一个表或查询".您可能会看到此错误,因为您已包含WHERE子句但未从表中选择现有值.

试试这个:

appendIt = "INSERT INTO CAPITAL " & _
"([CAPITAL].[CAP_ROW_N], CAPITAL.[CAP_ROW_R], [CAPITAL].[CAP_MAT], [CAPITAL].[CAP_CREW], [CAPITAL].[CAP_PER], [CAPITAL].[CAP_BUD_EST], [CAPITAL].[CAP_BUD_CUR]) " & _
"VALUES ('" & rowN & "','" & rowR & "','" & mat & "','" & crew & "','" & perCom & "','" & budEst & "','" & curBud & "');"
Run Code Online (Sandbox Code Playgroud)

这里还有其他几个问题.我会列出它们并让你获得更多指导:

  • 您应该使用.ExecuteDAO方法,而不是DoCmd.RunSQL因为它允许更好的错误处理,尤其是与dbFailOnError选项一起使用时.
  • 在未转义的输入上使用单引号最终会遇到麻烦.例如,WHERE LastName = 'O'Malley'
  • 您似乎将所有七个值都作为文本处理,方法是将它们包装在引号中,即使您说两个值是数字(双精度).数字值不会获得引号.

  • 你会使用`UPDATE`语句,而不是`INSERT INTO`. (3认同)