いくつかのチュートリアルを見つけましたが、それでも疑問が残ります。
2 つのテーブルの典型的な例を見てみましょう。1 つは顧客の詳細用で、もう 1 つは注文の詳細用です。
データベース内のcustomers
テーブルには次のものがあります。
customer_id
主キーとして の自動インクリメント整数- 顧客名のテキスト フィールド
- 連絡先の詳細のテキスト フィールド
orders
テーブルには次 のものがあります。
- テーブル
customer_id
を参照する外部キーである整数customers
- アイテム番号の束への参照など、その他のもの
order_value
注文の現金値を格納する整数
2 つのデータセット コンポーネント、2 つのクエリ、および接続が必要です。
ここまでは順調ですね?それとも、私はすでに何かを逃しましたか?
さて、チュートリアルでは、DB グリッドに対応するデータソースの MasterSource を設定する必要があると書かれています。これは、テーブルorders
に対応するデータソースであるcustomers
テーブルと、MasterFields
この場合は に対応するテーブルを示していますcustomer_id
。
他に何か?たとえば、テーブルにDetailfields
対応するデータソースのクエリの を に設定する必要がありますか?customers
customer_id
プロパティまたはパラメータ化されたクエリを使用する必要がありますか?
この時点で、従来のチュートリアルに従って、DB グリッドをスクロールして、customers
DB グリッドに表示されている現在の顧客のすべての注文を確認できますorders
。customers
ユーザーがDB グリッドをクリックすると、Close(); する必要があります。次に Open(); 対応する DB グリッドを更新するorders
クエリ。
ただし、これらのチュートリアルは常に、変更されることのない既存のコンテンツを含む静的データベースを前提としているようです。
私が別の質問をしたとき、私がコマンドを使用していた例を挙げたINSERT INTO orders...
ところ、それは悪いことだと言われ ました。
- OrdersQuery.Append();
- OrdersQuery.FieldByName('customer_id') := [何らかの値]';
- OrdersQuery.FieldByName('item_numbers') := [何らかの値]';
- OrdersQuery.FieldByName('order_value') := [何らかの値]';
- OrdersQuery.Post();
あれは正しいですか?
コマンドはデータを入れて、クエリはそれを取り出すだけのように見えるので、私は尋ねますが、コマンドはデータソースのクエリを介してDBグリッドにリンクしていないことがわかります。
これは選択の問題ですか、それともクエリを使用する必要がありますか?
もしそうなら、クエリでSUM、MIN<AVG、MAXなどの単純なSQL関数でさえ使用できず、それらをコードに移動する必要があるようです。
UPDATE
クエリを使用する必要がある場合、SQLを実装するにはどうすればよいDROP
ですか?
最後に、Master/Detail/Detail の関係を作成できますか?
顧客のすべての注文の合計と平均を示す 3 番目の DB グリッドが必要だとします。orders
ユーザーが別の顧客を選択するたびに更新されるテーブル (ただし、SUM と AVG は使用できません)からデータを取得し、マスター/詳細/詳細の関係を提供します。それを 2 つのマスター/ディテール関係として設定しただけですか? IE、DB グリッド、データソース、総注文数と平均注文数のクエリorders
はcustomers
、customer_id
?
助けと明確化を前もって感謝します。この質問が将来他の人の参考になることを願っています(自由に編集してください)。