VFP 前端開發效率高,Oracle 後端安全穩定,兩者結合構建高效 C/S 系統。VFP 透過 SQLCONNECT/SQLEXEC 呼叫 Oracle 預存程序。
-- 測試表
CREATE TABLE gzb (id NUMBER PRIMARY KEY, gz NUMBER);
INSERT INTO gzb VALUES (1, 3050);
INSERT INTO gzb VALUES (2, 4000.8);
INSERT INTO gzb VALUES (3, 2500);
-- 存儲過程:更新薪資
CREATE OR REPLACE PROCEDURE p_update_gzb (
p_id IN NUMBER,
p_gz IN NUMBER
) AS
BEGIN
UPDATE gzb SET gz = p_gz WHERE id = p_id;
COMMIT;
END;
* 1. 建立連線 (假設 ODBC DSN 名為 'vfplink')
nHandle = SQLCONNECT("vfplink")
IF nHandle < 0
MESSAGEBOX("連線失敗")
RETURN
ENDIF
* 2. 呼叫存儲過程:將 ID=2 的薪資改為 5000
* 語法:{call 程序名(參數1, 參數2...)}
nResult = SQLEXEC(nHandle, "{call p_update_gzb(2, 5000)}")
IF nResult < 0
MESSAGEBOX("存儲過程執行失敗")
ELSE
MESSAGEBOX("執行成功")
ENDIF
* 3. 驗證結果
SQLEXEC(nHandle, "SELECT * FROM gzb", "curResult")
BROWSE NORMAL TITLE "更新後資料" && 顯示 ID=2 已變 5000
* 4. 斷開連線
SQLDISCONNECT(nHandle)
| 函數 | 用途 | 回傳值 |
|---|---|---|
| SQLCONNECT | 建立 ODBC 連線 | 連線控制代碼 (>0 成功) |
| SQLEXEC | 執行 SQL / 呼叫預存程序 | 1 成功, -1 失敗 |
| SQLDISCONNECT | 釋放連線 | 1 成功 |
AERROR() 可捕捉 SQLEXEC 失敗的詳細錯誤碼與訊息。Oracle 端定義 TYPE T_CURSOR IS REF CURSOR; PROCEDURE p_query(..., p_rc OUT T_CURSOR),VFP 端 SQLEXEC(nHandle, "{call p_query(?, ?)}", "vfp_cursor") 直接將結果集映射為 VFP 游標,可直接 BROWSE 或報表使用。
VFP + Oracle 存儲過程 = 業務邏輯下沉資料庫層,前端僅負責呈現,安全性與效能雙贏。