database - 什么是 "caHide, caNone"数据库等效项?

标签 database delphi

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

当我将这种方法用于数据库表行发布时,我遇到了问题。

如果我制作一个带有确认对话框的保存按钮,我可以调用 PostCancel,但是当我有一个数据库 Grid 时表格,当用户更改一行然后选择另一行时,问题就来了,女巫会自动保存前一行。

我找到的解决方案是将保存确认对话框放在OnBeforePost中,但是如果uses说No,我应该如何取消Post命令继续?我已经尝试了 CancelAbort 命令,但它继续保存该行。

最佳答案

您需要创建您自己的TXxxQuery 的后代TMyQuery(或者您正在使用的其他数据集类型)。并在您的类中覆盖 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;

关于database - 什么是 "caHide, caNone"数据库等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11922043/

相关文章:

mysql - mysql 中重复索引的基数可以不同吗?

delphi - Delphi:组件生成-关联TVirtualStringTree

multithreading - Delphi 2007 AsyncMultiSync 不起作用

delphi - 什么会导致 SysFreeString 遇到 Int 3 断点?

database - SQL 服务器 2005 |我如何确定我的数据服务器没有发生写入

database - 空值返回问题

数据库开发组织

c# - 在客户端计算机上使用 sql server DB 安装 C# 桌面应用程序

delphi 用 updateresources 写入数据

delphi - 如何获取通用 TList<Integer> 中的最大值?