DB 対応コントロールに最初のつまずきのステップを踏んでいます (何か良いチュートリアルはありますか?)。
6 列の MySql テーブルがあり、TDbGrid にロードできました。
ただし、列の 1 つは別のテーブルへのインデックスです。それはバーコードで、それを表示するのではなく、それに関連付けられた製品名を表示したいと考えています。
それ、どうやったら出来るの?
(そして、現在の行を示す「ガター」(?)を左下に隠すことはできますか?)
ありがとう
常にSQL側から結合を実行する必要があります。プログラムで実行するよりもはるかに簡単です
そのような:
SELECT mytable.id, mytable.column1, another_table.barcode
FROM mytable
JOIN another_table ON another_table.id = mytable.barcode_id
ガターを削除するには、オプションで DBGrid プロパティのチェックを外す必要がありますdgIndicator
。
「DB-Aware コントロール」に関しては、delphi ヘルプを試す必要があります。
テーブルの代わりに、クエリを使用します。次に、結合を使用して、次のように製品名を選択します。
SELECT
t.*,
p.name
FROM
YourTable t
INNER JOIN Product p on p.barcode = t.barcode
正確な列がわからないため、t.* を使用します。実際には、私は を使用せずselect *
、代わりに特定の列を指定します。とにかく使用する場合*
は、データセット/クエリの TField オブジェクトの Visible プロパティを に設定することで、特定の列を非表示にすることができますFalse
。
テーブルへの接続にどのコンポーネントを使用しているかはわかりませんが、それらのほとんどには、テーブル名の代わりに SQL を挿入できるクエリ カウンターパートがあります。
ガターはOptions
、オブジェクト インスペクタのプロパティに移動し、展開して に設定dgIndicator
することで非表示にできますFalse
。
記録のために: Paradox や DBF などの ISAM データベースでは、典型的なソリューションはいわゆるmaster-detail tables relations
ものであり、SQL でも機能する可能性があります。それは非常に非効率的で遅くなりますが。SQL に関する本を何冊か読むことは間違いありません。
TTableの代わりにTQueryコンポーネントを使用し、上記の推奨されるselectステートメントを使用してSQLプロパティを設定します。表示する列をSQLステートメントに追加するだけで、期待どおりの結果が得られます。「ガター」に関しては、実行時に何らかの方法でグリッドをハックする必要があります。