spt的全稱為sql pass through,它是和遠(yuǎn)程視圖構(gòu)成了vfp處理遠(yuǎn)程數(shù)據(jù)的利器。和遠(yuǎn)程視圖比較,它的主要好處在于靈活,可以直接連接遠(yuǎn)程數(shù)據(jù)庫,并在服務(wù)器上執(zhí)行代碼代碼, 當(dāng)然它也可以和遠(yuǎn)程視圖一樣,通過一個光標(biāo)cursor來更新遠(yuǎn)程數(shù)據(jù),缺點主要是非圖形化,代碼量大。實際上遠(yuǎn)程視圖是SPT的一個子集。
步驟:
1、建立連接,或者連接句柄
如連接服務(wù)器為aa,用戶名為bb,密碼為cc,數(shù)據(jù)庫為dd
nhandle=sqlstringconnect("driver=sql server;server=aa;uid=bb;pwd=cc;database=dd")
if nhandle>0
messagebox("數(shù)據(jù)庫連接成功!",0,"提示")
else
messagebox("數(shù)據(jù)庫連接成功!",0,"提示")
endif
2、如何向服務(wù)器取數(shù)據(jù)
如向服務(wù)器表employees查詢性別為男的人員
在第一步建立和服務(wù)器數(shù)據(jù)庫的連接,并取得連接句柄nhandle后
sqlexec(nhandle,"select * from employees where sex='男'","employees")
select employees
brow
也可以調(diào)用系統(tǒng)上的存儲過程來取得數(shù)據(jù).
如在服務(wù)器建立存儲過程
create proc getmanofworkes
as
select * from employees where sex='男'
go
然后在vfp里調(diào)用
sqlexec(nhandle,"exec getmanofworkes",employees)
select employees
brow
當(dāng)然也可以想存儲過程傳遞參數(shù)查詢
仍然以剛才的例子,查詢不同性別的員工
在服務(wù)器上建立create proc getemployees
@sex char(2)='男'
as
select * from employees where sex=@sex
go
vfp里調(diào)用
查詢男員工
csex='男'
sqlexec(nhandle,"exec getemployees ?sex",'employees')
select employees
brow
查詢女員工
csex='女'
sqlexec(nhandle,"exec getemployees ?sex",'employees')
select employees
brow
設(shè)置本地表可更新服務(wù)器表
sqlexec(jb,"select id,bh,hyzhm,fzdw,rghsj,ghzrsj,xm,xb,gs_bm from rsda where lcbj=0 order by gbbh","gh")
***設(shè)置gh可更新rsda表
sele gh
cursorsetprop("tables","rsda","gh") &&設(shè)置臨時表的更新目標(biāo)表
cursorsetprop("keyfieldlist",'id',"gh") &&設(shè)置臨時表的關(guān)鍵字
cursorsetprop("updatablefieldlist","id,fzdw,rghsj,ghzrsj,hyzhm","gh")&&設(shè)置臨時表的更新字段
cursorsetprop("updatenamelist","id rsda.id,hyzhm rsda.hyzhm,rghsj rsda.rghsj,ghzrsj rsda.ghzrsj,fzdw rsda.fzdw","gh") &&&用gh中的相應(yīng)字段更新rsda表
cursorsetprop("sendupdates",.t.,"gh")&&設(shè)置為可更新
cursorsetprop("wheretype",2)
cursorsetprop("buffering",5)&&設(shè)置表緩沖
步驟:
1、建立連接,或者連接句柄
如連接服務(wù)器為aa,用戶名為bb,密碼為cc,數(shù)據(jù)庫為dd
nhandle=sqlstringconnect("driver=sql server;server=aa;uid=bb;pwd=cc;database=dd")
if nhandle>0
messagebox("數(shù)據(jù)庫連接成功!",0,"提示")
else
messagebox("數(shù)據(jù)庫連接成功!",0,"提示")
endif
2、如何向服務(wù)器取數(shù)據(jù)
如向服務(wù)器表employees查詢性別為男的人員
在第一步建立和服務(wù)器數(shù)據(jù)庫的連接,并取得連接句柄nhandle后
sqlexec(nhandle,"select * from employees where sex='男'","employees")
select employees
brow
也可以調(diào)用系統(tǒng)上的存儲過程來取得數(shù)據(jù).
如在服務(wù)器建立存儲過程
create proc getmanofworkes
as
select * from employees where sex='男'
go
然后在vfp里調(diào)用
sqlexec(nhandle,"exec getmanofworkes",employees)
select employees
brow
當(dāng)然也可以想存儲過程傳遞參數(shù)查詢
仍然以剛才的例子,查詢不同性別的員工
在服務(wù)器上建立create proc getemployees
@sex char(2)='男'
as
select * from employees where sex=@sex
go
vfp里調(diào)用
查詢男員工
csex='男'
sqlexec(nhandle,"exec getemployees ?sex",'employees')
select employees
brow
查詢女員工
csex='女'
sqlexec(nhandle,"exec getemployees ?sex",'employees')
select employees
brow
設(shè)置本地表可更新服務(wù)器表
sqlexec(jb,"select id,bh,hyzhm,fzdw,rghsj,ghzrsj,xm,xb,gs_bm from rsda where lcbj=0 order by gbbh","gh")
***設(shè)置gh可更新rsda表
sele gh
cursorsetprop("tables","rsda","gh") &&設(shè)置臨時表的更新目標(biāo)表
cursorsetprop("keyfieldlist",'id',"gh") &&設(shè)置臨時表的關(guān)鍵字
cursorsetprop("updatablefieldlist","id,fzdw,rghsj,ghzrsj,hyzhm","gh")&&設(shè)置臨時表的更新字段
cursorsetprop("updatenamelist","id rsda.id,hyzhm rsda.hyzhm,rghsj rsda.rghsj,ghzrsj rsda.ghzrsj,fzdw rsda.fzdw","gh") &&&用gh中的相應(yīng)字段更新rsda表
cursorsetprop("sendupdates",.t.,"gh")&&設(shè)置為可更新
cursorsetprop("wheretype",2)
cursorsetprop("buffering",5)&&設(shè)置表緩沖