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 个解决方案
加一句试试看。
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;
DataModule1.ClientDataSet1.FetchParams;
DataModule1.ClientDataSet1.FieldByName('name').value:=stringtemp;
不是"FieldByName('name')"吧?
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;
field 'name' not found
还是不行呀,在线等待,分大大的有,有难度吧!
刚才注意了一下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;
DataModule1.ClientDataSet1.close;
DataModule1.ClientDataSet1.commandtext:=format('select age from table where name="%s"',[stringtemp]);
DataModule1.ClientDataSet1.open;
jmstring:=DataModule1.ClientDataSet1.commandtext;
刚才的问题没有了,可是现在它又提示“无效列名 曾一迅”
曾一迅就是stringtemp中的字串!这是什么原因呢?
: chechy(我爱洁洁) 及众高人们,有人吗?帮我,help me!
我up
淹不到我的!
我想我应该把问题再描述清楚一些:
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"
会不会是因为你的表名跟系统的关键字相同啊换个表名看看!
这样试一试:
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;
你的table表中有name这个字段吗?现试一试,
select age from table where name="AValue"
能否成功,如果成功,再查查其它问题。
各位兄弟,我改用:
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),没有什么错嘛!
兄弟帮个忙http://www.csdn.net/expert/topic/594/594397.xml?temp=.8597986
各位来看一下吧,我真的是不明白?
jmstring:=DataModule1.ClientDataSet1.Fields[0].asstring;
这样的话,函数中的返回值可以传给jmstring吗?
没有什么人能回答的吗? 我可以再加100分的嘛!再多要也可以,只要能成功的话!
不好意思,我仔细看了一下 lyxinfo() 的回答,原来是''%s''这里有问题的原因!!
加分啦!!
同时也要多谢“我爱洁洁”
shit you ,fuck you ,gan ni !!
rinimade