1

質問のタイトルが十分に明確かどうかわかりませんが、自由に編集してください。

基本的に、2 つのデータベース テーブルを反映する 2 つの DB グリッドがあり、各グリッドには 1 つが表示されます。

ユーザーが最初のテーブルの行を選択すると (それを と呼びましょうoders)、最初のテーブルの選択された行の列に一致する行の詳細で 2 番目のテーブルを更新します。

たとえば、そのテーブルordersに列customer_idがあり、2 番目のテーブル ( と呼びましょうorder_details) に、その顧客からのすべての注文の詳細 (行ごとに 1 つの注文) を入力したいとします。

2 つの@ データソース、クエリ、および接続を 2 つの s に接続できますが、SQLTDbGridのコーディング方法に行き詰まっています。order_details

の SQLordersは だけSELECT * from ordersですが、他の?

私は何かが欲しいSELECT * from order_details WHERE cutomer_id=<orderQuery>.currentRow.FieldByName("customer_id").AsInteger- しかし、私はそれを行う方法がわかりません...

誰かが Delphi コードで私を助けることができますか?

また、その関係を設定すると、DB グリッドで新しい行を選択すると、ordersDB グリッドが自動的に更新されorder_detailsますか? または、そのためのコードを追加する必要がありますか。

Psbooksタグがもうないことはわかっていますが (これ以上は残念です)、DB 対応コントロールのプログラミングの基礎を説明する優れた本を誰かお勧めできますか? 私は明らかにそれが必要です。ありがとう

4

1 に答える 1

4

詳細 (子) データベースにパラメーター化されたクエリを使用します。

SELECT * FROM Order_Details od WHERE od.CustomerID = :CustomerID

次に、子クエリMasterSourceを親 ( Order) データソースに設定し、 を に設定MasterFieldsしますCustomerID。(2 つをリンクする列が複数ある場合は;、 のようにで区切りますCustomerID;OrderNumber)。

親をスクロールする (親 DBGrid で選択されたレコードを変更する) たびに、パラメーターとして渡された親行の ID を使用して、子クエリが自動的に実行されます。

于 2012-11-28T02:28:11.373 に答える