⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 masterdetail.~pa

📁 一套融入了系统营销管理思想的管理软件产品
💻 ~PA
字号:
unit MasterDetail;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Single, Menus, Db, DBTables, Grids, DBGrids, Buttons, ExtCtrls, StdCtrls,
  Mask, DBCtrls;

type
  TfmMasterDetail = class(TfmSingle)
    Panel2: TPanel;
    gdDetail: TDBGrid;
    qyDetail: TQuery;
    dsDetail: TDataSource;
    usDetail: TUpdateSQL;
    muPopup: TPopupMenu;
    muDetailAppend: TMenuItem;
    muDetailEdit: TMenuItem;
    muDetailDel: TMenuItem;
    muDetailCancel: TMenuItem;
    N5: TMenuItem;
    muDetailSave: TMenuItem;
    N7: TMenuItem;
    muDetailRefresh: TMenuItem;
    N1: TMenuItem;
    muDetailFirst: TMenuItem;
    muDetailLast: TMenuItem;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure qyDetailBeforeInsert(DataSet: TDataSet);
    procedure qyDetailBeforeEdit(DataSet: TDataSet);
    procedure qyDetailBeforeDelete(DataSet: TDataSet);
    procedure qyDetailAfterScroll(DataSet: TDataSet);
    procedure qyDetailAfterPost(DataSet: TDataSet);
    procedure qyDetailAfterDelete(DataSet: TDataSet);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure muDetailAppendClick(Sender: TObject);
    procedure muDetailEditClick(Sender: TObject);
    procedure muDetailDelClick(Sender: TObject);
    procedure muDetailSaveClick(Sender: TObject);
    procedure muDetailCancelClick(Sender: TObject);
    procedure muDetailRefreshClick(Sender: TObject);
    procedure muDetailFirstClick(Sender: TObject);
    procedure muDetailLastClick(Sender: TObject);
    procedure dsDetailStateChange(Sender: TObject);
    procedure qyMasterBeforeCancel(DataSet: TDataSet);
    procedure FormActivate(Sender: TObject);
    procedure qyDetailUpdateRecord(DataSet: TDataSet;
      UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
    procedure qyMasterBeforePost(DataSet: TDataSet);
    procedure qyMasterAfterScroll(DataSet: TDataSet);
    procedure qyDetailNewRecord(DataSet: TDataSet);
    procedure qyDetailBeforeOpen(DataSet: TDataSet);
    procedure qyMasterBeforeDelete(DataSet: TDataSet);
  private
    { Private declarations }
    procedure SetPopMenu;
  public
    { Public declarations }
    procedure DetailAfterInsertPost; virtual;
    procedure DetailAfterEditPost; virtual;
    function DetailBeforeDelete: Boolean; virtual;
    procedure DetailAfterDelete; virtual;
    procedure CalcAmount; virtual;
    procedure SetDescription; override;
  end;

var
  fmMasterDetail: TfmMasterDetail;

implementation

uses Main, DataModule, Loading, Procress, PublicFunction, CheckData;

var
  bDetailDelete : Boolean;

{$R *.DFM}

procedure TfmMasterDetail.qyMasterBeforeCancel(DataSet: TDataSet);
begin
  inherited;
  if qyDetail.State in [dsInsert, dsEdit] then
    qyDetail.Cancel;
end;

procedure TfmMasterDetail.qyMasterBeforePost(DataSet: TDataSet);
begin
  inherited;
  if qyDetail.State in [dsInsert, dsEdit] then
    qyDetail.Post;
end;
procedure TfmMasterDetail.qyDetailBeforeOpen(DataSet: TDataSet);
begin
  inherited;
  qyDetail.ParamByName('CompanyID').AsString := sCompanyID;
end;

procedure TfmMasterDetail.qyDetailNewRecord(DataSet: TDataSet);
begin
  inherited;
  with qyDetail do
  begin
    FieldByName('CompanyID').AsString := sCompanyID;
  end;
end;

procedure TfmMasterDetail.qyDetailBeforeInsert(DataSet: TDataSet);
begin
  inherited;
  if (qyMaster.Bof) and (qyMaster.Eof) then
    Abort;
  if qyMaster.State = dsInsert then
    qyMaster.Post;
  if qyMaster.State = dsBrowse then
    qyMaster.Edit;
end;

procedure TfmMasterDetail.qyDetailBeforeEdit(DataSet: TDataSet);
begin
  inherited;
  if (qyMaster.Bof) and (qyMaster.Eof) then
    Abort;
  if (qyDetail.Bof) and (qyDetail.Eof) then
    Abort;
  if qyMaster.State = dsInsert then
    qyMaster.Post;
  if qyMaster.State = dsBrowse then
    qyMaster.Edit;
end;

procedure TfmMasterDetail.qyDetailBeforeDelete(DataSet: TDataSet);
var
  i : Integer;
  sCriMsg : String;
begin
  if (qyMaster.Bof) and (qyMaster.Eof) then
    Abort;
  if (qyDetail.Bof) and (qyDetail.Eof) then
    Abort;
  if not BeforeDelete then
    Abort;
  if not bDetailDelete then
  begin
    MyError('眤礚

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -