procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  For i := 0 to Self.ComponentCount do
  begin
    if self.Components[i] is TDBEdit then
      if TDBEdit(Self.Components[i]).Field.IsNull then showmessage('空值')
  end;
end;行了,自己写代码控制吧

解决方案 »

  1.   

    省点事:
    把Self.ComponentCount 改为 self.ControlerCount 
    把self.Components[i] 改为 self.Controlers[i] 
    可以减少次数
      

  2.   

    judge dbedit when it lost focus
      

  3.   

    我的目的是想在未post之前判断,直接判断dbedit的text是否空值
    如为空,使其取得焦点
    程序修改后如下:procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
    For i := 1 to Self.ComponentCount-1 do
      begin
        if self.components[i] is TdbEdit then
          if TdbEdit(Self.components[i]).text='' then
          begin
          showmessage('不能为空值');
          //此处欲使self.components[i]取得焦点,该如何做,好像不能用setfocus
          end;
    end;
    end;
      

  4.   

    再有就是这些dbedit中,一些是可以为空的,这些如何过滤掉
      

  5.   

    OK了,如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
    For i := 1 to self.controlcount-1 do
      begin
        if self.controls[i] is TdbEdit then
          if TdbEdit(Self.controls[i]).text='' then
          begin
          showmessage('不能为空值');
          Tdbedit(self.controls[i]).setfocus;
          break;
          end;
      end;
    end;
    另:可以为空的dbedit,可以使用其它的控件,如raize里的TRzdbedit,inforpower里的Twwdbedit,来和不能为空值的区别开。
    问题基本解决,各位有更好 更有效率的办法可以贴出来研究研究。
      

  6.   

    你自己要测,写var
      i: Integer;
    begin
      For i := 0 to Self.ComponentCount do
      begin
        if self.Components[i] is TDBEdit then
          if TDBEdit(Self.Components[i]).Field.IsNull then
          BEGIN
            TDBEdit(Self.Components[i]).SetFocus;
            BREAK;
          END;
      end;
    end;
      

  7.   

    我这里判断空值用TDBEdit(self.components[i]).field.IsNull出错,用TDBEdit(self.components[i]).text=''就没问题。