可以在datasource 的 ondatachange事件中检查.

解决方案 »

  1.   

    大侠啊,我在里面写判断了,但报错,代码:procedure TDataModule1.Data_archivesDataChange(Sender: TObject;
      Field: TField);
    begin
       with ado_archives do
        begin
         open;
         if bof then
          begin
            frm_archives.toolbutton1.enabled:=false;
            frm_archives.ToolButton2.enabled:=true;      end;
        end;
    end;end.报错为:use step or run to continue
      

  2.   

    大侠啊,我在里面写判断了,但报错,代码:procedure TDataModule1.Data_archivesDataChange(Sender: TObject;
      Field: TField);
    begin
       with ado_archives do
        begin
         open;
         if bof then
          begin
            frm_archives.toolbutton1.enabled:=false;
            frm_archives.ToolButton2.enabled:=true;      end;
        end;
    end;end.报错为:use step or run to continue
      

  3.   

    你把Tdatamodule1的DATASET设置为 ado_archives就可以了.
    procedure TDataModule1.Data_archivesDataChange(Sender: TObject;
      Field: TField);
    begin
       with ado_archives do
        begin
          if bof then
          begin
            frm_archives.toolbutton1.enabled:=false;
            frm_archives.ToolButton2.enabled:=true;
          end;
        end;
    end;end.报错为:use step or run to continue
      

  4.   

    操作数据库要现关闭
    .....
    with ado_archives do
       begin
        close;
        try
         if bof then
        ...
       except
       ....
      

  5.   

    frm_archives.toolbutton1.enabled:=not ado_archives.eof
    其它的与这条语句类似
      

  6.   

    比方说你的数据集控件是TTable则在TTable的AfterScroll事件中写如下代码:
    procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
    begin
        Previous.Enabled:=Not Table1.Bof ;//Previous为向前的ToolButton名
        Next.Enabled    :=Not Table1.Eof ;//Next    为向后的ToolButton名
    end;
      

  7.   

    大侠啊,我在里面写判断了,但报错,代码:procedure TDataModule1.Data_archivesDataChange(Sender: TObject;
      Field: TField);
    begin
       with ado_archives do
        begin
         open;
         if bof then
          begin
            frm_archives.toolbutton1.enabled:=false;
            frm_archives.ToolButton2.enabled:=true;      end;
        end;
    end;end.各位大侠,我按你们说做了,但都报错。我想可能是我没解释清楚的原因frm_archives是一个子窗体,
    而我在frm_main主窗体中定义了一个m_OldForm
        { Private declarations }
        m_OldForm: TForm;
    我是在主窗口中调用子窗口。代码如下:
    procedure Tfrm_main.TreeView1Click(Sender: TObject);
    begin if m_OldForm <> nil then FreeAndNil(m_OldForm);
      if TreeView1.Selected.Text = '人事档案完整资料' then
      begin
       m_OldForm := Tfrm_archives.Create(Nil);
       m_OldForm.Show;  //此行也可省略,MDI子窗体建立后就会自动显示
    end else
      if treeview1.Selected.text='人事合同管理' then
        begin
         m_oldform:=tform.Create(nil);
         m_oldform.show;
        end;
      end;可现在我想在子窗口判断移动记录时,它老说:我的frm_archives的子窗体为空。也就是说下面这句代码。frm_archives.toolbutton1.enabled:=false;请各位前辈教我啊
      

  8.   

    用DBNavigator;如果你的工具栏是在父窗体,那就在自窗体创建的时候在把DBNavigator设为true,在子窗体关闭是设为false!
      

  9.   

    那就把DBNavigator的visable设为false,然后将工具条上的按钮指向SBNavigator上相应的按钮。
      

  10.   

    q4588818() 的回答挺好,用Delphi TActionList
      

  11.   

    利用action行为控件的datasource行为组控件控制工具栏按钮
      

  12.   

    同意blazingfire(烈焰) 的方法 地球人都知道
      

  13.   

    不想用DBNavigator工具栏,那工作会大一些,基本思想是:当你任何一次移动记录时,调整
    受影响按钮的Enabled状态。
      

  14.   

    最笨的方法,在每个按钮的OnChang事件里判断定