1

マスターテーブルであるADOQuery1があり、詳細テーブルに他の1つのADOQuery2を使用したいのですが、実際には、解決策を見つける正しい方法が見つかりません。

ADOQuery1nr-オートナム名ローカルクォンタム。ADOQuery2 Nro _ Autonum name l1
l2 l3

誰かが感謝するのを助けることができます

4

2 に答える 2

1

AdoQueryの場合、DataSourceプロパティを使用する必要があります。これがあなたがすべきことです:

1- AdoQueryをマスターデータセットとしてフォームにドロップし、SQLプロパティを使用してクエリを記述します。

2-データソースコンポーネントをフォームにドロップし、手順1で作成したマスターAdoQueryに接続します。

3-別のAdoQueryを詳細データセットとしてフォームにドロップします。

4-詳細データセットのDataSourceプロパティを、マスターデータセットに接続されているデータソースに設定します(手順2を参照)。

5- SQLプロパティを使用して、詳細データセットのSQLクエリを記述します。クエリには、マスターデータソースのフィールドの1つと同じ名前のパラメーターを使用して詳細データセットをフィルター処理するWHERE句が必要です。たとえば、マスターデータセットにIDフィールドがあり、詳細データセットにマスターデータセットのIDフィールドの外部キーであるMasterIDというフィールドがあるとします。これらのフィールドを使用して、詳細データセットをマスターデータセットに接続するには、次のように詳細データセットのクエリを記述できます。

SELECT * FROM DetailTable WHERE MasterID = :ID

ご覧のとおり、IDという名前のSQLパラメータがあります。これは、マスターデータソースのIDフィールドと同じ名前です。これで、マスターデータソースのレコードを参照するたびに、DelphiはIDフィールドの値を自動的に取得し、それを詳細データセットのIDパラメータの値として使用して、詳細データセットを再クエリします。パラメータ値を設定して明示的に再クエリする必要はありません。これは自動的に行われます。

これにより、AdoQueryデータセットを使用してマスターと詳細の関係を作成する方法が明確になることを願っています。

よろしく

于 2010-06-25T23:05:42.350 に答える
0

これを自動化するコンポーネントがいくつかありますが、生のTADOQueryを使用する場合は、次のように実装します。

マスターTADOQuery.AfterScrollイベントで、これを実行します。

myDetailQuery.Active := False;
myDetailQuery.Params.ParamByName('ID').Value := DataSet.FieldsByName('ID').AsString;
myDetailQuery.Active := True;

DetailTADOQueryのクエリは次のようになります。

SELECT * FROM DetailTable
WHERE ID = :ID;

もっと良い方法があれば、私も見てみたいです。

TADOTableにはこの機能が組み込まれているため、代わりにそれを使用することを検討してください。TADOTable.MasterSourceを設定します。Delphiヘルプには、そのプロパティに関する詳細情報があります。

于 2010-06-25T21:04:47.937 に答える