【问题标题】:VBA Access - Adding a New Record in Table Based on User Input and Auto Completing the RestVBA 访问 - 根据用户输入在表中添加新记录并自动完成其余记录
【发布时间】:2018-08-03 16:42:46
【问题描述】:

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

【问题讨论】:

    标签: sql ms-access vba


    【解决方案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 记录。

    【讨论】:

    • DLookUp 在这些情况下会派上用场。做得很好!
    • 我很抱歉没有 SQL。我喜欢您的解决方案,但是现在我收到错误“条件表达式中的数据类型不匹配”,我不知道为什么。我更新了我的代码现在的样子。
    • 您的Me.A 值是字符串吗?如果是这样,您必须将其包含在(转义)双引号中:DLookup("FieldB", "TableA", "FieldA=""" & Me.A & """")
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多