Access中的DoCmd.RunSQL未提供预期结果

时间:2010-12-09 23:21:54

标签: ms-access vb6

我做了这么多次,我不知道发生了什么变化。


Private Sub Foo()
dim rst as DAO.Recordset

set rst = CurrentDB.OpenRecordset("Select * From Table1;", dbOpenDynaset) rst.movefirst

Do Until rst.EOF DoCmd.RunSQL INSERT INTO Table2 (Last, First, Gender) VALUES (" & "' & rst!Last & '" & ", " & "' & rst!First & '" & ", " & "' & rst!Gender & '" & ");" rst.MoveNext Loop

End Sub

如果我这样做,插入Last,First和Gender的值是“& rst!ColumnName&”,而不是列中的实际数据。

如果我省略单引号,它会起作用,直到遇到带有超级或叛逆的姓氏,然后它会引发语法错误。

但是在过去的6年里,我在代码中完成了同样的事情,并且在这个新项目中无论出于何种原因,它都无法证明我已经习惯的结果。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你好像有点混淆:

DoCmd.RunSQL "INSERT INTO Table2 (Last, First, Gender) VALUES ('" & _
  & rst!Last & "', '" & rst!First & "', '" & rst!Gender & "');"

请注意,如果您的名称包含撇号,则上述操作将失败,因此最好将其转义为:

DoCmd.RunSQL "INSERT INTO Table2 (Last, First, Gender) VALUES ('" & _
  & Replace(rst!Last,"'","''") & "', '" & Replace(rst!First,"'","''") _
  & "', '" & rst!Gender & "');"

我想知道的另一点是你为什么要这样做呢?为什么不:

strSQL = "INSERT INTO Table2 (Last, First, Gender) " _
       & "SELECT Last, First, Gender FROM Table1 "

CurrentDB.Execute strSQL, dbFailOnError