MS-Access SQL语句根据查询结果更新表

时间:2017-10-02 17:49:29

标签: ms-access

我正在尝试MS-Access并且自学成才,所以请耐心等待我。我尽我所能地研究了这个,但仍然无法让它发挥作用。

我有一个表,我根据查询结果填充字段。我的第一个SQL语句有效,但我的第二个没有,它给了我一个

  

“表达式中的类型不匹配”

错误。第一个查询具有与表相同的记录数,而第二个查询将具有不同数量的记录,具体取决于引用的表。

我希望从第二个查询更新表,其中表ID和查询arcfilenumber匹配,将跳过任何非匹配。

'Runs the query for sorting the weld parameter data
DoCmd.OpenQuery "Temp_Query"

'Code to copy data to proper table
Dim mySQL5 As String

mySQL5 = "UPDATE [" & tblDESTINATION & "] INNER JOIN [temp_query] ON([" & tblDESTINATION & _
         "].ID = [temp_query].expr4) SET [" & tblDESTINATION & "].[S_" & FIELD & "] = [temp_query].expr1"
DoCmd.SetWarnings False
CurrentProject.Connection.Execute mySQL5
DoCmd.SetWarnings True

DoCmd.Close acQuery, "Temp_Query"

'This sets and calls a query that will get the Weld Numbers associated with the selected jig.
'and moves the weld information to the proper table
Dim mySQL9 As String
Dim qdf As DAO.QueryDef
Dim qdfOLD As String
Set qdf = CurrentDb.QueryDefs("qWELD_NO")
With qdf
qdfOLD = .SQL
.SQL = Replace(.SQL, "TEMP", Me.JIG)
DoCmd.OpenQuery "qWELD_NO"

' Code to do stuff with SQL-string/query

mySQL9 = "UPDATE [" & tblDESTINATION & "] INNER JOIN [qweld_no] ON([" & tblDESTINATION & _
     "].ID = [qweld_no].arcfilenumber) SET [" & tblDESTINATION & "].[W_" & FIELD & "] = [qweld_no].weld_no"

MsgBox mySQL9
DoCmd.SetWarnings False
CurrentProject.Connection.Execute mySQL9
DoCmd.SetWarnings True

.SQL = qdfOLD ' Reset SQL to old setting
End With
Set qdf = Nothing

DoCmd.Close acQuery, "qWELD_NO"

非常感谢任何建议或帮助。

编辑:

生成的SQL语句如下所示:

UPDATE [DUWYP-48670] INNER JOIN [qweld_no] ON([DUWYP-48670].ID = [qweld_no].arcfilenumber) SET [DUWYP-48670].[W_5_26_2017] = [qweld_no].weld_no

EDIT2:

我已将表字段类型更改为数字,并在查询中创建了一个表达式以放入1和0,仍然没有去。我将SQL指令移出WITH代码,它仍然无法正常工作。我无法弄清楚为什么它只能在几个代码行之前工作,而不是之后。是因为记录数量不同吗?我应该打开记录集并循环而不是SQL吗?

1 个答案:

答案 0 :(得分:0)

这可能不是理想的解决方案。我建议以正确的格式获取数据库表中的字段。

尽管如此,数据到达的时间往往超出我们的控制范围,因此我们必须将数据强制转换为可以使用的数据。

在这种情况下,可以使用CLNG将文本转换为长数据类型。

UPDATE  [DUWYP-48670] INNER JOIN [qweld_no] ON 
            (CLNG([DUWYP-48670].ID) = CLNG([qweld_no].arcfilenumber)) 
SET     [DUWYP-48670].[W_5_26_2017] = [qweld_no].weld_no  

此链接列出了一些可以使用的其他数据类型:https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/functions/type-conversion-functions 注意 - 并非Access中可以使用链接中的所有类型(它只是我找到的第一个链接,而不是VBA)。