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

Delphi 透過 ADO 物件存取 ODBC 資料庫(下):完整 CRUD 實戰代碼

     編輯:Delphi

承接上篇 ADO 物件簡介,本文提供一個完整可執行的範例,示範如何在 Delphi 中透過 CreateOleObject 建立 ADODB.Connection 與 ADODB.Recordset,對 Access 資料庫執行查詢、新增、修改、刪除與條件查詢等完整 CRUD 操作。代碼中詳細註解每一步對應的 Delphi 對應操作,適合有 BDE 經驗的開發者快速遷移至 ADO。

範例環境

  • 資料庫:Test.mdb(Access 97/2000)
  • 資料表:wfjcommu(欄位:AName、Portable、Tel、BP、PostAddress)
  • Delphi 3 + PWS 4.0 / Win98 驗證
  • 需在 Uses 加入 ComObj

核心常數定義(對應 ADO Enums)

const
  // 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; // 批次更新鎖定

完整 CRUD 實作代碼

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;

關鍵差異提醒(對照 Delphi BDE)

操作ADOBDE (TTable/TQuery)
新增AddNew → 設值 → UpdateAppend → 設值 → Post
修改Edit/直接設值 → UpdateEdit → 設值 → Post
刪除Delete → UpdateDelete(立即生效)
欄位存取Fields['Name'] 或 Fields[Index]FieldByName / Fields[Index]
導航MoveFirst/Next/Last/PreviousFirst/Next/Last/Prior
關閉CloseClose

優缺點總結

  • 優點:無需部署龐大 BDE、支援離線 Recordset、XML 持久化、與 ASP/IIS 完美整合、輕量級適合 Web 應用。
  • 缺點:早期版本效能略遜 BDE、錯誤處理需捕捉 COM Exception、參數化查詢需用 Command 物件。

此範例展示 ADO 核心操作全貌,掌握後即可在 Delphi 建立輕量、無 BSE 相依的資料庫應用,特別適合 ISP/ASP 部署環境。

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