下面这段代码的意思是从搜索窗口选择查询条件然后查询并将查询结果显示在主窗口的stringgrid中 可是执行的时候 提示 '内存溢出' 我个人认为是SQL语句有问题 有没有更好的方法? 数据库是access的 请各位高手指点!!!
procedure TSearchDlg.Button6Click(Sender: TObject);
var
i, k: Integer;
SQLStr: string;
begin
SQLStr := 'select * from table1 where ';
for i := 0 to ListBox4.Count - 1 do
begin
if i = 0 then
SQLStr := SQLStr + ' msg like ' + QuotedStr('%' + ListBox4.Items.Strings[i] + '%')
else
SQLStr := SQLStr + ' or msg like ' + QuotedStr('%' + ListBox4.Items.Strings[i] + '%');
end;
with Form1 do
begin
Stringgrid2.Cols[0].Clear;
StringGrid2.Cols[1].Clear;
StringGrid2.RowCount := 1;
k := 0;
try
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(SQLStr + ' order by num DESC');
Open;
First;
while not Eof do
begin
Stringgrid2.RowCount := Stringgrid2.RowCount + 1;
StringGrid2.Cells[0,k] := FieldByName('num').AsString;
StringGrid2.Cells[1,k] := FieldByName('msg').AsString;
Inc(k);
Next;
end;
end;
finally
ADOQuery1.Close;
end;
end;
procedure TSearchDlg.Button6Click(Sender: TObject);
var
i, k: Integer;
SQLStr: string;
begin
SQLStr := 'select * from table1 where ';
for i := 0 to ListBox4.Count - 1 do
begin
if i = 0 then
SQLStr := SQLStr + ' msg like ' + QuotedStr('%' + ListBox4.Items.Strings[i] + '%')
else
SQLStr := SQLStr + ' or msg like ' + QuotedStr('%' + ListBox4.Items.Strings[i] + '%');
end;
with Form1 do
begin
Stringgrid2.Cols[0].Clear;
StringGrid2.Cols[1].Clear;
StringGrid2.RowCount := 1;
k := 0;
try
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(SQLStr + ' order by num DESC');
Open;
First;
while not Eof do
begin
Stringgrid2.RowCount := Stringgrid2.RowCount + 1;
StringGrid2.Cells[0,k] := FieldByName('num').AsString;
StringGrid2.Cells[1,k] := FieldByName('msg').AsString;
Inc(k);
Next;
end;
end;
finally
ADOQuery1.Close;
end;
end;
ShowMessage(SQL.Text); //看显示出来的语句正不正确!
Open;