過去ログ

                                Page     541
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼値の重複について  しー 04/3/12(金) 1:49

 ───────────────────────────────────────
 ■題名 : 値の重複について
 ■名前 : しー
 ■日付 : 04/3/12(金) 1:49
 -------------------------------------------------------------------------
   値の重複について質問させてください。

db1.mdb
a テーブル
Name テキスト型フィールド 値の重複有り
Data 数値型フィールド   値の重複無し

上記のmdbがあったとします。

db2.mdb db3.mdb にdb1.mdbのaテーブルのリンクテーブルを作成します。

db2.mdb と db3.mdb のモジュールに

Function b()
On Error GoTo Err

  Dim DB As DAO.Database
  Dim RS As DAO.Recordset
  Dim X  As Integer

1:
  DoEvents
  DBEngine.BeginTrans
  
  Set DB = CurrentDb
  Set RS = DB.OpenRecordset("a", dbOpenDynaset)
  
  RS.Sort = "Data DESC"
  Set RS = RS.OpenRecordset()
  
  If RS.EOF = True Then
    X = 0
  Else
    X = RS!Data + 1
  End If

  RS.AddNew
  RS!Name = "db2" 'db3.mdbには "db3" と記載
  RS!Data = X
  RS.Update

  RS.Close
  DB.Close
  DBEngine.CommitTrans
  
  GoTo 1
Err:
  DBEngine.Rollback
  GoTo 1
End Function

と作成します。 db3.mdb の RS!Name には "db3" と設定します。

上記のモジュールを作成後に db2.mdb と db3.mdb を実行した場合に
RS.Updateの場所で値が重複してしまいエラーになってしまいます。
これはトランザクションの使い方が間違っているのでしょうか?

どなたかわかる方ご教授お願いします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 541