ORACLE数据库有一张表A,字段若干...其中字段field1中有数据:JACK,TOM,DANNY,JOHN,ROSE,...等名字我想通过ADOQuery查询存在名字为TOM,DANNY,JOHN的记录——————
var
string1:string;
begin
........
string1:=''TOM'' , ''DANNY'' , ''ROSE'' /////
........ AdoQuery.text:='select * from A'+''
+'where name in'''+(string1)+'''';
............
查询无数据结果再试:AdoQuery.text:='select * from A'+''
'where name in''' + '(' + string1 +')' +'''';
............同样没有数据结果。
注明:string1:=''TOM'' , ''DANNY'' , ''ROSE'' 都是双引号加逗号分隔。我将sring1中的内容直接写到Adoquery中:
...
'where name in(''Tom'',''Danny'',''Rose'')';
则可以查处相关的记录,好奇怪!各位高手:是不是括号或者单引号的问题呀?怎么用?谢谢!
var
string1:string;
begin
........
string1:=''TOM'' , ''DANNY'' , ''ROSE'' /////
........ AdoQuery.text:='select * from A'+''
+'where name in'''+(string1)+'''';
............
查询无数据结果再试:AdoQuery.text:='select * from A'+''
'where name in''' + '(' + string1 +')' +'''';
............同样没有数据结果。
注明:string1:=''TOM'' , ''DANNY'' , ''ROSE'' 都是双引号加逗号分隔。我将sring1中的内容直接写到Adoquery中:
...
'where name in(''Tom'',''Danny'',''Rose'')';
则可以查处相关的记录,好奇怪!各位高手:是不是括号或者单引号的问题呀?怎么用?谢谢!
in 是用于集合或枚举吧,怎么能用在字符串上呢?
adoquery1.sql.text:='select * from A where trim(name) in (''%s'',''%s'',''%s'')';
adoquery1.sql.text:=format(adoquery1.sql.text,['Tom','Danny','Rose']);
adoquery1.open;
+'where Lower(name) in'''+(string1)+'''';
楼主应采用第二种方式,
数据库的内容如果只是首字符大写,则在程序中处理
如果字段大写在中间部分,则需要对数据库内容进行调整
或者sql中用UPPER(name)与程序中字段匹配
sql中少用函数有利于提高性能
s:='''';(四个)
showmessage(s); 显示结果:'(一个单引号)
s:=''';(三个,奇数个) 则无法编译。具体的用法就这样,然后你在根据这个规则修改你的SQL语句。
var
str: string;
begin
str := '''lu'', ''fancy''';
ADOQuery1.SQL.Text := 'select * from aa where a in (' + str + ')';
ADOQuery1.Open;
end;
var
str:array[0..] of string;
s:string;
i:integer;
begin
for i:= 0 to ... do
if str<>'' then
s:=s+','+quotedstr(str[i])
else
s:=s+quotedstr(str[i]);
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add(s);
adoquery.open;
end;
var
str:array[0..] of string;
s:string;
i:integer;
begin
for i:= low(str) to high(str) do
if s<>'' then
s:=s+','+quotedstr(str[i])
else
s:=s+quotedstr(str[i]);
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add(s);
adoquery.open;
end;
sorry,写错了
var
str:array[0..] of string;
s:string;
i:integer;
sSql:string;
begin
for i:= low(str) to high(str) do
if s<>'' then
s:=s+','+quotedstr(str[i])
else
s:=s+quotedstr(str[i]);
sSql:='select * from t where t.field in ('+s+')';
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add(sSql);
adoquery.open;
end;
sorry,写错了