首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder 資料庫報表 Master/Detail 關聯實作全攻略

     編輯:關於C++

一、Master/Detail 核心概念

基於一對多關聯:主表每一筆記錄對應從表多筆詳細記錄。透過外來鍵(Foreign Key)連結。BCB 提供 TTable(靜態連結)與 TQuery(動態 SQL)兩類元件實作。

關鍵元件屬性

元件核心屬性
TTableDatabaseName, TableName, Active
TQueryDatabaseName, SQL, Active
TDataSourceDataSet → 指向 TTable/TQuery
TDBGridDataSource → 指向 TDataSource

二、四種實作架構

方案 1:雙 TTable(最簡單)

  • TableMaster → Customer.db
  • TableDetail → Orders.db
  • TableDetail.MasterSource = DataSourceMaster
  • TableDetail.MasterFields = CustNo(雙擊開啟 Field Link Designer 設定)

方案 2:TTable (主) + TQuery (從)

  • QueryDetail.SQL:SELECT OrderNo, CustNo, SaleDate, EmpNo FROM Orders WHERE Orders.CustNo = :CustNo
  • QueryDetail.DataSource = DataSourceMaster(提供參數來源)
  • QueryDetail.Params 設定 CustNo 參數
  • 優點:可限制欄位、加入複雜 WHERE 條件。

方案 3:雙 TQuery(最靈活)

  • QueryMaster.SQL:SELECT * FROM Customer
  • QueryDetail 同方案 2
  • 設計時 QueryDetail.Active 必須為 false,否則 BDE 報錯(參數未綁定)。
  • 運行時 FormCreate 依序 Active = true。

方案 4:單表 TQuery 實作彙總/分類報表

適用於流水作業系統:單一 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 = :CustNo
  • 主表顯示客戶彙總,從表顯示該客戶明細訂單。

三、程式碼啟動範例

void __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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved