投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/8/22 23:17:24
何度か同じ投稿を繰り返しているので訝しんでいたのですが、
投稿内容が微妙に異なっていたんですね。


> VBによる
VBA や VB6 ではなく、.NET 版の方でしょうか。

古い記事ですが、下記の最後の方(下から 7 つ目)にある
『連載:VS 2005によるWindows DBプログラミング』などは、体系立てて
説明されているので、一通り手順通りに進めていくと、
データベースを使用したアプリ開発に必要な知識が得られると思います。
https://www.atmarkit.co.jp/ait/subtop/dotnet/app/



> ①MBDで検索・更新時に異常事態がおきた場合のロールアップ方法
> ①MBDで検索・更新時に異常事態がおきた場合のロールバック方法
mdb のロールバック(巻き戻し)、ということでよろしいでしょうか。

検索においてロールバックということは無いと思うので、
更新・追加・削除といったデータ編集の話と仮定します。


異常事態というのが、ファイルの破損等の物理要因だとしたら
バックアップファイルから差し戻すしかありませんが、
実行時エラーということなら、VBA なら On Error ステートメント、
VB.NET なら Try~Catch ステートメントでエラーを捉えます。

エラーで失敗した段階で、その更新処理はキャンセルされますが、
オートナンバーに関しては、採番された値は巻き戻らず、欠番扱いとなります。

単一の更新処理ではなく、複数回の INSERT / DELETE / UPDATE 操作を
まとめてロールバックする必要がある場合は、その一連の操作範囲を
トランザクションとして指定する必要があります。


ADODB で接続している場合:
 Connection オブジェクトの BeginTrans メソッドで開始
 Connection オブジェクトの CommitTrans メソッドで確定
 Connection オブジェクトの Rollback メソッドで巻き戻し

DAO で接続している場合:
 Workspace オブジェクトの BeginTrans メソッドで開始
 Workspace オブジェクトの CommitTrans メソッドで確定
 Workspace オブジェクトの Rollback メソッドで巻き戻し

System.Data.OleDb で接続している場合:
 OleDbConnection オブジェクトの BeginTrans メソッドで開始 (OleDbTransaction オブジェクトを取得)
 OleDbTransaction オブジェクトの Commit メソッドで確定
 OleDbTransaction オブジェクトの Rollback メソッドで巻き戻し



> VBによるMDBの検索・更新方法は<初心者です>先輩のご質問でよく解りました
> ②MBDで検索時の table への読み込み方
「検索・更新方法」は理解済みなのですよね?

table というのは、データベース上の表のことではなく、
System.Data.DataTable でしょうか。

DataTable への読み込みだとしたら、デザイン時に
TableAdapter を生成しておくのが手っ取り早いです。
もしも、実行時に動的に SQL を構築するようなケースでは
System.Data.OleDb.OleDbDataAdapter オブジェクトの Fill メソッドを使います。
https://www.adonetvb.com/AdoNetDataAdapterDataGridViewOle.html

OleDbDataAdapter の Fill メソッドは、上記のように、System.Data.OleDb.OleDbConnection での
接続時に用いられることが多いですが、ADODB での接続時にも利用できます。
(Fill メソッドの引数に、埋め込む先の DataTable と、取得元の Recordset の 2 つを渡せばよい)


そうして、DataTable に取り込んだデータから、必要なデータを
さらに絞り込む必要があるような場合には、Linq to DataSet を使う方法や、
DataView を使う方法、BindingSource を使う方法などがありますが、
これは質問範囲から外れるので割愛。


> importsなども必要なら教えて下さい 
System.Data 名前空間などは、既定で Imports 済みのはずですが、必要に応じて
System.Data.OleDb 名前空間も Imports しておきましょう。

もし、今まで使ったことのないクラスやメソッドを利用するにあたり、
どのファイルを参照設定したり、何という名前空間を Imports すべきなのかが
分からなかった場合には、まずはドキュメントを調べてみてください。

https://docs.microsoft.com/ja-jp/dotnet/api/system.data.oledb.oledbdataadapter.fill?view=netframework-4.7.2

例えば上記は「OleDbDataAdapter.Fill メソッド」の解説ですが、その冒頭に
> 名前空間: System.Data.OleDb
> アセンブリ: System.Data.dll
と書かれています。

これはつまり、参照設定に System.Data.dll が必要であり、かつ、
「Imports System.Data.OleDb」を書けばよいということを意味しています。
(実際のところ、参照設定は必須事項ですが、Imports は必ずしも必要ではないこともあります)