在服务器端做了个通用查询函数,可每次返回的信息却不是我传入的sql语句的结果,高手帮忙!! ( 积分: 50 )

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

winmyway

Unregistered / Unconfirmed
GUEST, unregistred user!
在服务器端我写了个函数,功能是客户端传来sql语句将查询结果返回到客户端,程序如下:
procedure TCWYS.Sub_select(Sqlstr: OleVariant);
begin
adoquery.Close;
adoquery.SQL.Clear;
adoquery.SQL.Add(sqlstr);
adoquery.Open ;
end;
这个adoquery通过DataSetProvider与客户端ClientDataSet相连,客户端需要动态查询时可传sqlstr参数给该函数,从而得到需要的数据集。但现在出现一个很怪的问题,比如:
测试1、运行程序
第一次,我传sqlstr为'select 编号 from table1'客户端得到该数据集,正常;
第二次,我传sqlstr为'select 姓名 from table2',
客户端提示:cds_general:fields '编号' not found。退出程序。
测试2、运行程序
第一次,我传sqlstr为'select 姓名 from table2'客户端得到该数据集,正常;
第二次,我传sqlstr为'select 编号 from table1',
客户端提示:cds_general:fields '姓名'not found。退出程序。
也就是说cds_general 每次打开的还是第一次传给的sqlstr,请问各位,这是为什么?小女子真百思不得其解。
 
在服务器端我写了个函数,功能是客户端传来sql语句将查询结果返回到客户端,程序如下:
procedure TCWYS.Sub_select(Sqlstr: OleVariant);
begin
adoquery.Close;
adoquery.SQL.Clear;
adoquery.SQL.Add(sqlstr);
adoquery.Open ;
end;
这个adoquery通过DataSetProvider与客户端ClientDataSet相连,客户端需要动态查询时可传sqlstr参数给该函数,从而得到需要的数据集。但现在出现一个很怪的问题,比如:
测试1、运行程序
第一次,我传sqlstr为'select 编号 from table1'客户端得到该数据集,正常;
第二次,我传sqlstr为'select 姓名 from table2',
客户端提示:cds_general:fields '编号' not found。退出程序。
测试2、运行程序
第一次,我传sqlstr为'select 姓名 from table2'客户端得到该数据集,正常;
第二次,我传sqlstr为'select 编号 from table1',
客户端提示:cds_general:fields '姓名'not found。退出程序。
也就是说cds_general 每次打开的还是第一次传给的sqlstr,请问各位,这是为什么?小女子真百思不得其解。
 
  应该先把SocketConnection和ClientDataSet的连接关闭,然后用SQLSTR.CLEAR清除SQLSTR语句,再写新的SQLSTR语句,然后再激活ClientDataSet.active:=true,你试试
 
是啊,我关了,程序如下:
if cds_general.active=true then cds_general.active := false;
cds_general.close;
frmmain.SocketConnection.AppServer.sub_select(s_str);
cds_general.active := true;

:( 可是还不行,一运行到 最后一句就提示错误了.
 
[:)][:D][8D][:(][:(!][^][?]
 
各位啊,帮忙啊! 我不想用那种通过command通过参数传递的方式 实现查询.有没有好的方法呢?
 
cds_general.Close;
 
再次求救!!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部