求教!怎么在edit1键入AB实现select * from name where in (' A ','B ')的查询?(100分)(100分)

  • 主题发起人 主题发起人 myv
  • 开始时间 开始时间
M

myv

Unregistered / Unconfirmed
GUEST, unregistred user!
求教!怎么在edit1键入AB实现select * from name where in (' A ','B ')的查询或其它方法?
 
var
s : string;
i : integer;
begin
s := '';
for i := 1 to length(trim(edit1.text)) do
begin
s := s + '''' + copy(trim(edit1.text), i, 1) + ''',';
end;
s := copy(s, 1, length(s) - 1);
s := 'select * from name where (' + s + ')';//s = 'select * from name where ....'
//你的sql语句写错了(where子句)
 
procedure TForm1.Button1Click(Sender: TObject);
var
s : string;
i : integer;
begin
s := '';
for i := 1 to length(trim(edit1.text)) do
begin
s := s + '''' + copy(trim(edit1.text), i, 1) + ''',';
end;
s := copy(s, 1, length(s) - 1);
s := 'select * from name where name(' + s + ')';
form1.query1.close;
form1.Query1.sql.clear;
form1.Query1 .sql.add(s);
form1.query1.open;
end;
end.
实验失败!
 

s := 'select * from name where name(' + s + ')'; 少了一个in

s := 'select * from name where name in (' + s + ')';

 
s := 'select * from name where name in (' + s + ')';
一样失败!
 
什么报错信息?
 
为什么不是
select * from name where in ('AB ')

如果真的要
select * from name where in (' A ','B ')
只能先用copy()
取出各个字符

 
在edit1中输入一个姓或两个姓查不到任何信息,而直接用SQL语句'select * from name
where name in('张','李')却可以,???
 
估计是单双引号的问题!
 
如果要查中文的,对输入的内容有要求,比如用','号分隔:
var
s : string;
str : string;
i : integer;
begin
i := length(trim(edit1.text));
s := trim(edit1.text);
if copy(s, length(s), 1) = ',' then s := copy(s, 1, length(s) - 1);
str := '';
while pos(',', s) > 0 do
begin
str := str + '''' + copy(s, 1, pos(',', s) - 1) + ''',';
s := copy(s, pos(',',s) + 1, length(s) - pos(',', s) - 1);
end;
str := 'select * from name where name in (' + str + '''' + s + ''')';
with form1.query1 do
begin
close;
sql.clear;
sql.add(str);
open;
end;
end;
 
以上代码可以单查:select * from name where name='张’不可以双查:select * from
name where name in('张‘,’李) 实验失败!
 
在edit1中输入:张,李
注意,','是半角的。
 

我试了dlnew的代码,是成功的。

myv你再试一下,也是要注意那个‘,’的问题。
 
还是失败!输入:张,李得到是张的内容李没有,DBGrid1显示有什么限制?
procedure TForm1.Button1Click(Sender: TObject);

var
s : string;
str : string;
i : integer;
begin
i := length(trim(edit1.text));
s := trim(edit1.text);
if copy(s, length(s), 1) = ',' then s := copy(s, 1, length(s) - 1);
str := '';
while pos(',', s) > 0 do
begin
str := str + '''' + copy(s, 1, pos(',', s) - 1) + ''',';
s := copy(s, pos(',',s) + 1, length(s) - pos(',', s) - 1);
end;
str := 'select * from name where name in (' + str + '''' + s + ''')';
with form1.query1 do
begin
close;
sql.clear;
sql.add(str);
open;
end;
end;
end.
 
s := copy(s, pos(',',s) + 1, length(s) - pos(',', s)-1 );


这一句错了,不需要-1,应该是
s := copy(s, pos(',',s) + 1, length(s) - pos(',', s) );

 
不管怎样结果,我谢谢大家的帮助!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部