0

Jet 4.0 OLE DBプロバイダーを使用して、cmShareDenyWriteモードでMicrosoft Access .MDBファイルへのADO接続(dbGo)を開こうとしているDelphi2009アプリケーションがあります。目標は、.MDBファイルを読み取り/書き込みモードで開くことですが、他のアプリケーションがファイルを書き込みモードで開くのを防ぐことです。読み取りモードでファイルに同時にアクセスする他のアプリケーションは問題ありません。実際、それがポイントです。

TADOConnection、TADOQuery(および/またはTADOTable)、およびTDataSourceの組み合わせを使用して、データベース対応コントロールに接続しています。ドキュメントを読んだ(そして読んだり読んだりする)ことからの私の理解は、接続文字列のアクセス許可を「共有拒否書き込み」に設定することでうまくいくということです。

データベースを開くのに問題はありません。接続が成功したときにADOConnectionで返されるモードは、予想どおりcmShareDenyWriteです。データベース対応コントロールを使用してデータセットをナビゲートするのに問題はありません。ただし、レコードを変更して結果を投稿しようとすると、次のことができません。データベースが読み取り専用モードになっているようです。

基本的に、MDBテーブルへのADOアクセスに「共有拒否書き込み」を選択すると、ファイルへの書き込み機能が拒否されるようです。何かが足りないか、これはJETのOLEDBプロバイダーでサポートされていないシナリオです。

誰かが私がどこで間違っているのか、または私が元の目標をどのように達成できるのかを知っていますか?

前もって感謝します、

ジョン・ベネット

4

2 に答える 2

1

TDataSet-> Fields設定で読み取り専用値をtrueに設定して、TADOQueryループでAfterOpenイベントを試してください。

これは機能する可能性がありますが、同様の問題がありましたが、c ++ builder2010にあったため、機能しない可能性があります。

于 2010-01-09T01:10:46.110 に答える
0

MDBを排他モードで開くadModeShareExclusiveが必要なようです。つまり、あなたはそれに書き込むことができますが、他の誰もがすべてのアクセス、読み取り、または書き込みを禁止されています。これはJet/ACEで確実にサポートされているものであるため、問題は実際にはJetOLEDBラッパーがサポートしているかどうかだけでした。

もちろん、私はDelphiプログラマーではなくAccessプログラマーなので、間違っている可能性がありますが、AccessのADOタイプライブラリの定義を調べています。プログラミング環境で定数として使用できない場合、adModeShareExclusiveの値は12です。

于 2010-01-09T02:56:39.470 に答える