请教大家个问题,最近学习DELPHI的数据集组件的过滤器,在书中有这样一段代码,我无法理解这些代码的含义。
使用过滤器对表进行过滤,过滤出LAST_NAME字段以N开头的记录:
在主窗体的私有部分声明了如下与OnFilterRecord事件处理方法的类型相同的名为DataSetFilterRecord的方法:
procedure TForm1.DataSetFilterRecord(DataSet:TDataSet;var Accept:Boolean);
var
  s:=DataSet.FieldByName('LAST_NAME).AsString;
  Accept:=s[1]='N';
end;
然后编写按钮的OnClick事件处理程序:
procdeure TForm1.bbEventFilterClick(Sender:TObject);
begin
  DataModule1.tblEmployee.OnFilterRecord:=DataSetFilterRecord;
  DataModule1.tblEmployee.Filtered:=True;
end;
标红色的代码是我无法理解的部分:
1.字符串变量S是普通变量还是数组?为什么这样声明?
Accept是布尔类型的变量,也就是说只有True或False的值,为什么代码中能够这样赋值:Accept:=s[1]='N';
变量S[1]是什么意思?Accept这样赋值后的值是多少?为什么Accept赋S[1]后又等于‘N'?我始终无法理解这段代码的含义。
2. DataModule1.tblEmployee.OnFilterRecord:=DataSetFilterRecord;OnFilterRecord:事件为什么要这样赋值?
Delphi

解决方案 »

  1.   

    1、s是string类型,你代码明显有误,无begin。
      Accept:=s[1]='N';
    这句你要这么看, 先判断 s[1] = 'N' 是真是假,然后赋值给Accept,s[1]是字符串第一个字符。2、回调事件赋值这个没什么好解释了,语法就是这样。
      

  2.   

    我有些明白了,但再请教下,Accept:=s[1]='N';是对数据集逐条记录进行判断吗?如果s[1] = 'N'是假,是否会赋FALSE给ACCEPT?然后再对判断为TRUE的记录显示出来?我怎么感觉很像循环和条件判断语句?但代码里面并没有这样的语句啊?
    你能否把代码的详细运作情况说详细点?比如判断真假后,后面的流程是怎样的?谢谢你了。我觉得弄清楚点比较好,不然似是似非,自己猜测,会影响后面的学习。
      

  3.   

    你直接就认为Accept := s[1]='N'  是
    if s[1]='N' then
      Accept := True
    else
      Accept := False;
    这段代码的简写
      

  4.   

    procedure TForm1.DataSetFilterRecord(DataSet:TDataSet;var Accept:Boolean);
    var
      s :string;
    begin
      s:=DataSet.FieldByName('LAST_NAME).AsString; //将字段"Last_Name"值赋给S
      Accept:=s[1]='N';//字符串实际上是一个字符数组,这句是将布尔值赋给Accept。
     //S[1]='N'是一个布尔表达式,当S[1]='N'时为True;当S[1]<>'N'时为False.
    end;procdeure TForm1.bbEventFilterClick(Sender:TObject);
    begin
      DataModule1.tblEmployee.OnFilterRecord:=DataSetFilterRecord; //数据集的OnFilterRecord事件调用
    //过程DataSetFilterRecord.
      DataModule1.tblEmployee.Filtered:=True;
    end;