我有两个表,我试图将表B中的数据导入表A.如果在表B中找不到表A的ID,则将其保留为空。 例如。
AID Sttl BID Sttl
4 88 3
20 92 2
88 3 100 8
92 2 500 10
800
我目前的代码只返回表A中的第一个类似记录。它不返回下一个匹配记录(例如,它为AID 88返回3但不返回AID92的任何内容)。我错过了什么?
Dim db As dao.Database
Dim rs1 As dao.Recordset
Dim rs2 As dao.Recordset
Set db = CurrentDb()
Set rst1 = db.OpenRecordset(cstrFromtbl, dbOpenDynaset)
Set rst2 = db.OpenRecordset(cstrTotbl, dbOpenDynaset)
Do While Not rs2.EOF
If rs2.Fields("A.ID") = rs1.Fields("B.ID") Then
rs2.Edit
rs2.Fields("Sttl") = rs1.Fields("Sttl")
rs2.Update
Else
rs2.Edit
rs2.Fields("Sttl") = Null
rs2.Update
End If
rs2.MoveNext
Loop
Set rs1 = Nothing
Set rs2 = Nothing
Set dbs = Nothing
End Function
答案 0 :(得分:2)
我可能错了,但看起来你在VBA中重新创建SQL。下面的SQL更简单,可能运行得更快,更快。
UPDATE tablea
INNER JOIN tableb
ON tablea.idfield = tableb.idfield
SET tablea.destinationfield = tableb.sourcefield
答案 1 :(得分:1)
有许多人忘记了,除了排序之外,你无法确定桌子的顺序。因此,您必须进行搜索,并检查是否找到了某些内容。
Do While Not rs2.EOF
rs1.FindFirst("ID=" & rs2.Fields("A.ID"))
rs2.Edit
If rs1.NoMatch Then
rs2.Fields("Sttl") = Null
Else
rs2.Fields("Sttl") = rs1.Fields("Sttl")
EndIF
rs2.Update
rs2.MoveNext
Loop