W wwshuo Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-12 #1 三层中使用储存过程来返回数据,我不知道怎么用,调用储存过程的代码写在那里都不知道。是不是一个storedproc要对应一个储存过程,大家快来拿分吧
0 011101 Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-12 #2 储存过程来返回数据? 間接返回呀,數据敏感組件顯示表中的數据.儲存過程負責運算而已. >>是不是一个storedproc要对应一个储存过程 你可以動態建立此控件,也可以動態改變儲存過程名稱
X xiaolinj79 Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-12 #3 可以把存儲過程當SQL語句來執行 用CommandText 例如:with AdoQuery1do begin Close; SQL.Clear; SQL.Add('存儲過程名 '參數1'...'參數n'); Open;//有返回數據集 ExecSQL;//無返回數據集 end;
可以把存儲過程當SQL語句來執行 用CommandText 例如:with AdoQuery1do begin Close; SQL.Clear; SQL.Add('存儲過程名 '參數1'...'參數n'); Open;//有返回數據集 ExecSQL;//無返回數據集 end;
W wwshuo Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-12 #4 比如我把AdoQuery1的commandtxt设置好sql语句,但是我下一次要返回另一个数据集,那么客户端发个什么信号,让adoquery1.commandtxt改变呢?难道只能用接口函数,或者使用很多AdoQuery1,每个都把要用的sql语句写好?
比如我把AdoQuery1的commandtxt设置好sql语句,但是我下一次要返回另一个数据集,那么客户端发个什么信号,让adoquery1.commandtxt改变呢?难道只能用接口函数,或者使用很多AdoQuery1,每个都把要用的sql语句写好?
X xiaolinj79 Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-12 #5 AdoQuer1設置CommandText? 應該是ClientDataSet吧,不過不建議這麽做,SQ語句最好不要寫在客戶端
X xianguo Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-12 #7 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;
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;
L liwens Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-12 #8 存储过程和中间层的做用是一样的,就是用来封装业务逻辑的,如果你写好的中间层组件, 可以尽量少用存储过程,这样数据库移植会很方便的,你也可以把存储过程理解成中间层, 虽然它不是实际意义上的多层;
X xbeing Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-13 #10 with clientdatasetdo begin Close; commandtext.Clear; commandtext.Add('begin 存儲過程名 ('參數1'...'參數n'); end; ); execute; end;
with clientdatasetdo begin Close; commandtext.Clear; commandtext.Add('begin 存儲過程名 ('參數1'...'參數n'); end; ); execute; end;
W wwshuo Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-14 #12 如果使用sql来执行储存过程,那么如何让clientdataset使用过程参数中的返回数据?
野 野蛮人 Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-14 #13 存储过程在和QUERY或是TABLE组件一样设置,但它有一个参数,你都设好以后在客户端的CLIENTDATASET有一个FETCHPARAMS的方法,这样参数就过来了,如果你要传进去,则先传再执行,如果要取出,则先执行再FETCHPARAM一次,再将参数取出来.这样就可以了.
存储过程在和QUERY或是TABLE组件一样设置,但它有一个参数,你都设好以后在客户端的CLIENTDATASET有一个FETCHPARAMS的方法,这样参数就过来了,如果你要传进去,则先传再执行,如果要取出,则先执行再FETCHPARAM一次,再将参数取出来.这样就可以了.
L Liuren_flf Unregistered / Unconfirmed GUEST, unregistred user! 2003-11-15 #14 我有在三层结构中使用储存过程的Demo, 谁要就邮我:Liuren_flf@163.com