首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Delphi 連接 MySQL 完整實戰:dbExpress 架構、組件配置、連接池與部署依賴

     編輯:MySQL 綜合教學

架構概覽

使用 **dbExpress** 四層架構連接 MySQL:

UI 控件 (DBGrid, DBNavigator)
    ↓
DataSource (TDataSource)
    ↓
ClientDataSet (TClientDataSet) ← 內存數據緩存、支持離線編輯
    ↓
DataSetProvider (TDataSetProvider) ← 適配器,橋接雙向數據流
    ↓
SQLTable / SQLQuery (TSQLTable/TSQLQuery) ← 一向游標、只讀/可更新
    ↓
SQLConnection (TSQLConnection) ← dbExpress 驅動層
    ↓
MySQL 客戶端庫 (libmysql.dll) + dbExpress 驅動

核心組件配置詳解

1. SQLConnection (關鍵)

ConnectionName = 'MYSQLCONNECTION'
DriverName = 'MySQL'
GetDriverFunc = 'getSQLDriverMYSQL'
LibraryName = 'dbxmys.dll'        -- dbExpress MySQL 驅動
VendorLib = 'libmysql.dll'        -- MySQL 官方客戶端庫
LoginPrompt = False
Params.Values['HostName'] = 'localhost'
Params.Values['Database'] = 'mysqldb'
Params.Values['User_Name'] = 'root'
Params.Values['Password'] = 'pswd'
Params.Values['MaxBlobSize'] = '-1'
Params.Values['ServerCharSet'] = 'utf8'
Connected = True

2. SQLTable / SQLQuery

  • `TSQLTable`:綁定單表,`TableName = 'human'`,適合簡單 CRUD。
  • `TSQLQuery`:執行任意 SQL,支持參數化查詢,**生產環境首選**。

3. ClientDataSet 關鍵屬性

Active = True
ProviderName = 'DataSetProvider1'
-- 重要事件:
-- OnReconcileError: 衝突解決 (ApplyUpdates 失敗時)
-- BeforePost: 客戶端驗證

更新持久化代碼

procedure TForm1.Button1Click(Sender: TObject);
begin
  // 將 ClientDataSet 內存修改批量應用到數據庫
  ClientDataSet1.ApplyUpdates(0); // 0 = 無限重試
end;

部署依賴:兩個核心 DLL 必須隨程序發布

  1. dbxmys.dll:dbExpress MySQL 驅動 (位於 Delphi 安裝目錄 `Bin` 或 `dbExpress` 目錄)。
  2. libmysql.dll:MySQL 官方客戶端庫,**版本必須與目標 MySQL 服務器兼容** (建議用 5.7/8.0 官方發布包中的 dll)。

放置於應用程序同目錄或系統 PATH 目錄下。

常見問題排查

現象原因解決
Cannot load libmysql.dll缺少 DLL 或版本不匹配 (32/64 位不一致)確認編譯目標平台與 DLL 位數一致;用 Dependency Walker 檢查依賴
連接超時防火牆、skip-name-resolve、bind-addressMySQL 配置 `bind-address=0.0.0.0`;客戶端用 IP 直連
中文亂碼字符集不一致連接參數 `ServerCharSet=utf8` / `utf8mb4`;表/列字符集一致
ApplyUpdates 失敗主鍵缺失、觸發器、並發衝突表必須有主鍵;OnReconcileError 處理衝突
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved