0

次の結合選択を行う必要があるpFibdataset(BDEDatasetと同様に機能します)があります

select table.Name as name,
table1.Name as name_1,
table2.Name as name_2
from table 
left join table table_1 on table.id=table_1.id
left join table table_2 on table.id=table_2.id

フィールドname、name_1、およびname_2は、一部のデータベース対応編集にリンクされています。ここで、変更(更新、削除、挿入操作)した後、テーブルのname、name_1、およびname_2フィールドを更新する必要があります。wiki Using_Multiple_Update_Objects_Indexに基づいて、UpdateObjectsまたはOnUpdateRecordイベントを使用できます。

問題は、これをどのように実装する必要があるのか​​理解できないことです。クエリで結合を選択し、name_1フィールドとname_2フィールドを定義して操作する方法を説明します。誰かが私にこれの例を教えてもらえますか?

これを実現するためにサブクエリを使用する方法を知っています。UpdateObjectsまたはOnUpdateRecordを使用してどのように作成できるかを確認する必要があります。

4

2 に答える 2

2

TpFibUpdateObjectは、クライアント側のトリガーのように機能します。これを機能させるには、次のプロパティを設定します。

DataSet - dataset (master) to monitor
KindUpdate - Insert/Update/Delete - action to monitor
SQL - command to execute when action is fired, params are taken from DataSet
ExecuteOrder - AfterDefault/BeforeDefault - probably you need after / master

しかし、代わりに、多くのUpdateObjectコンポーネントとそのような絡み合ったアプローチを使用する代わりに、2つの代替(よりよく読む)方法をお勧めします。

  1. 更新可能なビュー。これは「仮想テーブル」のように機能します。これらのtheeeテーブルを結合するビューを作成し、Before Insert / Update/Deleteトリガーを書き込みます。Delphiでは、通常のテーブルとして使用します。ビューから選択/ビューに挿入/ビューを更新し、ビューから削除します。とにかく、私はあなたがこれらのテーブルを一緒にリンクする多くの場所で必要だと思います。

  2. TpFIBDataSetSQLでEXECUTEBLOCKステートメントを使用します。すべてのテーブルをバッチで挿入/更新/削除します。

于 2012-09-11T14:59:42.827 に答える
0

解決策:OnUpdateRecordは、結合されたテーブルの各フィールドに対してTUpdateObjectを作成する必要があります。

 UpdateObjectvariable.DataSet := Dataset;
 fill the SQL text
 Apply.

すべての更新オブジェクトが設定されたら、 UpdateAction := uaApplied;を呼び出す必要があります。

于 2012-09-11T15:00:22.780 に答える