DBExpress 是 Delphi 6 引入的跨平台資料庫存取架構,輕量級、無需 BDE,支援 MySQL、InterBase、Oracle、DB2 等。本文示範如何在 Delphi 中使用 TSQLConnection、TSQLClientDataSet 動態配置連接參數並執行 SQL 查詢,連接遠程 MySQL 服務器。
| 元件 | 角色 |
| TSQLConnection | 管理資料庫連接,保存驅動程式與連接參數 |
| TSQLClientDataSet | 客戶端資料集,緩存查詢結果,支援離線編輯 |
| TDataSource | 連結資料集與資料感知控件(如 DBGrid) |
| TDBGrid | 表格形式顯示/編輯資料 |
關鍵代碼實現
1. 介面佈局要點
- 輸入區:
HostName、User_Name、Password、Database(TEdit)。
- 操作區:
Button1(連接)、ButtonGo(執行 SQL)。
- SQL 輸入:
ESQL(TEdit 或 TMemo)。
- 顯示區:
DBGrid1 綁定 DataSource1 → SQLClientDataSet。
2. 連接按鈕:動態設置參數並打開連接
procedure TForm1.Button1Click(Sender: TObject);
begin
with SQLConnection do begin
Close; {確保關閉現有連接}
Params.Values['HostName'] := HostName.Text;
Params.Values['UserName'] := User_Name.Text;
Params.Values['Password'] := Password.Text;
Params.Values['Database'] := Database.Text;
try
Connected := True; {嘗試連接}
StatusBar1.Panels[0].Text := 'Connect OK';
ButtonGo.Enabled := True; {連接成功啟用查詢按鈕}
except
MessageDlg('Connect Error', mtError, [mbYes], 0);
end;
end;
end;
3. 執行 SQL 按鈕
procedure TForm1.ButtonGoClick(Sender: TObject);
begin
with SQLClientDataSet do begin
Close;
CommandText := ESQL.Text; {如: SELECT * FROM users}
Open;
end;
end;
4. 表單關閉:釋放連接
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SQLConnection.Close;
end;
完整單元代碼
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBXpress, DB, SqlExpr, StdCtrls, ComCtrls, FMTBcd, Grids,
DBGrids, Provider, DBClient, DBLocal, DBLocalS, DBTables;
type
TForm1 = class(TForm)
SQLConnection: TSQLConnection;
StatusBar1: TStatusBar;
Label1: TLabel;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
GroupBox1: TGroupBox;
Label2: TLabel;
Password: TEdit;
User_Name: TEdit;
HostName: TEdit;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
GroupBox2: TGroupBox;
Label5: TLabel;
ESQL: TEdit;
Label6: TLabel;
Database: TEdit;
ButtonGo: TButton;
SQLClientDataSet: TSQLClientDataSet;
procedure Button1Click(Sender: TObject);
procedure ButtonGoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ ... 以上事件處理代碼 ... }
end.
常見問題與優化
- Q: 連接報「Driver not found」
- A: 檢查
dbxdrivers.ini / dbxconnections.ini 是否正確註冊 MySQL 驅動;確認 libmysql.dll 版本與 MySQL 服務器兼容。
- Q: 中文亂碼
- A: 連接參數加入
Charset=utf8(或 utf8mb4),確保資料庫、表、欄位編碼一致。
- Q: 大量資料效能
- A:
TSQLClientDataSet 會將所有記錄載入記憶體,大數據集建議使用 TSQLQuery + TDataSetProvider + TClientDataSet 分頁加載。
- Q: 連接池
- A: DBExpress 本身不提供連接池,中間層架構(DataSnap/RemObjects)通常由應用服務器管理連接池。
總結
DBExpress 提供輕量級的 MySQL 連接方案,配合動態參數設置與 TSQLClientDataSet,可快速構建「連接 → 查詢 → 顯示」的典型資料庫應用原型。
- 上一篇文章: Delphi 環境配置 Bass.dll 完整教程:下載、部署、路徑設置與版本驗證測試
- 下一篇文章: C++Builder 調用 Delphi VCL 控件:封裝為 DLL 動態庫的完整實踐指南
Copyright ©
程式碼之家 All Rights Reserved