一個3-tier Stored Procedure的問題 (現在人在大陸~很急拜託) |
答題得分者是:t0922610976
|
mosiami
一般會員 ![]() ![]() 發表:8 回覆:3 積分:2 註冊:2003-05-01 發送簡訊給我 |
之前程式使用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 發送簡訊給我 |
引言: 之前程式使用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/ |
||
speedup
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
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 發送簡訊給我 |
|||
t0922610976
一般會員 ![]() ![]() 發表:11 回覆:16 積分:15 註冊:2003-09-02 發送簡訊給我 |
不妨參考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;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |