for I:=0 to memo1.Lines.Count-1 DO
            BEGIN
           adodataset1.Filtered:=false;
          // adodataset1.Filter:='gs='+''''+edit4.Text+'''';
            adodataset1.Filter:='gs='+''''+Memo1.Lines.Strings[i]+'''';
           adodataset1.Filtered:=true;
           END;
为什么只执行MEMO1的最后一个字符?

解决方案 »

  1.   

    adodataset1.Filtered:=false;
    for I:=0 to memo1.Lines.Count-1 DO 
                BEGIN 
     adodataset1.Filter:= adodataset1.Filter + 'gs='+''''+Memo1.Lines.Strings[i]+''''; 
               
              END;
    adodataset1.Filtered:=true; 
    为什么只执行MEMO1的最后一个字符?
      

  2.   

    多条件过滤吗?中间怎么没有and后者or连接呢?
      

  3.   

    晕~~看错了,
    楼主发的还不是多条件,在adodataset1.Filtered:=true之前,后面的直接覆盖前面的了。
      

  4.   

    adodataset1.Filter:='gs='+''''+edit4.Text+''''; 可以执行吗?
    另提示什么错误?
      

  5.   

    我的意思就是里面有几条记录查询几条记录,全部显示在DBGrid中
      

  6.   

    adodataset1.Filter:='gs='+''''+edit4.Text+'''';这个可以执行啊,没有提示错误!
       for I:=0 to memo1.Lines.Count-1 DO 
                BEGIN 
              adodataset1.Filtered:=false; 
                adodataset1.Filter:='gs='+''''+Memo1.Lines.Strings[i]+''''; 
              adodataset1.Filtered:=true; 
              END; 这个也没有提示错误啊
      

  7.   

    是每次都执行了,但是只显示最后一行过滤后的查询结果。          for I:=0 to memo1.Lines.Count-1 DO 
                BEGIN 
              adodataset1.Filtered:=false; 
                adodataset1.Filter:='gs='+''''+Memo1.Lines.Strings[i]+''''; 
              adodataset1.Filtered:=true; 
              sleep(10000);//等待一分钟,你看看数据集筛选的结果
              END; 你要实现什么功能,如果是按Memo1中的内容查,你要用gs in()去拼字符串。
    s := '';
    for i:=0 to memo1.lines.count-1 do
    begin
      if s<>'' then
      s:=s+','+'''+trim(memo1.lines.strings[i]+''''
      else 
      s:='''+trim(memo1.lines.strings[i]+'''';
    end;
      

  8.   

    edit4.Text是否等于memo1里的一行的内容还是所有行?
      

  9.   

    不行用查询语句的方式吧
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
      s: String;
    begin
      s:='';
      for i:=0 to memo1.Lines.Count-1 do
      begin
        if s='' then s := ''''+memo1.Lines.Strings[i]+''''
        else s:= s+','+''''+memo1.Lines.Strings[i]+'''';
      end;
      with adodataset1 do
      begin
        Close;
        commandtext := 'select * from user_desc where name in('+trim(s)+')';
        Open;
      end;
    end;类似这样
      

  10.   

    你这种写法肯定只过滤最后一条。我的代码如下:
    是每次都执行了,但是只显示最后一行过滤后的查询结果。 
    adodataset1.Filtered:=false; 
    s := ''; 
    for i:=0 to memo1.lines.count-1 do 
    begin 
      if s <>'' then 
        s:=s+' or gs='+'''+trim(memo1.lines.strings[i]+'''' 
      else 
        s:='gs=''+trim(memo1.lines.strings[i]+''''; 
    end; 
    adodataset1.Filter:= s;
    adodataset1.Filtered := true;
      

  11.   

    fielter 相当于SQL 语句的Where 部分。