我做了这么多次,我不知道发生了什么变化。
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年里,我在代码中完成了同样的事情,并且在这个新项目中无论出于何种原因,它都无法证明我已经习惯的结果。
有什么想法吗?
答案 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