強力なデータベース間アクセスコンポーネントUniDAC使用チュートリアル:トランザクションサポートの実装

4099 ワード

Universal Data Access Components(UniDAC)は、Windows向けDelphi、C++Builder、Lazarus(およびFree Pascal)、Mac OS X、iOS、Android、Linux、64、32ビットのFreeBSDなど、複数のデータベースへの直接アクセスを提供する汎用データベースアクセスコンポーネントです.私たちは長期的な経験をこのコンポーネントに集めて、oracle、マイクロソフトSQLなどの統一的なデータベース接続アクセスを提供します.これは、プロジェクト間で異なるデータベースを簡単に切り替えたり、データベース間アプリケーションインタフェースを作成したりすることができます.
【UniDAC最新バージョンのダウンロード】
この記事では、UniDACでTransactionサポートを実装する方法について説明します.UniDACを使用して制御する方法をよく理解するには、トランザクションに詳しい必要があります.
Transaction(トランザクション)とは何かを簡単に説明します.トランザクションは最小の再分割できない作業ユニットです.通常、1つのトランザクションは完全なビジネスに対応します.
ローカルトランザクションは、TunicConnectionコンポーネントのStartTransaction、Commit、Rollback、およびその他のメソッドによって管理されます.トランザクションを開始するたびに、トランザクションがアクティブかどうかを確認する必要があります.InTransactionプロパティを使用して、この操作を実行できます.トランザクションがアクティブなときにStartTransactionを呼び出すと、例外が発生します.次の例では、ローカルトランザクションを使用する一般的な方法を示します.
if not UniConnection.InTransaction then
     UniConnection.StartTransaction;
   try
     // Do some actions with database. For example:
     UniSQL1.Execute;
     UniSQL2.Execute;
 
     // Commit the current transaction to reflect changes in database if no errors were raised
     UniConnection.Commit;
   except
     // Rollback all changes in database made after StartTransaction if an error was raised
     UniConnection.Rollback;
   end;

トランザクションをアクティブにすると、データセットを開くことを含むすべての操作が、コミットまたはロールバックするまで、現在のトランザクションのコンテキストメニューで実行されます.トランザクションが開始されていない場合、各アクションで実行された変更は、操作が完了した直後にデータベースに反映されます(AutoCommitモードと呼ばれます).InterBaseプロバイダを使用する場合は、AutoCommitプロパティに注意してください.デフォルトでは、AutoCommitプロパティにはTrue値があり、データの変更時にCommitRetainingまたはRollbackRetainingが自動的に実行されます.属性をFalseに設定すると、自分でトランザクションを管理できます.TUniConnection.AutoCommitプロパティは、データセットの特定のオプション「AutoCommit」(TuniQuery,TuniTable)よりも優先されます.もしそうならAutoCommitプロパティがFalseに設定されている場合、データセットの特定のオプション「AutoCommit」の値に関係なく、すべてのトランザクションのみがコミットされます.ほとんどのデータセットがトランザクションを自動的にコミットし、一部のデータセットがトランザクションを手動で制御できるようにする場合は、TuniConnectionを使用します.AutoCommitプロパティはTrueに設定され、手動トランザクション制御を持つデータセットに対してのみ、特定のオプション「AutoCommit」の値をFalseに設定します.
リロードされたStartTransactionメソッドに渡されるパラメータを使用して、各明示的に開始されるトランザクションの動作をカスタマイズできます.トランザクションの独立性レベルと、このトランザクションが編集可能かどうかを指定できます.StartTransactionトピックには、これらのパラメータの詳細が記載されています.
UniDACはSavepointsの使用もサポートしています.Savepointメソッドを使用すると、トランザクションで名前付きセーブポイントを定義できます.RollbackToSavepointメソッドのセーブポイント名を使用して、データベース内の変更rollback(ロールバック)をセーブポイント作成時の実際の状態に戻すことができます.RollbackToSavepointを呼び出すと、現在のトランザクションがアクティブになります.
CommitRetainingメソッドとRollbackRetainingメソッドは、CommitメソッドとRollbackメソッドと似ていますが、現在のトランザクションはアクティブなままです.これは、CommitメソッドとRollbackメソッドのようにStartTransactionを呼び出してトランザクションの処理を継続する必要がないことを意味します.CommitRetainingおよびRollbackRetainingの機能は、InterBase/Firebird/Yaffilサーバによってサポートされています.他のサーバの場合、この機能は、CommitまたはRollbackの後にStartTransactionを呼び出すことによってシミュレートされます.
InterBaseのようなサーバは、単一の接続で複数の同時アクティブなトランザクションをサポートし、カーソルを開くときにトランザクションがアクティブになる必要があります.UniDACはこれらの特性をカプセル化しているので、他のデータベース・サーバと同様に動作するようにすることができます.InterBaseサーバの機能をパラレルトランザクションの実行に参加させる場合は、TCustomUniDataSetのフォームと設定プロパティにいくつかのTuniTransactionコンポーネントを配置する必要があります.たとえば、これらのコンポーネントのTransactionとUpdateTransactionを使用します.TransactionおよびUpdateTransactionプロパティは、InterBaseプロバイダにのみ使用されます.他のプロバイダでは、これらのプロパティは無視されます.
UniDACでは、MTSを使用して、OracleとMicrosoft SQL Server接続の分散トランザクションを管理します.分散トランザクションはTuniTransactionコンポーネントによって制御されます.AddConnectionメソッドを使用して、分散トランザクションコンテキストに接続を追加できます.MTS分散トランザクションコーディネータでは、接続を異なるサーバと異なるサーバタイプにブレンドできます.
begin
  UniConnection1.Connect;
  UniConnection2.Connect;
 
  UniTransaction.AddConnection(UniConnection1);
  UniTransaction.AddConnection(UniConnection2);
 
  UniTransaction.StartTransaction;
 
  UniSQL1.Connection := UniConnection1;
 
  UniSQL2.Connection := UniConnection2;
  try
    UniSQL1.Execute;
    UniSQL2.Execute;
    UniTransaction.Commit;
  except
    UniTransaction.Rollback;
  end;
end;

転載先:https://juejin.im/post/5c9204be518825573578c359