accept接收的应该是一个Boolean,该表达式的意思应该是将table1state.value与filterform.dbedit1.text比较的值赋给accept。也不知道理解的对不对,请高手指正。

解决方案 »

  1.   

    请热心的朋友指点迷津!!
    email: [email protected]
      

  2.   

    对!按程序意图应该是accept接受一个条件判断的boolean来做为过滤器,但我搞不清table1state.value的含义,filterform.dbedit1.text是取表的某一栏位的值。
    该段代码如下:
    procedure tdm.table1filterrecord(dataset:tdataset;var accept:boolean)
    begin
      accept:=table1state.value=filterform.dbedit1.text;
    end;
      

  3.   

    可改为Accept := (table1state.value = filterform.dbedit1.text);就看得清楚了!
    table1state.value是取Table1中的State字段的当前值(字符串型),此State字段是固定字段.
    你的问题可能在于没有建立此固定字段.可双击table1,在出现在窗口中右击,在菜单中选
    Add all  Fields(大概是这几个单词),窗口中加入的即为Table1对应表中的字段,这样就建产了固定字段.
      

  4.   

    该表本来就没有state字段
    table1state.value好像是 table1.state但又不像
      

  5.   

    相当于:
    if table1state.value = filterform.dbedit1.text then
      Accept := True
    else
      Accept := False;
      

  6.   

    table1为表名
    出错[Error] datamod.pas(28): Undeclared identifier: 'table1state'有没有那位曾试过此书该程序段!
      

  7.   

    难到《delpi5开发人员指南》都说是好书,而没人好好读吗?
      

  8.   

    你要双击那个Table,然后选择Add All Fields。
      

  9.   

    按weizhi  hyphoon两位大侠指点,编译通过!
    可我还是不太明白此行程序含义,能不能解释一下?
      

  10.   

    相当于:
    if table1state.value = filterform.dbedit1.text then
      Accept := True
    else
      Accept := False;   Table1State是一个固定字段对象的名字,它就是Table1的State字段,当Table1打开后它就有值了,其值就是Table1的当前记录的State字段的值.它是TField类型的.
    Table1State.Value相当于Table1.FieldByName('State').Value,还可这样用:Table1State.AsString它与Table1.FieldByName('State').AsString相同.Delphi中字段分为两种,一种是非固定字段,一种是固定字段,对于前者,DELPHI自动建立,后者需手工建立,方法前面已讲了.
    默认情况下每个TABLE或QUERY在OPEN之后DELPHI都会从它们对应的表中找到字段并建立相应的字段对象.如果你没有给此TABLE或QUERY建立固定字段,则Delphi建立非固定字段,如果有固定字段,则DELPHI使用建产的固定字段,对此TAble或Query中的非固定字段的字段将被Delphi儿忽略.  非固定字段的优点在于,方便灵活,改变Table或Query对应的数据集后,它能自动变的与此数据集的实际字段集一致.
      固定字段的优点在于,由于固定字段是在设计期建立的对象,可在属性编辑器中对每个固定字段设定属性,指定事件等.可控制的程度比较大.但是当此Table或Query对应的数据集变化后,如果新的数据集中没有以前的固定字段,此会触发异常.此Table或Query也不能正常打开.
      大概就是这样了,你可以在查其它一些资料.
      

  11.   

    所以此例中,如果你没建固定字段,也可改为:
    accept:=(table1.FieldByName('state').Asstring=filterform.dbedit1.text);