【问题标题】:Insert Into Select From linked table插入到从链接表中选择
【发布时间】:2015-08-17 18:51:43
【问题描述】:

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

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 它应该是无害的吗?

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      不需要额外的双引号

      "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]"
      

      【讨论】:

      • 这不会产生有效的字符串。改用单引号来修复它。
      【解决方案3】:

      使用 1 组单引号,而不是 2 组不起作用的双引号或 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]"
      

      【讨论】:

      • 实际上我很惊讶这两个双引号是问题所在 - 这应该可以。但是使用单引号肯定更具可读性。
      • 是的,双引号给出了在即时窗口中看起来有效的语句。不知道出了什么问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多