📄 masterdetail.~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 + -