adoquery连接sqlserver查询出错
用adoquery连接sqlserver查询,当查询语句比较复杂的时候,对参数传'',就会出现错误。adoquery会自动把参数转换成text类型,其实是varchar类型,但是由于语句比较复杂,所以adoquery判断不出参数是什么类型了.直接在查询分析器里执行是好的。
sql:
- SQL code
CREATE TABLE [dbo].[test] ( [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [number] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]
delphi代码:
- Delphi(Pascal) code
with ADOQuery1 dobegin close; sql.text := 'select * from test a left join (select name from test where name=:name) b on a.name=b.name'; Parameters[0].value := ''; Open;end;
执行之后用sqlserver的事件探查器跟踪得到的语句是这样的:
- SQL code
exec sp_executesql N'select * from test a left join (select name from test where name=@P1) b on a.name=b.name', N'@P1 text', ''
提示:
不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符。
[解决办法]
你的字段什么类型,提示你那几种类型不能这么用
[解决办法]
1.自用表字段最好不用name,如果要用加上[],
with ADOQuery1 do
begin
close;
sql.text := 'select * from test a left join (select [name] from test where [name]=:name) b on a.[name]=b.[name]';
Parameters[0].value := '';
Open;
end;
2.加入句後,先建立型的,然後再值。
[解决办法]
Parameters[0].value := QuotedStr('')
[解决办法]
不用参数模式,用变量拼接