用什么代替存储过程组件,请帮个忙吧。很急.......(100分)

  • 主题发起人 主题发起人 liuyang
  • 开始时间 开始时间
L

liuyang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在三层结构里(B/S)为了做一张统计报表,用了存储过程组件。把符合特定时间内的
(输入参数是两个,起始日期,和终止日期)的记录统计出来,在把n个统计结果放到特定
的一张表中,在用QReport组件显示出来。可怎么都不行。
老提示“在试图初始化BDE引擎时发生了一个错误$2501”不知道是怎么回事?
听说用query也可以调用存储过程。(那在三层里是不是可以用clientdataset?)
不知道怎么写?有人用过吗?或是我前面的做法有什么问题?
注:后台数据库是informix
 
在中间层的Query的SQL语句中写:Exec [storedPrc],如果有参数,就在后面跟参数。
ClientDataSet=>DataSetProvider->Query就可以了。
 
可以看看ADO系列组件
 
to tyzhang.
不用先声名输入参数吗?
我有两个输入参数date1,date2
请帮我看看怎么写呢?
“ClientDataSet=>DataSetProvider->Query就可以了。”是什么意思呢?
谢谢
 
比如,你的SQL语句为
exec Storedprc1 2
则在ClientDataSet中可以写
ClientDataSet.Close;
ClientDataSet.CommandText:='exec StoredPrc1 2';
如果存储过程不返回结果集,则用
ClientDataSet.Execute
否则用 ClientDataSet.Open
 
如果你对SQL比较熟练的话,用TQuery控件来调用存储过程实际上就是跟一般的sql语句差不多。
只要明白TQuery接受的是sql语句的字符串,可以已不变应万变。
 
用TQuery组件就可以了
Query1.sql.add('exec storeprc parm1,parm2....')
 
几乎什么数据集组件都可以调用存储过程。
tdataset可以,它的子类如tquery也可以。
语句就如以上几位说的,
exec storedporcname parm1,parm2

但是这种方法好象不被提倡,最好用远程调用
存储过程。
比如在中间件上建一个方法调用。
 
to 慕容乾坤:
比如在中间件上建一个方法调用。?
可以具体的举个例子吗?谢谢
 
在中间层建立方法
function Tcount.hehe(count: Integer): Integer;
begin
ADOStoredProc1.Parameters.ParamByName('@a').value:=count;//@a是输入参数
//count是中间层定义的变量
ADOStoredProc1.ExecProc;
result:=ADOStoredProc1.Parameters.ParamByName('@retval').value;
//@retval是输出参数

然后就可以在客户端调用了
a:=strtoint(trim(edit1.text));//输入参数
c:=DataModule1.DCOMConnection1.AppServer.hehe(a);//得到返回参数


明白了吗?其实这也是别人写的程序,让我拿来现买现卖。 ^_^
 
谢谢各位,尤其是慕容乾坤。
你的方法我也是听别人说的。谢谢你提供的。
我是这样用的,也实现了。
dm1.q2.commandtext:='execute procedure jcj_tj1('+''''+date1+''''+','+''''+date2+''''+')';
date1和date2是参数。
 
后退
顶部