下面这段代码的意思是从搜索窗口选择查询条件然后查询并将查询结果显示在主窗口的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;

解决方案 »

  1.   

    SQL.Add(SQLStr + ' order by num DESC');
             ShowMessage(SQL.Text);    //看显示出来的语句正不正确!
             Open;
      

  2.   

    这种情况有可能是 ACCESS数据中,你查询的数据包含一些特殊字符,会造成内存溢出,你可以换个数据库测试一下SQL语句,如果可能查询,说明是数据库内容造成的,通常这个问题有可能是你的ACCESS中的数据是从EXCEL中导入的,可以在EXCEL中先把这些特殊字符删除(使用替换的方法),一般这个特殊字符表现为空格,但又不是 半角的空格,你可以用鼠标拖动选中这个空格,替换成空,再导入到ACCESS就不会出现 查询内存溢出了。
      

  3.   

    sql语句没有错误  不知什么原因