利用 VFP 的 SQL Pass-Through (SPT) 技術,配合 ODBC 連接 SQL Server,打造標準客戶端/伺服器 (C/S) 應用,兼具 VFP 開發速度與 SQL Server 安全性能。
SFXT。通信錄(姓名 CHR(8) PK, 生日 DATETIME, 電話 CHR(11), email CHR(30))。SP_SearchAll:SELECT * FROM 通信錄 ORDER BY 姓名SP_InsertData(@name, @birthday, @telephone, @email):INSERT INTO 通信錄 VALUES (@name, @birthday, @telephone, @email)* 按鈕「建立 ODBC 資料來源」 SQLSTRINGCONNECT() * 省略參數彈出對話框手動建立
* 方式一:使用現有 DSN
PUBLIC vODBC, vUSER, vPWD, vCONN
vODBC = 'sfxt'; vUSER = 'sa'; vPWD = '5213'
vCONN = SQLCONNECT(vODBC, vUSER, vPWD)
* 方式二:連線字串
vCONN = SQLSTRINGCONNECT('dsn=sfxt;uid=sa;pwd=5213')
IF vCONN > 0 MESSAGEBOX('連線成功') ELSE MESSAGEBOX('連線失敗') ENDIF
SQLSETPROP(vCONN, "Asynchronous", .F.) && 同步傳回 SQLSETPROP(vCONN, "ConnectTimeOut", 15) && 連線逾時秒數 SQLSETPROP(vCONN, "IdleTimeout", 0) && 閒置逾時 0=無限 SQLSETPROP(vCONN, "Transactions", 1) && 1=自動遠端交易
SQLEXEC(vCONN, "EXECUTE SP_SearchAll", "我的通信錄") BROWSE
SQLEXEC(vCONN, "SELECT * FROM 通信錄", "我的通信錄") BROWSE
LOCAL vNAME, vBDAY, vTEL, vEMAIL, vSQL
vNAME = '姓名' + SYS(3)
vBDAY = DTOC(DATE() - INT(RAND()*10000))
vTEL = SYS(3)
vEMAIL = SYS(3) + '@hotmail.com'
vSQL = "EXECUTE SP_InsertData '" + vNAME + "','" + vBDAY + "','" + vTEL + "','" + vEMAIL + "'"
IF SQLEXEC(vCONN, vSQL) > 0 MESSAGEBOX('新增成功') ELSE MESSAGEBOX('新增失敗') ENDIF
SQLEXEC(vCONN, "EXECUTE SP_SearchAll", "我的通信錄")
BROWSE
CURSORSETPROP('BatchUpdateCount', 100)
CURSORSETPROP('Buffering', 3) && 開放式列緩衝
CURSORSETPROP('FetchSize', -1) && 全部提取
CURSORSETPROP('KeyFieldList', '姓名') && 主鍵
CURSORSETPROP('SendUpdates', .T.)
CURSORSETPROP('Tables', '通信錄')
CURSORSETPROP('UpdateNameList', '姓名 通信錄.姓名, 生日 通信錄.生日, 電話 通信錄.電話, email 通信錄.email')
CURSORSETPROP('UpdatableFieldList', '姓名,生日,電話,email')
CURSORSETPROP('UpdateType', 1) && REPLACE 方式
CURSORSETPROP('WhereType', 3) && WHERE 含主鍵與異動欄位
BROWSE && 移動記錄指標自動送更新
SQLDISCONNECT(vCONN) THISFORM.RELEASE
完整示範 VFP SPT 技術實現查詢、新增、修改等核心功能,為 C/S 架構應用提供可複製的開發範本。