EndScan
*** 要得到SQL SERVER上某個表的結構,有兩種辦法,一是運行SQL SERVER自帶的系統存儲過程。一是運行一個Select命令。
比如要從SQL SERVER得到EMP表的結構
lnReturn=SQLEXEC(連接句柄,"Select Top 0 * From Emp","TmpEmp")
返回的結果都是臨時表,是只讀的,要想變成可讀寫的,需要做點小變化:
Select 0
Use DBF("TmpEmp") Again Alias Emp
Use In TmpEmp
現在得到的EMP臨時表就是可讀寫的了。
*注 "Select Top 0 From Emp" 命令在VFP里是錯誤命令,但SQL SERVER里可以執(zhí)行.
SPT和使用視圖相比,優(yōu)點是每一步你都清楚自己在做什么,知道為什么命令會出錯。缺點是你需要多寫命令,多了解SQL SERVER的語法。
***************
談談VFP和SQL SERVER搭配做C/S系統 (五) --從VFP控制SQL SERVER事務處理和加鎖
**建立與SQL SERVER的連接
lnHandle=SQLConnect("ODBC數據源","用戶名","密碼")
If lnHandle>0
&& 設置成手工事務處理模式,由代碼來控制
= SQLSETPROP(lnSQL_Hand, ’Transactions’, 2)
**下面的命令從EMPPAY里選取記錄,并給該表加上獨占鎖(TABLELOCKX),一直到該事務結束(HOLDLOCK)
ln1=SQLEXEC(lnHandle, "Select * FROM EmppayWITH (TABLOCKX, HOLDLOCK)","Emppay")
**執(zhí)行其它命令,比如更新數據
ln2=SQLEXEC(lnHandle,"Update PayTotal Set ......")
...
...
**如果所有命令都正確執(zhí)行了,則
=SQLCOMMIT(lnHandle)
***如果要放棄整個事務處理,用
=SQLROLLBACK(lnHandle)
***關閉連接,事務自動結束,鎖也解開
=SQLDISCONNECT(lnHandle)
Else
****連接失敗
EndIf
*** SQLSETPROP()函數
這個VFP函數是用來設置當前連接的屬性的。 比如上邊的手工事務處理。
還有一個比較常用的屬性是DISPLOGIN,該屬性控制是否顯示SQL SERVER的登錄表單
第3個參數: 1 - 顯示登錄表單,如果登錄信息(用戶名,密碼)不完全2 - 總顯示登錄表單3 - 不顯示登錄表單
例如:
=SQLSETPROP(lnHandle, "DISPLOGIN",1)
當使用SPT技術時,為節(jié)約連接數減少負擔,需要經常連接和斷開SQL SERVER,有時候你并不希望每次連接都讓用戶登錄,當用戶首次登錄后,可以把名字和密碼存起來,以后的連接可以自動登錄了。
***************
談談VFP和SQL SERVER搭配做C/S系統 (六) -- SQL SERVER的索引
作為VFP程序員,我們深知索引對表的重要性,好的索引可以大大縮短程序讀取數據的時間。
索引對于SQL SERVER數據表來說,同樣是很重要的。你可以做個簡單的測試。
1. 索引測試
從SQL SERVER程序組里或者ENTERPRISE MANAGER的TOOLS菜單上打開QUERY ANALYZER工具.
連接到你的SERVER后, 選擇QUERY菜單上的CURRENT CONNECTION OPTIONS(當前連接選項).
*** 要得到SQL SERVER上某個表的結構,有兩種辦法,一是運行SQL SERVER自帶的系統存儲過程。一是運行一個Select命令。
比如要從SQL SERVER得到EMP表的結構
lnReturn=SQLEXEC(連接句柄,"Select Top 0 * From Emp","TmpEmp")
返回的結果都是臨時表,是只讀的,要想變成可讀寫的,需要做點小變化:
Select 0
Use DBF("TmpEmp") Again Alias Emp
Use In TmpEmp
現在得到的EMP臨時表就是可讀寫的了。
*注 "Select Top 0 From Emp" 命令在VFP里是錯誤命令,但SQL SERVER里可以執(zhí)行.
SPT和使用視圖相比,優(yōu)點是每一步你都清楚自己在做什么,知道為什么命令會出錯。缺點是你需要多寫命令,多了解SQL SERVER的語法。
***************
談談VFP和SQL SERVER搭配做C/S系統 (五) --從VFP控制SQL SERVER事務處理和加鎖
**建立與SQL SERVER的連接
lnHandle=SQLConnect("ODBC數據源","用戶名","密碼")
If lnHandle>0
&& 設置成手工事務處理模式,由代碼來控制
= SQLSETPROP(lnSQL_Hand, ’Transactions’, 2)
**下面的命令從EMPPAY里選取記錄,并給該表加上獨占鎖(TABLELOCKX),一直到該事務結束(HOLDLOCK)
ln1=SQLEXEC(lnHandle, "Select * FROM EmppayWITH (TABLOCKX, HOLDLOCK)","Emppay")
**執(zhí)行其它命令,比如更新數據
ln2=SQLEXEC(lnHandle,"Update PayTotal Set ......")
...
...
**如果所有命令都正確執(zhí)行了,則
=SQLCOMMIT(lnHandle)
***如果要放棄整個事務處理,用
=SQLROLLBACK(lnHandle)
***關閉連接,事務自動結束,鎖也解開
=SQLDISCONNECT(lnHandle)
Else
****連接失敗
EndIf
*** SQLSETPROP()函數
這個VFP函數是用來設置當前連接的屬性的。 比如上邊的手工事務處理。
還有一個比較常用的屬性是DISPLOGIN,該屬性控制是否顯示SQL SERVER的登錄表單
第3個參數: 1 - 顯示登錄表單,如果登錄信息(用戶名,密碼)不完全2 - 總顯示登錄表單3 - 不顯示登錄表單
例如:
=SQLSETPROP(lnHandle, "DISPLOGIN",1)
當使用SPT技術時,為節(jié)約連接數減少負擔,需要經常連接和斷開SQL SERVER,有時候你并不希望每次連接都讓用戶登錄,當用戶首次登錄后,可以把名字和密碼存起來,以后的連接可以自動登錄了。
***************
談談VFP和SQL SERVER搭配做C/S系統 (六) -- SQL SERVER的索引
作為VFP程序員,我們深知索引對表的重要性,好的索引可以大大縮短程序讀取數據的時間。
索引對于SQL SERVER數據表來說,同樣是很重要的。你可以做個簡單的測試。
1. 索引測試
從SQL SERVER程序組里或者ENTERPRISE MANAGER的TOOLS菜單上打開QUERY ANALYZER工具.
連接到你的SERVER后, 選擇QUERY菜單上的CURRENT CONNECTION OPTIONS(當前連接選項).

