2017-11-17 22 views
1

私は更新後イベントで更新したいレコードセットTBLSOURCETARGETLINKを持っています。findfirst基準に基づいてテーブルを更新する

また、新しいレコードを追加する前に重複が存在しないようにする必要があります。 レコードが存在する場合は、レコードを更新して新しいレコードを追加したいだけです。

私はVBAとそれを行う方法の順序付けに苦労しています。

誰かを助けてください。

VBAは現在、次のようになりますので、最初にすべての、

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 
を追加します。

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 

このコードを試してみてください、あなたに

+0

あなたは間違った見積もりがあり、また最後の 'With'は' End With'も閉じていません。コードにどのような問題がありますか?これらの2つの問題を修正するとうまくいくはずです。 –

+0

'rs'レコードセットとは何ですか?宣言も開封もされていない –

+0

VbaFieldはで –

答えて

0

ありがとうございました

番目各モジュールの開始とプロジェクトを再コンパイルする(デバッグ - >コンパイル)

+0

ありがとうございます – Jext

関連する問題