VBA访问-根据用户输入在表中添加新记录,并自动完成其余记录

时间:2018-08-03 16:42:46

标签: sql ms-access access-vba

我的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

2 个答案:

答案 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