procedure TFrmTriggerDemo
begin
DmEmployee
DmEmployee
end;
procedure TDmEmployee
begin
{ 一個雇員的薪水變化將觸發薪水調整歷史記錄的變化
因此
with SalaryHistoryTable do if Active then Refresh;
end;
存儲過程也是SQL服務器上的一段程序
對於數據庫表中大量記錄的統計和函數計算
Delphi中有兩個部件能操作遠程數據庫服務器上的存儲過程
CSDEMO中演示用TQuery調用存儲過程的窗體是TFrmQueryProc
TFrmQueryProc中有兩個TDBGrid 部件
PROCEDURE Get_Emp_Proj
BEGIN
FOR SELECT proj_id
FROM employee_project
WHERE emp_no = :emp_no
INTO :proj_id
DO
SUSPEND;
END
EMP_NO INPUT SMALLINT
PROJ_ID OUTPUT CHAR(
該過程帶兩個參數
EMP_NO是輸入參數
PROJ_ID是輸出參數
相應地
表
━━━━━━━━━━━━━━━━━━━━━━━━━━
屬 性 屬 性 值
──────────────────────────
DatabaseName EmployeeDemoDB
Params EMP_No(輸入參數
SQL Select * from
Get_Emp_Proj(
━━━━━━━━━━━━━━━━━━━━━━━━━━
TQuery部件是在SQL語句中直接調用存儲過程
下面是客戶端的程序
procedure TFrmQueryProc
begin
DmEmployee
EmployeeSource
with EmployeeProjectsQuery do if not Active then Prepare;
end;
用Prepare顯式地准備SQL語句
procedure TFrmQueryProc
begin
EmployeeProjectsQuery
DmEmployee
EmployeeProjectsQuery
WriteMsg(
end;
該事件處理過程與EmployeeSource的OnDataChange屬性相聯
TStoredProc Delphi 專門用來使用服務器存儲過程的部件
在程序運行中
PROCEDURE SHIP_ORDER
DECLARE VARIABLE ord_stat CHAR(
DECLARE VARIABLE hold_stat CHAR(
DECLARE VARIABLE cust_no INTEGER;
DECLARE VARIABLE any_po CHAR(
BEGIN
SELECT s
FROM sales s
WHERE po_number = :po_num
AND s
INTO :ord_stat
IF (ord_stat =
BEGIN
EXCEPTION order_already_shipped;
SUSPEND;
END
ELSE IF (hold_stat =
BEGIN
EXCEPTION customer_on_hold;
SUSPEND;
END
FOR SELECT po_number
FROM sales
WHERE cust_no = :cust_no
AND order_status =
AND paid =
AND ship_date <
INTO :any_po
DO
BEGIN
EXCEPTION customer_check;
UPDATE customer
SET on_hold =
WHERE cust_no = :cust_no;
SUSPEND;
END
UPDATE sales
SET order_status =
WHERE po_number = :po_num;
SUSPEND;
END
Parameters:
PO_NUM INPUT CHAR(
該過程只帶有一個輸入參數
在客戶端使用該過程的TStoreProc部件是ShipOrderProc
表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
屬性名 屬 性 值
────────────────────────────
DatabaseName EmployeeDemoDB
ParamBindMode pbByName
Params PO_NUM(輸入參數
StoredProcName SHIP_ORDER
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25127.html