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

Delphi TQuery 異質資料庫關聯查詢:Paradox/dBase/Access 多庫聯查實戰

     編輯:Delphi

TTable 單表操作,TQuery 不僅支援多表 JOIN,更能跨越不同資料庫引擎(Paradox、dBase、Access、SQL Server 等)進行關聯查詢,只要系統安裝對應 ODBC 驅動與 BDE 別名即可。本文實戰演示 Paradox+dBase 異庫聯查、Access 多表跨庫聯查兩大經典場景。

核心前置條件

  • 安裝目標資料庫的 ODBC 驅動程式。
  • BDE 管理員 (BDE Administrator) 建立對應資料庫別名。
  • TQuery.DatabaseName := ''(設為空字串),讓 SQL 內的完整路徑或別名生效。
  • SQL 陳述式必須寫在單行,不可換行。

場景一:Paradox + dBase 異庫聯查

Master.db (Paradox) 與 Customer.dbf (dBase) 共同擁有 CustNo 欄位。


Query1.Close;
Query1.DatabaseName := '';  // 關鍵!
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM "Master.db" A, "Customer.dbf" B WHERE A.CustNo = B.CustNo');
Query1.Open;
  • 檔名含副檔名,雙引號括起。
  • A、B 為資料表別名,簡化欄位引用。
  • 適用於同目錄下的本地檔案資料庫。

場景二:Access 多表跨庫聯查

RSDA.mdb (含在職/離職目錄) 與 ZFGjj.mdb (住房公積金),透過「用戶號」關聯。

步驟 1:ODBC 建立系統 DSN

  • DSN "RSDA" → RSDA.mdb
  • DSN "ZFGjj" → ZFGjj.mdb

步驟 2:BDE 建立資料庫別名

  • Alias "RSDA" → ODBC DSN "RSDA"
  • Alias "ZFGjj" → ODBC DSN "ZFGjj"

步驟 3:表單放置兩個 TDatabase


Database1.AliasName := 'ZFGjj'; Database1.DatabaseName := 'ZFGjj';
Database1.KeepConnection := True; Database1.Connected := True;

Database2.AliasName := 'RSDA'; Database2.DatabaseName := 'RSDA';
Database2.KeepConnection := True; Database2.Connected := True;

步驟 4:動態參數化跨庫查詢


for I := 1 to 10 do begin
  Query1.Close;
  Query1.DatabaseName := '';
  Query1.SQL.Clear;
  Query1.SQL.Add(
    'SELECT A.七月, B.個人賬號, B.用戶號, C.姓名 ' +
    'FROM ":ZFGjj:個人匯繳部門表" A, ":ZFGjj:住房公積金明細表" B, ":RSDA:在職職工目錄" C ' +
    'WHERE (A.用戶號 = B.用戶號) AND (B.用戶號 = C.用戶號) AND (A.部門 = :Dept) AND (B.封存 = :IsSealed)'
  );
  Query1.Prepare;  // 解析參數
  Query1.Params[0].DataType := ftInteger;  // :Dept
  Query1.Params[1].DataType := ftBoolean;  // :IsSealed
  Query1.Params[0].AsInteger := DeptArray[I];
  Query1.Params[1].AsBoolean := IsSealedFlag;
  Query1.Open;
  // 處理結果...
end;

關鍵語法說明

  • :ZFGjj:表名:BDE 別名語法,冒號包住別名與表名。
  • 動態參數 :Dept、:IsSealed 依出現順序自動對應 Params[0]、Params[1]。
  • Prepare 可預編譯 SQL,提升重複執行效能。

適用資料庫類型

只要有 ODBC 驅動並在 BDE 登錄別名,即可在同一 SQL 中混合查詢:

  • 本地檔案:Paradox (.db)、dBase (.dbf)、FoxPro (.dbf)
  • 桌面資料庫:Access (.mdb/.accdb)、Excel (.xls)
  • Client/Server:SQL Server、Oracle、InterBase、MySQL、PostgreSQL

效能與限制提醒

  • 跨庫聯查在本地引擎端執行 JOIN,大量資料時效能不如 Server 端。
  • Access 檔案鎖定機制較弱,高併發建議遷移至 SQL Server。
  • BDE 已停止更新,新專案建議改用 FireDAC / AnyDAC / ADO / dbExpress 等現代架構。

TQuery 異質聯查是 Delphi 早期跨平台資料整合的利器,理解其原理有助於維護舊系統或設計遷移方案。

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