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

Delphi 開發網路資料庫應用:SQL 直寫與預存程序實戰模式

     編輯:Delphi

傳統 Delphi 資料庫開發仰賴 TTable、DBEdit 等視覺元件綁定欄位,雖然快速但一旦資料表結構變更,所有關聯元件屬性皆需手工修改,維護負擔極重。改用 動態 SQL (TQuery) 或預存程序 (TStoredProc),將資料操作邏輯集中在代碼層,不僅支援 SQL Server、Oracle 等異構後端,更能靈活應對結構變更、實現事務控制與效能優化。

一、動態 SQL 資料新增模組

通用新增程序,支援字串/非字串欄位自動加引號,參數化設計可復用於任何資料表。

procedure DataInsert(const Q: TQuery; const TableName: String;
  FieldCount: Integer; const IsString: array of Integer;
  const Edits: array of TEdit);
var
  I: Integer;
  SQL: String;
begin
  // 事務控制
  if DataModule1.Database1.InTransaction then
    DataModule1.Database1.Rollback;
  DataModule1.Database1.StartTransaction;

  // 組裝 INSERT 陳述式
  SQL := 'INSERT INTO ' + TableName + ' VALUES(';
  for I := 0 to FieldCount - 1 do begin
    if IsString[I] = 0 then
      SQL := SQL + Edits[I].Text
    else
      SQL := SQL + '''' + Edits[I].Text + ''''; // 字串加單引號
    if I = FieldCount - 1 then
      SQL := SQL + ')'
    else
      SQL := SQL + ',';
  end;

  // 執行並回傳結果集
  Q.Close;
  Q.SQL.Clear;
  Q.SQL.Add(SQL);
  Q.SQL.Add('SELECT * FROM ' + TableName); // 可選:回傳最新資料
  Q.Open;

  DataModule1.Database1.Commit;
end;

呼叫範例


DataModule1.Database1.Connected := True;
try
  DataInsert(Query1, 'Employees', 5,
    [1, 0, 1, 1, 0],           // 欄位型別:1=字串, 0=數值/日期
    [EditName, EditAge, EditDept, EditTitle, EditSalary]);
finally
  DataModule1.Database1.Connected := False;
end;

二、預存程序資料新增模組

將 SQL 預編譯存放於伺服器,減少網路傳輸、提升執行速度、集中維護邏輯。

SQL Server 預存程序範例


CREATE PROC Proc_InsertEmployee
  @EmpID   SMALLINT,
  @EmpName CHAR(4) OUTPUT
AS
  INSERT INTO TEST_User.TRANS_TEST VALUES (@EmpID, @EmpName);
  SELECT @EmpName, * FROM TEST_User.TRANS_TEST;

Delphi 呼叫代碼


StoredProc1.Close;
StoredProc1.Params[0].ParamType := ptInput;   // @EmpID
StoredProc1.Params[0].AsInteger := 1;
StoredProc1.Params[1].ParamType := ptOutput;  // @EmpName
StoredProc1.Params[1].AsString  := 'ABCD';
StoredProc1.ExecProc;  // 或 Open 視是否回傳結果集
// 取得 OUTPUT 參數
ShowMessage('回傳名稱: ' + StoredProc1.Params[1].AsString);

三、修改、刪除、查詢同理

  • 修改:UPDATE Table SET Col=Val WHERE Key=... 或預存程序 UPDATE ...
  • 刪除:DELETE FROM Table WHERE Key=...
  • 查詢:SELECT ... WHERE ... 綁定 TQuery,配合 Params 參數化防注入。

四、核心優勢總結

維度視覺綁定動態 SQL / SP
結構變更影響全域元件屬性需改僅修改 SQL/SP 代碼
異資料庫移植困難標準 SQL 極易移植
事務控制分散在各事件集中在邏輯層
效能調優受限可調索引、執行計畫、SP 預編譯
安全性易暴露結構SP 封裝邏輯、參數化防注入

採用 SQL 直寫或預存程序架構,是 Delphi 從「快速原型」邁向「企業級可維護系統」的關鍵一步。

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