下面的代码哪有问题?(70分)

  • 主题发起人 主题发起人 nancycm
  • 开始时间 开始时间
N

nancycm

Unregistered / Unconfirmed
GUEST, unregistred user!
想实现在checklistBox中选择一个或多个之后,把相应的数据显示出来,可为什么执行后
ADOQuery2.sql始终只是
select * from Orders where OrderID=xxx
而不是我想要的:
select * from Orders where OrderID=xxx or OrderID=xxx or OrderID=xxx ....

procedure TForm1.yesBtnClick(Sender: TObject);
var
sqlString:String;
I:Integer;
flag:boolean;
begin
flag:=false;
ADOQuery2.SQL.Clear;
sqlString:='select * from Orders where';
for I:=0 to CheckListBox1.Count-1 do
begin
if CheckListBox1.Selected then
begin
if flag then
sqlString:=sqlString+' or';
sqlString:=sqlString+' OrderID='+''''+CheckListBox1.Items+'''';
if not flag then
flag:=true;
end;
end;
ADOQuery2.SQL.Add(sqlString);
ADOQuery2.Active:=true;
ADOQuery2.ExecSQL;
end;
 
procedure TForm1.yesBtnClick(Sender: TObject);
var
sqlString:String;
I:Integer;
flag:boolean;
begin
flag:=false;
ADOQuery2.SQL.Clear;
sqlString:='select * from Orders where';
for I:=0 to CheckListBox1.Count-1 do
begin
if CheckListBox1.Selected then
begin
if flag then
sqlString:=sqlString+' or';
sqlString:=sqlString+' OrderID='+''''+CheckListBox1.Items+'''';
if not flag then
flag:=true;
end;
end;
ADOQuery2.SQL.Add(sqlString);
ADOQuery2.Active:=true;
ADOQuery2.ExecSQL;
end;procedure TForm1.yesBtnClick(Sender: TObject);
var
sqlString:String;
I:Integer;
flag:boolean;
begin
flag:=false;
ADOQuery2.SQL.Clear;
sqlString:='select * from Orders where';
for I:=0 to CheckListBox1.Count-1 do
begin
if CheckListBox1.Selected then
begin
if flag then
sqlString:=sqlString+' or';
sqlString:=sqlString+' OrderID='+''''+CheckListBox1.Items+'''';
if not flag then
flag:=true;
end;
end;
ADOQuery2.SQL.Add(sqlString);
ADOQuery2.Active:=true;
ADOQuery2.ExecSQL;//首先,这一句不要
end;
 
3x,可问题依旧。
 
procedure TForm1.yesBtnClick(Sender: TObject);
var
sqlString:String;
I:Integer;
// flag:boolean;
begin
// flag:=false;
ADOQuery2.SQL.Clear;
sqlString:='select * from Orders where 1=1 '; //////////////
for I:=0 to CheckListBox1.Count-1 do
if CheckListBox1.Selected then
sqlString:=sqlString+' or OrderID='+''''+CheckListBox1.Items+'''';
ADOQuery2.SQL.Add(sqlString);
ADOQuery2.Active:=true;
ADOQuery2.ExecSQL;
end;
 
to nancycm:老兄,小鱼问个问题:adoquery可以联到delphi自带的data下的表么,也就是
db,dbf之类的表,见笑了,等待。。。。。。。。。。。。。
 
procedure TForm1.yesBtnClick(Sender: TObject);
var
sqlString:String;
I:Integer;
flag:boolean;
begin
flag:=false;
ADOQuery2.SQL.Clear;
sqlString:='select * from Orders where';
for I:=0 to CheckListBox1.Count-1 do
begin
if CheckListBox1.Checked then //原代码: if CheckListBox1.Selected then
begin
if flag then
sqlString:=sqlString+' or';
sqlString:=sqlString+' OrderID='+''''+CheckListBox1.Items+'''';
if not flag then
flag:=true;
end;
end;
ADOQuery2.SQL.Add(sqlString);
ADOQuery2.Active:=true;
ADOQuery2.ExecSQL;
end;

你试试看!
 
3x
to jsxjd
也不对,这样的话 ,又把表中所有的记录选出来了,根本没有起到选择的作用呀。
 
1、是否已设可多选。
2、可以在代码里再看看选择了几个CheckListBox1.Count>1????
 
to nansha
看看下面的文章:
http://bdn.borland.com/article/0,1410,28160,00.html

一句话,如果是连桌面型数据库,用TTable控件,连分布数据库用TQuery控件。
 
问题解决:))
 
to jsxjd

sorry, you answer late a little, it's also right.
next time I will give you more scores.
:)
 

Similar threads

I
回复
0
查看
822
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部