マスターテーブルであるADOQuery1があり、詳細テーブルに他の1つのADOQuery2を使用したいのですが、実際には、解決策を見つける正しい方法が見つかりません。
ADOQuery1nr-オートナム名ローカルクォンタム。ADOQuery2 Nro _ Autonum name
l1
l2 l3
誰かが感謝するのを助けることができます
マスターテーブルであるADOQuery1があり、詳細テーブルに他の1つのADOQuery2を使用したいのですが、実際には、解決策を見つける正しい方法が見つかりません。
ADOQuery1nr-オートナム名ローカルクォンタム。ADOQuery2 Nro _ Autonum name
l1
l2 l3
誰かが感謝するのを助けることができます
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データセットを使用してマスターと詳細の関係を作成する方法が明確になることを願っています。
よろしく
これを自動化するコンポーネントがいくつかありますが、生の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ヘルプには、そのプロパティに関する詳細情報があります。