这段代码是用来在dbgrid中增加记录的,现在一点击增加按钮,数据库中以前的记录都显示出来了,怎么才能解决这个问题阿?请指教!
ADOTable1.Active:=True;
ADOTable1.Append;
//ADOTable1.Edit;
Button49.Click ;
dbgrid1.Fields[0].AsString:='02';
dbgrid1.Fields[7].AsString:=DBComboBox2.Text;
dbgrid1.Fields[8].AsString:=DBComboBox4.Text;
dbgrid1.Fields[9].AsString:=DBComboBox3.Text;

解决方案 »

  1.   

    你用dbgrid的目的不就是显示全部记录吗,如果不要求显示原来的,改用dbedit
      

  2.   

    如果不想显示其它记录的话就设置一下Filter
    假如你想显示字段ID的值为'02'的记录
    那么
    ADOTable1.Filtered=false;
    ADOTable1.Filter:='ID=''02''';
    ADOTable1.Filtered:=true;
      

  3.   

    我的dbgrid是用来录入记录的阿,这样不行吗?
      

  4.   

    用filter了,还是把所有的都显示了
      

  5.   

    改成了这样,
    ADOTable1.Active:=True;
    ADOTable1.Filtered:=false;
    ADOTable1.Filter:='id=''02''';
    ADOTable1.Filtered:=true;ADOTable1.Append;
    //ADOTable1.Edit;
    Button49.Click ;
    dbgrid1.Fields[0].AsString:='02';
    dbgrid1.Fields[7].AsString:=DBComboBox2.Text;
    dbgrid1.Fields[8].AsString:=DBComboBox4.Text;
    dbgrid1.Fields[9].AsString:=DBComboBox3.Text;
    但还是都显示出来了,帮帮忙啊,很急!谢谢了。
      

  6.   

    要先做filter,再让ADOTable1的active为true
    想要它不显示已有记录就让
    ADOTable1.Filter:='ID=''';
      

  7.   

    ADOTable1.Filtered:=false;
    ADOTable1.Filter:='id=''02''';
    ADOTable1.Filtered:=true;
    ADOTable1.Active:=True;
    ADOTable1.Append;
    //ADOTable1.Edit;
    Button49.Click ;
    dbgrid1.Fields[0].AsString:='02';
    dbgrid1.Fields[7].AsString:=DBComboBox2.Text;
    dbgrid1.Fields[8].AsString:=DBComboBox4.Text;
    dbgrid1.Fields[9].AsString:=DBComboBox3.Text
    这样写的,还是都显示出来了。
      

  8.   

    怎么回事啊?是不是filter写得不对?
      

  9.   

    我试了一下,active:=true 放在前面也可以,在
    ADOTable1.Active:=True;
    ADOTable1.Filtered:=false;
    ADOTable1.Filter:='id=0';
    ADOTable1.Filtered:=true;
    中,确认你的表中对应字段名是否为“id”
    还有格式  filter:='id=0'
      

  10.   

    字段名千真万确是id,我试了一下把=换成<>,也就是ADOTable1.Filter:='id<>''02'''时,还可以用但是我不明白,filter到底是过滤掉,还是过滤后显示出来?请指教!
      

  11.   

    你在数字02上加了引号不报错吗?
    我这里用的ADOTable1.Filter:='id=0';可以实现, 因为数据库里id号没有为 0 的,所以就显示的空记录。
      

  12.   

    ADOTable1.Filtered:=false;
    ADOTable1.Filter:='id=0';
    ADOTable1.Filtered:=true;
    ADOTable1.Active:=True;
    //ADOTable1.Append;
    ADOTable1.Edit;
    Button49.Click ;
    dbgrid1.Fields[0].AsString:='02';
    dbgrid1.Fields[7].AsString:=DBComboBox2.Text;
    dbgrid1.Fields[8].AsString:=DBComboBox4.Text;
    dbgrid1.Fields[9].AsString:=DBComboBox3.Text;
    这样是给滤掉了,可是我需要连续增加好几条记录,再点击增加按钮时,刚才录入的那个条记录也没有了,而且发现已经保存进了数据库,怎么回事啊?
      

  13.   

    我根本没有post,把ADOTable1.Append;改为ADOTable1.Edit也是这种情况,把下面这一段ADOTable1.Filtered:=false;
    ADOTable1.Filter:='id=0';
    ADOTable1.Filtered:=true;
    ADOTable1.Active:=True;
    放在FormCreate中也不行,怎么回事啊?
      

  14.   

    如果你把id做成不断增加的,也就是后录入的记录id一定比前面的id大,你可以试试这样:
    定义一个全局变量 n,初值为0,在“增加”按钮里这样写:
    if n=0 then
    将id 值付给n;
    ADOTable1.Filtered:=false;
    ADOTable1.Filter:='id>=n';
    ADOTable1.Filtered:=true;
      

  15.   

    ADOTable1.Filter:='i>n';
    把n换成数字可以,可是换成n之后报错:参数类型不正确,
    调试时看到n=63,n是数字型的,i是自动编号,长整型。
      

  16.   

    ADOTable1.Active:=True;
    ADOTable1.Last;
    si:= ADOTable1.Fields[10].AsString;
    n:=StrToInt(si);
    ADOTable1.Filtered:=false;
    ADOTable1.Filter:='i > n';
    ADOTable1.Filtered:=true;
    报参数类型不正确的错误,请指教!谢谢了!
      

  17.   

    n:=StrToInt(si);这个n显示63
    ADOTable1.Filter:='i > n';可是这个n没有把63引过来,调试时仍然是n,咋回事啊?
      

  18.   

    改成n:=StrToInt64(si);
    试试!
      

  19.   

    你上面用last 是不行的,你每点一下新增,就要last一次,这样还是显示不出来你刚才录入的记录。可以把last 放在别的事件里。
     n  可以定义成int64试试,或者不用n,直接 i>=StrToInt64(si)试一下。
      

  20.   

    直接 i>=StrToInt64(si)还是不行,调试的值是‘i>=StrToInt64(si)’根本没有引用。
    另外还有一点,为什么我点击一下它就自动到库里去了,我又没有post,我不想让他直接到库里去,怎么办啊?
      

  21.   

    哦,想起来了,应该是 filter:='i>='+StrToInt64(si);
      

  22.   

    想要记录在这显示着,又没存在库里,ADOTable好像不行,我做CS三层结构软件时用的ClientDataSet 它有post ,还有ApplyUpdates(),只post 时没有存入数据库,只有
    ApplyUpdates(0)时,才开始存入库中。
      

  23.   

    用这个的话filter:='i>='+StrToInt64(si);系统报错:incompatible string and int64。还是不行啊。
      

  24.   

    先前都是格式上的错误,现在用这种格式,再用原来的n:integer ,使n:=Strtoint(si),这里用
    filter:='i>='+n;试试。
      

  25.   

    ADOTable1.Active:=True;
    ADOTable1.Last;
    si:= ADOTable1.Fields[10].AsString;
    n:=StrToInt(si);
    ADOTable1.Filtered:=false;
    ADOTable1.Filter:='i>'+n;
    ADOTable1.Filtered:=true;
    //ADOTable1.Active:=True;
    //ADOTable1.Append;
    ADOTable1.Edit;
    Button49.Click ;
    dbgrid1.Fields[0].AsString:='02';
    还是报incompatible string and integer的错误。
      

  26.   

    那可能后面要用String类型的吧,不用转成int,直接用filter:='i>='+si;
      

  27.   

    我刚才解决了,filter:='i>='+inttostr(n);哈哈,一会给你分,哈哈。
    还有个问题请教一下,
    ADOTable1.Active:=true;
         ADOTable1.Edit;
         ADOQuery14.Close;
         ADOQuery14.SQL.Clear;
         s:='select * from a02 where callsign='+''''+DBComboBox2.Text+'''' +'and voy='+''''+DBComboBox4.Text+'''' +'and port='+''''+DBComboBox3.Text+'''';
         ADOQuery14.SQL.Add(s);
         ADOQuery14.Open;
         DataSource1.DataSet:=adoquery14;
        // ADOQuery14.Active:=true;
         ADOQuery14.Edit;
    这是查询里面的代码,查询后,我一点击dbgrid,就报错:ADOQuery14:dataset not in edit or insert mode。我已经edit了阿?怎么回事,请指教!
      

  28.   

    你把adoquery的Lock Type改为ltBatchOptimistic试试