在三层结构中如何使用储存过程?(20分)

  • 主题发起人 主题发起人 wwshuo
  • 开始时间 开始时间
W

wwshuo

Unregistered / Unconfirmed
GUEST, unregistred user!
三层中使用储存过程来返回数据,我不知道怎么用,调用储存过程的代码写在那里都不知道。是不是一个storedproc要对应一个储存过程,大家快来拿分吧
 
储存过程来返回数据?
間接返回呀,數据敏感組件顯示表中的數据.儲存過程負責運算而已.
>>是不是一个storedproc要对应一个储存过程
你可以動態建立此控件,也可以動態改變儲存過程名稱
 
可以把存儲過程當SQL語句來執行
用CommandText
例如:with AdoQuery1do
begin
Close;
SQL.Clear;
SQL.Add('存儲過程名 '參數1'...'參數n');
Open;//有返回數據集
ExecSQL;//無返回數據集
end;
 
比如我把AdoQuery1的commandtxt设置好sql语句,但是我下一次要返回另一个数据集,那么客户端发个什么信号,让adoquery1.commandtxt改变呢?难道只能用接口函数,或者使用很多AdoQuery1,每个都把要用的sql语句写好?
 
AdoQuer1設置CommandText?
應該是ClientDataSet吧,不過不建議這麽做,SQ語句最好不要寫在客戶端
 
function THiteker.FGetFeePay
(
const psProcName : WideString;
//存储过程名称
psParam : OleVariant;
// 传入参数列表
out poParam : OleVariant // 传出参数列表
): OleVariant;
var
spExec : TStoredProc;
iLoop : Integer;
iParamCount1, iParamCount2 : Integer;
//传入参数个数,传出参数个数(不含po_iResult)
sErrMsg : String;
begin
Result := -1;
spExec := TStoredProc.Create(application);
Try
Try
iParamCount1 := VarArrayHighBound(psParam, 1);
With spExecdo
begin
Close;
DatabaseName := 'dbHiteker';
StoredProcName := UpperCase(psProcName);
Prepare;
iParamCount2 := ParamCount - iParamCount1 - 2;
poParam := VarArrayCreate([0, iParamCount2-1], VarOleStr);
for iLoop := 0 to iParamCount1do
begin
Params[iLoop].AsString := psParam[iLoop];
end;

//
ExecProc;
For iLoop := 0 To iParamCount2-1do
begin
poParam[iLoop] := Trim(Params[iParamCount1 + 1 + iLoop].AsString);
end;
sErrMsg := Params[iParamCount1 + iParamCount2].AsString;
//提示信息
Result := Params[iParamCount1 + iParamCount2 + 1].AsInteger;
//返回值
end;
Except
on E:Exceptiondo
begin
sErrMsg := '《' + psProcName + '》执行失败〖' + E.Message + '〗';
end;
end;
Finally
spExec.Free;
end;
end;
 
存储过程和中间层的做用是一样的,就是用来封装业务逻辑的,如果你写好的中间层组件,
可以尽量少用存储过程,这样数据库移植会很方便的,你也可以把存储过程理解成中间层,
虽然它不是实际意义上的多层;
 
我知道,但是公司要为了三层而三层。
 
with clientdatasetdo
begin
Close;
commandtext.Clear;
commandtext.Add('begin
存儲過程名 ('參數1'...'參數n');
end;
);
execute;
end;
 
http://bbs.zglong.com/
 
如果使用sql来执行储存过程,那么如何让clientdataset使用过程参数中的返回数据?
 
存储过程在和QUERY或是TABLE组件一样设置,但它有一个参数,你都设好以后在客户端的CLIENTDATASET有一个FETCHPARAMS的方法,这样参数就过来了,如果你要传进去,则先传再执行,如果要取出,则先执行再FETCHPARAM一次,再将参数取出来.这样就可以了.
 

我有在三层结构中使用储存过程的Demo,
谁要就邮我:Liuren_flf@163.com
 
多人接受答案了。
 
后退
顶部