Delphi TQuery后代对象

时间:2015-03-07 06:58:21

标签: delphi

我需要在onBeforePost事件上编写一个带有覆盖的TQuery后代,我应该检查状态是否为dsInsert或dsEdit ...并允许或不允许帖子继续,但我需要具有自定义组件经验的人仔细检查一下。

我创建组件已经很久了,而且我有点生疏了。你能看看我得到了什么,并告诉我,如果我做得对吗?

这是我的组件代码

unit MxQuery;

interface

uses
  SysUtils, Classes, DB, DBTables;

type
  TMxQuery = class(TQuery)
  procedure DoBeforePost; override;
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    constructor Create(AOwner:TComponent); override;
  end;

procedure Register;

implementation

constructor TMxQuery.Create(AOwner:Tcomponent);
begin
 inherited create(AOwner);
end;

procedure Register;
begin
  RegisterComponents('Samples', [TMxQuery]);
end;

procedure TMxQuery.DoBeforePost;
begin
  case self.DataSource.State of
    dsEdit,dsInsert:
    begin
      //Do nothing or other stuff
    end;
    else
    begin
      self.DataSource.DataSet.Cancel;
      Abort;
    end;
  end;
  inherited;
end;
end.

由于

1 个答案:

答案 0 :(得分:1)

Imho,这个问题更适合https://codereview.stackexchange.com/

无论如何,让我指出一些事情:

  1. 您的代码应该正常运行。
  2. 正如@SirRufo所说,您不必要地将方法DoBeforePost的可见性提升为published。在声明TQuery或其祖先之一中查找此方法。使用相同的可见性覆盖该方法。
  3. 不需要构造函数TMxQuery.Create,因为它不会添加任何内容。