现已经设置好ADOTable1,DataSource1,DBGrid1,并且已经连上数据库,DBGrid1中已经能显示出数据库中所有记录(ID/name/nationality/address/).我想只在DBGrid1显示符合条件的记录,但不在数据库中删除不符合条件的记录.
比如nationality=China,应该怎么做啊?
小弟对ADOTable1进行如下编程:
with ADOTable1 do
  begin
    Filtered:=False;
    Filter:='nationality='+Quoted('China');
    Filtered:=True;
  end;可是编译的时候,系统警告'ADOTable1:Filet property cannot be used for detail tables',这是什么原因啊?
该怎么正确实现我的需求啊?

解决方案 »

  1.   

    按字面好像是说过滤属性是不能用于明细表的,你可以用adoquery的。
      

  2.   

    with ADOTable1 do
      begin
        Active:=false;
        Filter:='nationality=China';
        Filtered:=True;
        Active:=true;
      end
      

  3.   

    用SQL语句多方便啊。 你这只是单纯的过滤。用SQL语句可以方便好多。能写出很多种查询条件的。
      

  4.   

    with ADOQuery1 do
    begin
     close;
     SQL.clear;
     SQL.Add('select * from 表名');
     SQL.Add('where nationality="China" ');
     SQL.open;
    end;
      

  5.   


    with ADOTable1 do
      begin
        Active:=false;
        Filter:='nationality=China';
        Filtered:=True;
        Active:=true;
      end
      

  6.   

    用ADOQUERY,如果不改变查询结果,就直接在ADOQUERY的SQL属性中写:select * from 表名 where nationality=China
    如果想设置可变的查询,就在窗体上加一个EDIT(字段名)或COMBOBOX(表名),然后定义一个查询变量如:strsql:string;      然后在查询按钮的onclick事件中用:
    begin
     adoquery1.close;
     adoquery1.SQL.clear;
      strsql:='select * form '
    if trim(edit1.text)<>'' then
    strsql:=strsql+'"'+combobox1.text+'"'+'where ''"'+edit1.text+'"';
     adoquery1.SQL.Add(strsql); 
    adoquery1.open; 
    end;
    (这里的combobox中必须先选择表名)