关于ClientDataSet SQL动态参数的问题?


DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:='select age from table where name=:name';
DataModule1.ClientDataSet1.FieldByName('name').value:=stringtemp;
DataModule1.ClientDataSet1.open;
jmstring:=DataModule1.ClientDataSet1.commandtext;

上面的jmstring是一个函数,它返回一个字符串;
stringtemp是一个字串变量,是一个具体的名字;
编译无错,运行后说没有name字段,可是表中明明有呀?

21 个解决方案

#1


加一句试试看。
DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:='select age from table where name=:name';
DataModule1.ClientDataSet1.FetchParams;
DataModule1.ClientDataSet1.FieldByName('name').value:=stringtemp;
DataModule1.ClientDataSet1.open;

#2


DataModule1.ClientDataSet1.FetchParams;
DataModule1.ClientDataSet1.FieldByName('name').value:=stringtemp;
不是"FieldByName('name')"吧?

#3


DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:='select age, name from table where name=:name';  //如果没有name,那么返回的只有age字段。
DataModule1.ClientDataSet1.FetchParams;
DataModule1.ClientDataSet1.FieldByName('name').value:=stringtemp;
DataModule1.ClientDataSet1.open;

#4


field 'name' not found

还是不行呀,在线等待,分大大的有,有难度吧!

#5


刚才注意了一下Help,该说明如下:
If the SQL statement takes parameters, be sure that they are in the correct order, as the provider performs parameter binding on CommandText statements by index only.
这意味着服务器端的需要事先定义Parameter。这样,你的代码是不符合要求的。要么这样改吧:
DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:=format('select age from table where name="%s"', [stringtemp]);
DataModule1.ClientDataSet1.open;

#6


DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:=format('select age from table where name="%s"',[stringtemp]);
DataModule1.ClientDataSet1.open;
jmstring:=DataModule1.ClientDataSet1.commandtext;

刚才的问题没有了,可是现在它又提示“无效列名 曾一迅”

曾一迅就是stringtemp中的字串!这是什么原因呢?

#7


: chechy(我爱洁洁) 及众高人们,有人吗?帮我,help me!

我up

淹不到我的!

#8


我想我应该把问题再描述清楚一些:

1、服务程序中有ADOQuery1,DataSetProvider1,与SQLServer7建立了连接。
2、客户程序中的数据模块中有DCOMConnection1、ClientDataSet1,建立了连接。
3、一个主Form1,一个Form2,Form2是对一个表table进行查询,为了以后的各form中也可以进行参数不同的相同查询,所以在Form1中的单元里定义了一个函数Fonction jmstring(stringtemp:string):string;进行动态参数查询操作。
function jmstring(stringtemp:string):string;
begin
     DataModule1.ClientDataSet1.close;
     DataModule1.ClientDataSet1.commandtext:=format('select py from tabel while name="%s"',[stringtemp]);
     DataModule1.ClientDataSet1.open;
     jmstring:=DataModule1.ClientDataSet1.commandtext;
end;
4、在Form2中的单元里,对上面函数的stringtemp进行传值:byjmbmname.Text:=jmstring(onestring);

可是,总是不能从table里找出与name字段相对应的age字串呢?


提示为“无效列名  onestring"

#9


会不会是因为你的表名跟系统的关键字相同啊换个表名看看!

#10


这样试一试:
DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:=format('select age from table where name = ''%s''',[stringtemp]);
DataModule1.ClientDataSet1.open;

或者
DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:='select age from table where name=:name';
DataModule1.ClientDataSet1.Params.ParamByName('name').Value :=stringtemp;
DataModule1.ClientDataSet1.open;

#11


你的table表中有name这个字段吗?现试一试,
select age from table where name="AValue"
能否成功,如果成功,再查查其它问题。

#12



各位兄弟,我改用:
DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:='select py from table where name=:ss';
datamodule1.clientdataset1.Params.ParamByName('ss').Value:=stringtemp;
DataModule1.ClientDataSet1.open;
jmstring:=DataModule1.ClientDataSet1.Fields[1].asstring;
没有任何错了,当然在服务程序中的ADOQUery作了设置,但是却没有查出我要的py字段的对应字符。也就是没有在byjmbmname.Text:=jmstring里显示出来。我用SQLServer观察了一下,发现它的语句是这样的:
sp_executesql N'select*from 汉字简码表 where name=@P1', N'@P1 varchar(1)', ''

我要查的字串为“曾”,可是它却是:name=@P1,“@P1”是什么哟?这里有问题,表里面没有“@P1”,当然查不到,可是是什么原因呢?我对没字的截取用的是copy(onestring,1,2),没有什么错嘛!

#13


都还在吗?快帮我一下?

#14


兄弟帮个忙http://www.csdn.net/expert/topic/594/594397.xml?temp=.8597986

#15


兄弟们帮忙呀!不要在我的帖子里打广告呀!

#16


各位来看一下吧,我真的是不明白?

jmstring:=DataModule1.ClientDataSet1.Fields[0].asstring;

这样的话,函数中的返回值可以传给jmstring吗?

#17


怎么没有人回答了呀!
星期天就没有人了吗?

#18


up

#19


没有什么人能回答的吗? 我可以再加100分的嘛!再多要也可以,只要能成功的话!

#20


不好意思,我仔细看了一下 lyxinfo() 的回答,原来是''%s''这里有问题的原因!!

加分啦!!

同时也要多谢“我爱洁洁”

#21


shit you ,fuck you ,gan ni !!
rinimade
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告