Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
MDB検索更新異常時のロールバック方法
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30524#CommentId84115
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
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 は必ずしも必要ではないこともあります)