承接上篇 ADO 物件簡介,本文提供一個完整可執行的範例,示範如何在 Delphi 中透過 CreateOleObject 建立 ADODB.Connection 與 ADODB.Recordset,對 Access 資料庫執行查詢、新增、修改、刪除與條件查詢等完整 CRUD 操作。代碼中詳細註解每一步對應的 Delphi 對應操作,適合有 BDE 經驗的開發者快速遷移至 ADO。
Test.mdb(Access 97/2000)wfjcommu(欄位:AName、Portable、Tel、BP、PostAddress)ComObjconst
// CommandType
adCmdUnknown = &H0008;
adCmdText = &H0001; // SQL 陳述式
adCmdTable = &H0002; // 資料表名
adCmdStoredProc = &H0004; // 預存程序
// CursorType
adOpenForwardOnly = 0; // 預設,唯前向
adOpenKeyset = 1; // 可見他人修改,不可見增刪
adOpenDynamic = 2; // 可見他人所有變更
adOpenStatic = 3; // 靜態快照,不可見他人變更
// LockType
adLockReadOnly = 1; // 唯讀
adLockPessimistic = 2; // 編輯時鎖定單筆
adLockOptimistic = 3; // 更新時鎖定單筆
adLockBatchOptimistic= 4; // 批次更新鎖定
procedure TForm1.Button1Click(Sender: TObject);
var
AConn, ARec: Variant;
I, Cnt: Integer;
S: String;
begin
Memo1.Clear;
// 1. 建立連線(使用無 DSN 連接字串,避免 DSN 被竄改)
AConn := CreateOleObject('ADODB.Connection');
AConn.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Inetpub\wwwroot\Test.mdb');
// 2. 建立 Recordset 並開啟資料表
ARec := CreateOleObject('ADODB.Recordset');
ARec.Open('wfjcommu', AConn, adOpenStatic, adLockOptimistic, adCmdTable);
// ---- 顯示原始資料 ----
Memo1.Lines.Add('******** 原始資料 ********');
S := '';
for I := 0 to ARec.Fields.Count - 1 do S := S + ARec.Fields[I].Name + #9;
Memo1.Lines.Add(S);
while not ARec.EOF do begin
S := '';
for I := 0 to ARec.Fields.Count - 1 do S := S + VarToStr(ARec.Fields[I].Value) + #9;
Memo1.Lines.Add(S);
ARec.MoveNext;
end;
// ---- 新增一筆 ----
ARec.AddNew;
ARec.Fields['AName'] := '1';
ARec.Fields['Portable'] := '2';
ARec.Fields[2].Value := '3'; // 索引存取
ARec.Fields[3].Value := '4';
ARec.Fields[4].Value := '5';
ARec.Update; // 必須呼叫 Update 寫入
ARec.MoveFirst;
Memo1.Lines.Add('******** 新增後 ********');
// ... 同樣顯示迴圈 ...
// ---- 修改最後一筆 ----
ARec.MoveLast;
ARec.Fields['AName'] := '11';
ARec.Fields['Portable'] := '22';
ARec.Fields[2].Value := '33';
ARec.Fields[3].Value := '44';
ARec.Fields[4].Value := '55';
ARec.Update;
ARec.MoveFirst;
Memo1.Lines.Add('******** 修改後 ********');
// ... 顯示 ...
// ---- 刪除最後一筆 ----
ARec.MoveLast;
ARec.Delete; // 標記刪除
ARec.Update; // 確認刪除(ADO 必須 Update)
ARec.MoveFirst;
Memo1.Lines.Add('******** 刪除後 ********');
// ... 顯示 ...
// ---- SQL 條件查詢 ----
ARec.Close;
ARec.Open('SELECT * FROM wfjcommu WHERE AName = ''張三''',
AConn, adOpenStatic, adLockOptimistic, adCmdText);
Memo1.Lines.Add('******** 查詢張三 ********');
Memo1.Lines.Add('筆數: ' + IntToStr(ARec.RecordCount));
while not ARec.EOF do begin
S := '';
for I := 0 to ARec.Fields.Count - 1 do S := S + VarToStr(ARec.Fields[I].Value) + #9;
Memo1.Lines.Add(S);
ARec.MoveNext;
end;
// 關閉釋放
ARec.Close;
AConn.Close;
end;
| 操作 | ADO | BDE (TTable/TQuery) |
|---|---|---|
| 新增 | AddNew → 設值 → Update | Append → 設值 → Post |
| 修改 | Edit/直接設值 → Update | Edit → 設值 → Post |
| 刪除 | Delete → Update | Delete(立即生效) |
| 欄位存取 | Fields['Name'] 或 Fields[Index] | FieldByName / Fields[Index] |
| 導航 | MoveFirst/Next/Last/Previous | First/Next/Last/Prior |
| 關閉 | Close | Close |
此範例展示 ADO 核心操作全貌,掌握後即可在 Delphi 建立輕量、無 BSE 相依的資料庫應用,特別適合 ISP/ASP 部署環境。