線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1793
推到 Plurk!
推到 Facebook!

一個3-tier Stored Procedure的問題 (現在人在大陸~很急拜託)

答題得分者是:t0922610976
mosiami
一般會員


發表:8
回覆:3
積分:2
註冊:2003-05-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-19 11:48:37 IP:218.16.xxx.xxx 未訂閱
之前程式使用client-server,現在因為有大陸廠的問題所以把程式修改成 3-tier的方式,使用socket connection方式連結,現在遇到一個問題, 我是用dbexpress連接資料庫,使用一個sqldataset把command type設成 stored procedure,那client端怎麼把stored procedure的名稱傳回給 ap server,讓ap server能夠去執行一個stored procedure呢? (包含參數) 很急~人在大陸,卡在這裡~拜託
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-21 09:10:25 IP:203.204.xxx.xxx 未訂閱
引言: 之前程式使用client-server,現在因為有大陸廠的問題所以把程式修改成 3-tier的方式,使用socket connection方式連結,現在遇到一個問題, 我是用dbexpress連接資料庫,使用一個sqldataset把command type設成 stored procedure,那client端怎麼把stored procedure的名稱傳回給 ap server,讓ap server能夠去執行一個stored procedure呢? (包含參數) 很急~人在大陸,卡在這裡~拜託
很久以前有用過不太記得了,可在ClientDataSet的CommandText裡下SQL,當SQL執行,再不然寫個Function傳到Server用Client/Server的方式執行。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-21 14:04:14 IP:210.241.xxx.xxx 未訂閱
1.在ap端Interface自己開方法,不過如果是COM 模式,千萬要記的寫 try .... setComplete; except setAbort; end; 2.利用DataRequest(Data: OleVariant): OleVariant 但要自己處理Olevariant 利如 在Client端 var vInput,vOutput:Olevariant; begin ... vInput := VarArrayOf(['storedProc名稱1','參數1','參數2']); vOutput := MyClientDataSet.DataRequest(vInput); .... end; 在Server端provider OnDataRequest事件 function TapModule.Provider1DataRequest(Sender: TObject; Input: OleVariant): OleVariant; var spName:string; begin spName := Input[0]; if spName = 'storedProc名稱1' then begin ..撰寫相關程式呼叫storedProc end; end; 唉~
------
唉~
mosiami
一般會員


發表:8
回覆:3
積分:2
註冊:2003-05-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-21 14:22:41 IP:218.16.xxx.xxx 未訂閱
我記得之前在寫C/S版的時候也是用類似SQL方式去執行STORED PROCEDURE的, 好像是放一個SQL元件,然後把COMMANDTEXT的地方放STORED PROCEDURE的名稱, 若有參數的話用:來接吧,誰可以幫我把他回憶起來呢,在AP SERVER那邊多一個 INTERFACE這邊我已經會做了,現在的問題應該是在AP SERVER這邊這麼去執行 STORED PROCEDURE的問題吧~拜託了
t0922610976
一般會員


發表:11
回覆:16
積分:15
註冊:2003-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-02 09:48:41 IP:61.16.xxx.xxx 未訂閱
不妨參考EEP的方式,將整個ApServer的Method(處理程序),統一成一種寫法,例如以下方式 procedure TsFBr_SEL.CustomerDataCallMethod(Params: Variant; out ReturnVal: Variant); 有Input及Output值 前端只要利用CallServerMethod這個方式傳入參數... 例如 Method練習2 [Server] procedure TsInv02010_SEL.GetProductCallMethod(Params: Variant; out ReturnVal: Variant); var prod_no:string; begin prod_no:=Params[0]; QrySelect.Close; QrySelect.Sql.Clear; QrySelect.Sql.Add('SELECT PROD_NAME,PRICE,QTY'); QrySelect.Sql.Add('FROM PRODUCT'); QrySelect.Sql.Add('WHERE PROD_NO=' QuotedStr(PROD_NO)); QrySelect.Open; ReturnVal:=VarArrayOf([not QrySelect.Eof, QrySelect.FieldByName('PROD_NAME').AsString, QrySelect.FieldByName('PRICE').AsInteger, QrySelect.FieldByName('Qty').AsInteger]); end; [Client] procedure TFmcInv02010.cdsDetailPROD_NOChange(Sender: TField); var vInput,vOutput:Variant; begin inherited; vInput:=VarArrayOf([Sender.AsString]); vOutput:=CallServerMethod('sInv02010','GetProduct',vInput); cdsDetail['price']:=vOutput[2]; end; procedure TFmcInv02010.cdsDetailPROD_NOValidate(Sender: TField); var vInput,vOutput:Variant; begin inherited; vInput:=VarArrayOf([Sender.AsString]); vOutput:=CallServerMethod('sInv02010','GetProduct',vInput); if not vOutput[0] then begin Raise Exception.Create('not found'); end; end;
系統時間:2024-05-01 20:08:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!