我的VBA非常生锈,但是我试图根据用户输入添加新记录。有些人在其中输入数据的文本框,但表中有他们未输入的字段。我想添加新记录,并使用SQL语句自动填充来自与其输入的ID相匹配的另一个表中的数据。我正在使用一个记录集来更新表,并尝试将sql查询直接放入addnew中,后者仅将查询的文本输入到表中。我还尝试将语句设置为变量,但没有成功。
Set rec = db.OpenRecordset("Select * from Table")
rec.AddNew
rec("A") = Me.A
rec("B") = "SQL1"
rec("C") = "SQL2"
rec("D") = "SQL3"
rec("E") = Me.E
rec("F") = Me.F
rec("G") = Me.G
rec.Update
更新:
Set rec = db.OpenRecordset("Select * from TableA")
rec.AddNew
rec("A") = Me.A
rec("B") = DLookup("B", "TableB", "A=" & Me.A)
rec("C") = DLookup("C", "TableB", "A=" & Me.A)
rec("D") = DLookup("D", "TableB", "D=" & Me.A)
rec("E") = Me.E
rec("F") = Me.F
rec("G") = Me.G
rec.Update
rec.Close
答案 0 :(得分:1)
我不确定您的SQL语句(SQL1,SQL2,SQL3)做什么,但是您可能只需要一个简单的DLOOKUP
调用。像这样:
Set rec = db.OpenRecordset("Select * from Table")
rec.AddNew
rec("A") = Me.A
rec("B") = DLookup("FieldB", "TableA", "FieldA=" & Me.A)
rec("C") = DLookup("FieldC", "TableA", "FieldA=" & Me.A)
rec("D") = DLookup("FieldD", "TableA", "FieldA=" & Me.A)
rec("E") = Me.E
rec("F") = Me.F
rec("G") = Me.G
rec.Update
您还可以结合使用DAO.Recordset
和参数化查询来获取所需的B,C和D记录。
答案 1 :(得分:0)
https://msdn.microsoft.com/en-us/library/office/ff845624.aspx
VBA: OpenRecordset .AddNew method runs slow
我认为您需要一个With rec语句。而且看起来像.Close可能是个好主意。
Set rec = db.OpenRecordset("Select * from Table")
With rec
.AddNew
rec("A") = Me.A
rec("B") = "SQL1"
rec("C") = "SQL2"
rec("D") = "SQL3"
rec("E") = Me.E
rec("F") = Me.F
rec("G") = Me.G
.Update
.Close
End With