次の方法で共有

同一トランザクション内なのに、先に更新した結果のロック解放を待って、あとのSELECTがタイムアウトになる。

Anonymous
2011-09-08T08:36:31+00:00

Acc2010で、DAOを使用して、SQLServer2008R2にあるテーブルに更新する処理を作っています。

もともとはAcc2003でODBCDirectで処理していたのですが、Acc2010で使用不可になったことを受けて

なるべく少ない工数でアップグレードするという作業中です。

<不具合>

「テーブルA」に対して、対象データをDELETEしたあと、新たにデータをINSERT(AddNew)するものです。

Dim WS As WorkSpace

Dim con As Database

Dim rs As RecordSet

Set WS = CreateWorkspace("", "admin", ", dbUseJet)

Set con = WS.OpenDatabase("", False, False, "接続文字列")

WS.BeginTrans

  con.Execute "DELETE FROM テーブルA WHERE XXXXX", dbSQLPassThrough

  Set rs = con.OpenRecordset("SELECT * FROM テーブルA WHERE XXXXX", dbOpenDynaset, dbSQLPassThrough, dbPessimistic)

  rs.AddNew

   ×××

  rs.Edit

  rs.Close

WS.CommitTrans

これをすると、OpenRecordsetが、上のExecuteのCommitを待ち続けてタイムアウトになるのですが

同一トランザクション内なのに更新後の結果を参照できないのでしょうか。

これが仕様だとした場合、本来どう処理するべきなのでしょうか。

本当に困っています。

宜しくお願い致します。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

2 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-09-09T02:15:55+00:00

    MukkuMuku さま

    いつもありがとうございます。

    やっぱりADO使ってねっていうのが、MSさんの姿勢なのでしょうけど

    だったらAccess使わないアプリに変えたほうが早そうなくらいなので

    何とか少ない工数で延命したいところです。

    他のオプションで試してみますが、たぶんダメなんだろうなぁ・・・。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2011-09-08T17:44:45+00:00

    こんばんは。MukkuMukuです。

    んー、どうだろう。別のOptionで試してみるのはどうだろうかと思ってはみたものの、dbUseJetでACE経由で接続されるのかどうか、それで何か問題が発生するかどうか調べたことはないけど、実際のところ大丈夫ですかね。

    ODBCDirectがサポートされなくなったのはaccess2007からで、ODBCDirectじゃなくてADO使ってねというのが本来なのでしょうけど。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません