ADOQuery的大问题!(100分)

  • 主题发起人 主题发起人 pcw
  • 开始时间 开始时间
P

pcw

Unregistered / Unconfirmed
GUEST, unregistred user!
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.sql.Add('select * from lsjfb ');
adoquery1.sql.Add('where lsjfb.ls1=:c2');
adoquery1.Parameters[1].value:=edit1.text;
adoquery1.Open;
运行出现'list index out of bounds(1)'错误.如果把其中2行:
adoquery1.sql.Add('where lsjfb.ls1=:c2');
adoquery1.Parameters[1].value:=edit1.text;
改为:
adoquery1.sql.Add('where lsjfb.ls0=:c2');
adoquery1.Parameters[0].value:=edit1.text;
运行正常.如果改为:
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.sql.Add('select * from lsjfb where lsjfb.ls1='+edit1.text+'');
adoquery1.Open;
运行出现'invalid column name'黄坚''错误.但把ls1或ls2改为ls0即正常.
另外SQL的转换函数TO_NUMBER用不,出现不支持错误.
望各位大虾指教!

 
1.参数是从0开始编号的,你只有一个参数,当然应该用Parameters[0]。
2.引号没有用对,应该是——
'select * from lsjfb where lsjfb.ls1='''+edit1.text+''''
3.好象没有To_Number函数啊?
用CAST(expression AS data_type)或者CONVERT (data_type[(length)], expression [, style])


 
'select * from lsjfb where lsjfb.ls1='''+edit1.text+''''用过也不行.
据书介绍To_Number是字符型转数字型函数.但用不了.
 
现在报的什么错?

>>运行出现'invalid column name'黄坚''错误.
从这个现象看,此时Edit1.Text应该是'黄坚';就是说实际的SQL里是lsjfb.ls1=黄坚;
而正确的应该是lsjfb.ls1='黄坚';所以应该是引号的问题。
建议你还是仔细检查一下你的程序里的写法,
你可以在Open之前设个断点把看看SQL语句里的引号到底对不对。

在Books Online里的确没有查到To_Number啊,还是用cast或者convert吧。
 
同意dq.
sql.add('select * from lsjfb where lsjfb.ls1=');
sql.add(''''+edit1.text+'''');
试试。
 
with query do
begin
close;
sql.clear;
sql.text:='select * from lsjfb where lsjfb.ls1='+''''+edit1.text+'''';
open;
end;
edit1.text是字符串,前后要加引号。
 
adoquery1.sql.Add('select * from lsjfb ');
adoquery1.sql.Add('where lsjfb.ls0=:c2');
adoquery1.Parameters.parambyname('c2').value:=edit1.text;
 
哈哈,那个字符串的问题和我当初一样,我后来查了DELPHI的帮助,发现如果搜索的是
字符串的话,应该要用quotedstr函数来转换那个字符串。像这样:
sql.add('select * from lsjfb where lsjfb.ls0:='+quotedstr(edit1.text));
试试吧,肯定可以^_^
 
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.sql.Add('select * from lsjfb ');
adoquery1.sql.Add('where lsjfb.ls1=:c2');
adoquery1.Parameters[1].value:=edit1.text;
adoquery1.Open;
运行出现'list index out of bounds(1)'错误.如果把其中2行:
adoquery1.sql.Add('where lsjfb.ls1=:c2');
//adoquery1.Parameters[1].value:=edit1.text;
//改为:
//adoquery1.sql.Add('where lsjfb.ls0=:c2');
//adoquery1.Parameters[0].value:=edit1.text;
parameters[]是从0开始的。可以使用parameters.parambyname('C2').Value:=edit1.text来做。
//另外SQL的转换函数TO_NUMBER用不,出现不支持错误.
在SQL server 7中使用Convert,Cast来转换。

 
把字符型转数字型进行统计如下:
select sum(to_number(name)) as tt from lsjfb
出现不持错误?在DELPHI中adoquery1如何使用cast,convert实现如上统计?
 
select sum(cast(name as int)) as tt from lsjfb
或者
select sum(convert(int, name)) as tt from lsjfb

btw:TO_NUMBER是Oracle的函数!
 
如果加上like,如下:
sql.add('select * from lsjfb where lsjfb.ls0:='+quotedstr(edit1.text) and lsjfb.ls22 like "黄坚%"););

'select * from lsjfb where lsjfb.ls1='+''''+edit1.text+'''' and lsjfb.ls22 like "黄坚%";
运行出错!
 
我认为你应该这么写:
sql.add('select * from lsjfb where lsjfb.ls0='''+edit1.text+''' and
lsjfb.ls22 like ''黄坚%''')
 
不管怎样,我通常都会在open之前加上这样一句的:
showmessage(mysqlstringvar);
 
你应该这么写:
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.sql.Add('select * from lsjfb where lsjfb.ls1='''+edit1.text+'''');
adoquery1.Open;
 
adoquery1.Parameters.ParamByName('c2').value:=Trim(edit1.text)
应该没有问题呀
 
请自己结束问题
 
后退
顶部