基於一對多關聯:主表每一筆記錄對應從表多筆詳細記錄。透過外來鍵(Foreign Key)連結。BCB 提供 TTable(靜態連結)與 TQuery(動態 SQL)兩類元件實作。
| 元件 | 核心屬性 |
|---|---|
| TTable | DatabaseName, TableName, Active |
| TQuery | DatabaseName, SQL, Active |
| TDataSource | DataSet → 指向 TTable/TQuery |
| TDBGrid | DataSource → 指向 TDataSource |
TableMaster → Customer.dbTableDetail → Orders.dbTableDetail.MasterSource = DataSourceMasterTableDetail.MasterFields = CustNo(雙擊開啟 Field Link Designer 設定)QueryDetail.SQL:SELECT OrderNo, CustNo, SaleDate, EmpNo FROM Orders WHERE Orders.CustNo = :CustNoQueryDetail.DataSource = DataSourceMaster(提供參數來源)QueryDetail.Params 設定 CustNo 參數QueryMaster.SQL:SELECT * FROM CustomerQueryDetail 同方案 2FormCreate 依序 Active = true。適用於流水作業系統:單一 Orders.db 記錄所有訂單,事後需按客戶彙總。
QueryMaster.SQL:
SELECT DISTINCT CustNo,
SUM(ItemsTotal) AS ItemsTotalAll,
SUM(Freight) AS FreightAll,
SUM(AmountPaid) AS AmountPaidAll
FROM Orders
GROUP BY CustNo
ORDER BY CustNo
QueryDetail.SQL:SELECT OrderNo, CustNo, PaymentMethod, ItemsTotal, TaxRate, Freight, AmountPaid FROM Orders WHERE Orders.CustNo = :CustNovoid __fastcall TForm1::FormCreate(TObject *Sender) {
// 方案 1
TableMaster->Active = true;
TableDetail->Active = true;
// 方案 2/3/4
QueryMaster->Active = true;
QueryDetail->Active = true;
}
| 場景 | 推薦方案 |
|---|---|
| 簡單雙表關聯、固定結構 | 方案 1 (TTable) |
| 需動態篩選欄位、複雜條件 | 方案 2 (TTable + TQuery) |
| 多層 M/D、遠端資料庫、多表聯結 | 方案 3 (雙 TQuery) |
| 單表彙總/分類報表 | 方案 4 (單表 TQuery) |
C++Builder 3.0 / Win95、C++Builder 4.0 / Win98 驗證通過。現代版本(10.x+)同樣適用,建議搭配 FireDAC 取代 BDE。