什么是“caHide,caNone”数据库相当于什么?

时间:2012-08-12 12:10:44

标签: database delphi

当我想确认表单退出时,我使用DialogMsg调用if,将Action参数设置为caNone(否)或caHide(是)

当我使用该方法进行数据库表行发布时,我遇到了问题。

如果我创建一个带有确认对话框的“保存”按钮,我可以调用PostCancel,但当表单中有数据库Grid时,问题出现在用户改变一行,然后选择另一行,自动保存前一行。

我找到的解决方案是将保存确认对话框放在OnBeforePost内,但如果用户说“不”,我应该如何取消Post命令继续?我尝试了CancelAbort命令,但它会继续保存该行。

1 个答案:

答案 0 :(得分:2)

您需要创建TMyQuery(或您正在使用的其他数据集类型)的自己的后代TXxxQuery。在您的类中重写Post方法并添加新事件,允许决定是否需要Post。然后注册新组件并使用TXxxQuery替换应用程序中的TMyQuery。并创建事件处理程序。

例如,TMyQuery

interface

type
  TMyAllowPostEvent = procedure (ASender: TDataSet; var AAllow: Boolean) of object;
  TMyQuery = class (TXxxQuery)
  private
    FOnAllowPost: TMyAllowPostEvent;
  public
    procedure Post; override;
  published
    property OnAllowPost: TMyAllowPostEvent read FOnAllowPost write FOnAllowPost;
  end;

implementation

procedure TMyQuery.Post;
var
  lAllow: Boolean;
begin
  lAllow := True;
  if Assigned(OnAllowPost) then
    OnAllowPost(Self, lAllow);
  if lAllow then
    inherited Post;
end;

事件处理程序的示例:

procedure TForm1.MyQuery1AllowPost(ASender: TDataSet; var AAllow: Boolean);
begin
  AAllow := MessageDlg('Would you like to save changes ?', mtConfirmation, mbYesNo, -1) = mrYes;
end;