Insert Into Select From链接表

时间:2015-08-17 18:51:43

标签: vba ms-access access-vba

我正在尝试已经完成数百次的事情 - 除了我的代码不能编译。使用它作为参考How to do INSERT into a table records extracted from another table我提出了以下子,它应该清除一个表并从另一个链接表中重新填充它(想法是解放链表,所以它没有.laccdg文件名称为long)

Private Sub Form_Open(Cancel As Integer)
    Dim rsDocs As Recordset
    Dim sqlQuery As String

    DoCmd.RunSQL "DELETE * FROM [Docs]"

    sqlQuery = "INSERT INTO [Docs] (Numero, Description, [ID Symix], Groupe, [ID Sami])" & _
                " SELECT [Unité] & "" "" & [Numéro Document] AS Numero, Description, [ID Symix], [Groupe Source], [ID Doc Sami]" & _
                " FROM [Documents]"
        Debug.Print sqlQuery
    Set rsDocs = CurrentDb.OpenRecordset(sqlQuery)
    CurrentDb.Execute sqlQuery
    rsDocs.Close
    Set rsDocs = Nothing
End Sub

我在执行行上出错了。 sql语句错误。有人能看到它摇摇欲坠的地方吗?使用"" ""在这种情况下加入两个可以接受的领域?

此外,清除表会提示一条消息,询问我是否确定要执行此操作。将DisplayAlerts设置为False会产生负面影响吗?或者,如果我在之后将其恢复为True,它应该是无害的吗?

3 个答案:

答案 0 :(得分:2)

调试您在VBA中设计的查询的一般提示:

  • 执行SQL的Debug.Print(您已经拥有)
  • 创建新查询,关闭“添加表格”
  • 切换到SQL视图并从调试窗口粘贴您的sql
  • 执行sql,或切换到设计视图。

通常,您将从查询编辑器获得比从VBA获得的更具体的错误消息。

Access中的DisplayAlerts是:DoCmd.SetWarnings True / False 但是使用DB.Execute而不是DoCmd.RunSQL来避免它是better

答案 1 :(得分:0)

无需额外的双引号

"INSERT INTO [Docs] (Numero, Description, [ID Symix], Groupe, [ID Sami])" & _
            " SELECT [Unité] & " " & [Numéro Document] AS Numero, Description, [ID Symix], [Groupe Source], [ID Doc Sami]" & _
            " FROM [Documents]"

答案 2 :(得分:0)

使用1组单引号,而不是2组双引号(不起作用)或1组双引号(不产生有效字符串),而是使用1组单引号:

sqlQuery = "INSERT INTO [Docs] (Numero, Description, [ID Symix], Groupe, [ID Sami])" & _
            " SELECT [Unité] & ' ' & [Numéro Document] AS Numero, Description, [ID Symix], [Groupe Source], [ID Doc Sami]" & _
            " FROM [Documents]"