动态参数的问题(50分)

  • 主题发起人 主题发起人 maoke
  • 开始时间 开始时间
M

maoke

Unregistered / Unconfirmed
GUEST, unregistred user!
在中间层的ADOQUERY的SQL属性中如何定义,才可以在客户端传入我要查询的具体的数据表
的名称,注意不是数据的范围。

例:
select * from table where m1 >= :param
现在我需要的是,想在客户端改变table。
 
远程方法
procedure query(tablename:widestring);
var
command:widestring;
begin
command:="select * from "+tablename;
adoquery.sql.clear;
adoquery.sql.text:=command;
adoquery.open;
end;
 
sorry ,我需要象以下这样 :
clientdataset.close;
clientdataset.params.parambyname('param').asinteger := strtoint(Edtparam.text);
clientdataset.open;
另外你的远程方法是什么概念,客户端还是中间层编写。
 
你想实现的方案,我暂时没有实现
不过,你可以这样实现:
clientdataset.close;
clientdatasetcommandtext :='select * from '+strtoint(Edtparam.text)+''''+查询参数 +'''';
clientdataset.open;
这样做,比用参数灵活.
或者
在中间层写远程方法,在客户端调用,
在下载数据之前先设定要查询的表
远程方法1:settablename(tablename:widestring);
begin
command:='';
adoquery1.close;
adoquery1.sql.clear;
command:='select * from '+tablename;//command:私有变量
end;
客户端查询时设置查询参数,然后调用
远程方法2:settquery(query1,query2,...:widestring);
begin
adoquery1.close;
command:=comand+''''+query1+''''+...;
adoqury1.open;
end;
之后客户端clientdataset1.close;clientdataset.open//客户端重新取得数据
当要改变查询的表时,只需再调用远程方法1,重新设置表名.
远程方法:在多层数据库中,客户端要调用中间层tlb文件中定义的函数/过程,客户端通过
这些方法向中间层传送处理的数据包.



 
后退
顶部