【问题标题】:Updating a table based on a findfirst criteria根据 findfirst 条件更新表
【发布时间】:2017-11-17 06:25:52
【问题描述】:

我有一个记录集 TBLSOURCETARGETLINK,我想在更新后事件中更新它。

在添加新记录之前,我还需要确保不存在重复项。 如果记录存在,我只想更新记录并添加新记录。

我正在为 VBA 和如何操作的顺序而苦苦挣扎。

请有人帮忙。

VBA 目前看起来像这样:

Private Sub IsSource_AfterUpdate()

Dim VbaTableID As Integer
Dim VbaSystemID As Integer
Dim VbaFieldID As Integer
Dim db As DAO.Database
Dim rst As DAO.Recordset 
Dim tabledef As String
Dim strcriteria As String


Dim rstSourceTarget As Recordset
Set rstSourceTarget = CurrentDb.OpenRecordset(Name:="tblsouretargetlink",      Type:=RecordsetTypeEnum.dbOpenDynaset)


If IsNull(Me!TableID) Then
   Else
        VbaTableID = Me!TableID
End If


If IsNull(Me!SystemID) Then
   Else
        VbaSystemID = Me!SystemID
  End If

If IsNull(Me!FieldID) Then
   Else
        Vbafield = Me!FieldID
End If
strcriteria = "[systemid] = '" & Me.SystemID & "' And [tableid] = " &    Me.TableID And [FieldID] = " & Me.fieldid"

rs.FindFirst strcriteria

   If .NoMatch Then
        With rstSourceTarget
            .AddNew
            ![SystemID] = VbaSystemID
            ![SourceTable] = VbaTableID
            ![SourceField] = VbaFieldID
            .Update
        End With
   Else
        With rstSourceTarget
            .Edit
            ![IsSource] = -1
            .Update
   End If




End Sub

谢谢

【问题讨论】:

  • 在标准中你有错误的引用,最后一个With 没有关闭End With。你的代码有什么样的问题?如果你解决了这两个问题,它应该可以工作。
  • 什么是rs 记录集?没有声明也没有打开
  • VbaField 未声明
  • 在 .Nomatch 我得到 INVALID 或 UNQUALIFIED 参考(没有错误号)

标签: vba ms-access


【解决方案1】:

试试这个代码:

Private Sub IsSource_AfterUpdate()

    Dim VbaTableID As Integer
    Dim VbaSystemID As Integer
    Dim VbaFieldID As Integer
    Dim db As DAO.Database
    Dim strCriteria As String
    Dim rstSourceTarget As Recordset

    Set db = CurrentDb
    ' don't use CurrentDb for opening recordsets, it's dynamic, you can lose reference to database.
    Set rstSourceTarget = db.OpenRecordset(Name:="tblsouretargetlink", Type:=RecordsetTypeEnum.dbOpenDynaset)

    If Not IsNull(Me!TableID) Then
        VbaTableID = Me!TableID
    End If

    If Not IsNull(Me!SystemID) Then
        VbaSystemID = Me!SystemID
    End If

    If Not IsNull(Me!fieldid) Then
        VbaFieldID = Me!fieldid
    End If

    strCriteria = "[systemid] = '" & Me.SystemID & "' And [tableid] = " & Me.TableID & " And [FieldID] = " & Me.fieldid

    With rstSourceTarget
        .FindFirst strCriteria
        If .NoMatch Then
            .AddNew
            ![SystemID] = VbaSystemID
            ![SourceTable] = VbaTableID
            ![SourceField] = VbaFieldID
            .Update
        Else
            .Edit
            ![IsSource] = -1
            .Update
        End If
    End With
End Sub

有很多错误,所以首先添加

Option Explicit

在每个模块的开头并重新编译项目(Debug->Compile)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2017-11-23
    • 2011-07-01
    • 2013-05-04
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多