📄 mdparent.pas.~8~
字号:
unit MDParent;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
DB, StdCtrls, Mask, Buttons, Menus,DBTables,DateUtils,EasyGrid, Grids,
DBGrids, ADODB;
type
TMDParentForm = class(TForm)
PrintBtn: TBitBtn;
AddBtn: TBitBtn;
DeleteBtn: TBitBtn;
EditBtn: TBitBtn;
SaveBtn: TBitBtn;
CancelBtn: TBitBtn;
CloseBtn: TBitBtn;
PriorBtn: TBitBtn;
NextBtn: TBitBtn;
SelectBtn: TBitBtn;
BillLabel: TLabel;
RefreshBtn: TBitBtn;
EasyGrid1: TEasyGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DataSource2: TDataSource;
procedure CloseBtnClick(Sender: TObject);
procedure SelectBtnClick(Sender: TObject);
procedure AddBtnClick(Sender: TObject);
procedure EditBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SaveBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure PriorBtnClick(Sender: TObject);
procedure NextBtnClick(Sender: TObject);
procedure MasterQueryAfterScroll(DataSet: TDataSet);
procedure AddRowClick(Sender: TObject);
procedure DelRowClick(Sender: TObject);
procedure ExDBGridItemChanged(Sender: TObject; Field: TField;
Value: String);
procedure ExDBGridEditButtonClick(Sender: TObject);
procedure DeleteBtnClick(Sender: TObject);
procedure RefreshBtnClick(Sender: TObject);
procedure DesignFormatItemClick(Sender: TObject);
procedure SaveFormatItemClick(Sender: TObject);
procedure NewPropItemClick(Sender: TObject);
procedure FirstItemClick(Sender: TObject);
procedure LastItemClick(Sender: TObject);
procedure DisableBillItemClick(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure SetPriceItemClick(Sender: TObject);
procedure GridMenuPopup(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
EditStatus:Integer;
///////////////////////////////////
InvtSchType:Integer;
///////////////////////////////////
////////////////////////////////////
//procedure OpenDataSet(DataSet:TDataSet);
function DataChanged:Boolean;
procedure SetDetailPKValue;
function GetPKID:Integer;
//protected
procedure SetButtons;virtual;
procedure CalcMasterFieldsValue(DataSet:TDataSet);virtual;
procedure CalcDetailFieldsValue(DataSet:TDataSet);virtual;
procedure MasterBeforePost(DataSet:TDataSet);virtual;
procedure DetailBeforePost(DataSet:TDataSet);virtual;
procedure EditItemChanged(FieldName:String);virtual;
public
{ Public declarations }
MPKCol,DPKCol1,DPKCol2,TableName,BillType:String;
procedure InitForm;virtual;
procedure UpdateTable;virtual;
procedure MasterNewRecords(DataSet:TDataSet);virtual;
procedure DetailNewRecords(DataSet:TDataSet);virtual;
/////////////////////////////////////////////
procedure SaveData;virtual;
procedure ExecSQl(SQLStr:String);
function GetSQLResult(SQlStr:String):Integer;
end;
var
MDParentForm: TMDParentForm;
implementation
uses DesignGrid;
{$R *.dfm}
procedure TMDParentForm.CalcMasterFieldsValue(DataSet:TDataSet);
begin
end;
procedure TMDParentForm.CalcDetailFieldsValue(DataSet:TDataSet);
var Qty,Price,TaxRate,DisRate,V1,V2:Double;
IncludeTax:String;
begin
{ Qty:=DetailQuery.FieldByName('Qty').AsFloat;
Price:=DetailQuery.FieldByName('Price').AsFloat;
TaxRate:=DetailQuery.FieldByName('TaxRate').AsFloat;
DisRate:=DetailQuery.FieldByName('DisRate').AsFloat;
V1:=Qty*Price*DisRate/10;
V2:=V1*TaxRate/100;
DetailQuery.FieldByName('TaxMoney').AsFloat:=V2;
DetailQuery.FieldByName('TotalMoney').AsFloat:=V1; }
end;
procedure TMDParentForm.MasterNewRecords(DataSet:TDataSet);
var I,Count:Integer;
S:String;
begin
Count:=DataSet.FieldCount-1;
for I:=0 to Count do
begin
if DataSet.Fields[I].FieldKind=fkLookup then Continue;
if S='' then Continue;
if UpperCase(S)='TODAY' then
DataSet.Fields[I].AsVariant:=Today
else
DataSet.Fields[I].AsVariant:=S;
end;
DataSet.FieldByName('Status').AsString:='1';
end;
procedure TMDParentForm.DetailNewRecords(DataSet:TDataSet);
var I,Count:Integer;
S:String;
begin
Count:=DataSet.FieldCount-1;
for I:=0 to Count do
begin
if DataSet.Fields[I].FieldKind=fkLookup then Continue;
if S='' then Continue;
if UpperCase(S)='TODAY' then
DataSet.Fields[I].AsVariant:=Today
else
DataSet.Fields[I].AsVariant:=S;
end;
if DataSet.FindField('DisRate')<>nil then
DataSet.FieldByName('DisRate').AsString:='10';
end;
procedure TMDParentForm.MasterBeforePost(DataSet:TDataSet);
var I:Integer;
begin
{ for I:=0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields[I].DataType in [ftSmallint, ftInteger, ftWord,
ftFloat, ftCurrency] then begin
if DataSet.Fields[I].IsNull then DataSet.Fields[I].Value:=0;
end;
if DataSet.Fields[I].DataType in [ftString] then begin
if ((DataSet.Fields[I].IsNull) or (Trim(DataSet.Fields[I].AsString)='')) and
(DataSet.Fields[I].Required) then begin
MessageBox(Handle,PChar(DataSet.Fields[I].DisplayLabel+' 不能为空!!'),
'信息提示',MB_OK+MB_ICONINFORMATION);
Abort;
end;
end;
end;}
end;
procedure TMDParentForm.DetailBeforePost(DataSet:TDataSet);
var I:Integer;
begin
if DataSet.FindField('Qty')<>nil then
begin
if (DataSet.FieldByName('Qty').AsFloat=0) or
(DataSet.FieldByName('Price').AsFloat=0) then
begin
MessageBeep(0);
Abort;
end;
end;
//---------------------------------
//MasterBeforePost(DataSet);
end;
function TMDParentForm.GetPKID:Integer;
var I:Integer;
begin
{DM.GetPKID.Params[0].AsString:='1';
DM.GetPKID.Params[1].AsString:=TableName;
DM.GetPKID.ExecProc;
Result:=DM.GetPKID.Params[2].AsInteger;}
end;
procedure TMDParentForm.SelectBtnClick(Sender: TObject);
Var P:TPoint;
begin
{P:=Point(SelectBtn.Left,SelectBtn.Top+SelectBtn.Height);
P:=ClientToScreen(P);
PopupMenu.Popup(P.X,P.Y);}
end;
procedure TMDParentForm.ExecSQl(SQLStr:String);
begin
{try
with TmpQuery do
begin
Close;
Sql.Add(SQLStr);
ExecSql;
end;
finally
end;}
end;
function TMDParentForm.GetSQLResult(SQlStr:String):Integer;
begin
Result:=0;
{try
with DM.TmpQuery do
begin
Close;
Sql.Add(SQLStr);
Open;
end;
Result:=DM.TmpQuery.Fields[0].AsInteger;
finally
end; }
end;
procedure TMDParentForm.UpdateTable;
begin
end;
procedure TMDParentForm.PriorBtnClick(Sender: TObject);
begin
ADOQuery1.Prior;
end;
procedure TMDParentForm.NextBtnClick(Sender: TObject);
begin
ADOQuery2.Next;
end;
procedure TMDParentForm.SetButtons();
var Count:Integer;
begin ///EditStatus 0:Browse 1:Append 2:Edit
Count:=ADOQuery1.RecordCount;
DataSource1.AutoEdit:=(EditStatus>0);
DataSource1.AutoEdit:=(EditStatus>0);
AddBtn.Enabled:=(EditStatus=0);
EditBtn.Enabled:=((EditStatus=0) and (Count>0));
DeleteBtn.Enabled:=((EditStatus=0) and (Count>0));
SaveBtn.Enabled:=(EditStatus>0);
CancelBtn.Enabled:=(EditStatus>0);
RefreshBtn.Enabled:=(EditStatus=0);
//////////////////////////////////////////////////
//SelectBtn.Enabled:=((EditStatus=0) and (Count>0));
{FirstItem.Enabled:=((EditStatus=0) and (Count>0));
LastItem.Enabled:=((EditStatus=0) and (Count>0));
QueryItem.Enabled:=(EditStatus=0);
ExportItem.Enabled:=(EditStatus=0);
PrevItem.Enabled:=(EditStatus=0);
ReportItem.Enabled:=(EditStatus=0);
DesignFormatItem.Enabled:=(EditStatus=0);
SaveFormatItem.Enabled:=(EditStatus=0);}
//BillPropItem.Enabled:=(EditStatus>0);
//DisableBillItem.Enabled:=(EditStatus=2);
//ReferBillItem.Enabled:=(EditStatus>0);
PrintBtn.Enabled:=((EditStatus=0) and (Count>0));
PriorBtn.Enabled:=((EditStatus=0) and (Count>0));
NextBtn.Enabled:=((EditStatus=0) and (Count>0));
end;
procedure TMDParentForm.CloseBtnClick(Sender: TObject);
begin
Close;
end;
procedure TMDParentForm.AddBtnClick(Sender: TObject);
begin
ADOQuery1.Append;
EditStatus:=1;
SetButtons;
end;
procedure TMDParentForm.EditBtnClick(Sender: TObject);
begin
EditStatus:=2;
SetButtons;
end;
procedure TMDParentForm.CancelBtnClick(Sender: TObject);
begin
if ADOQuery2.State in [dsInsert,dsEdit] then ADOQuery2.Cancel;
if ADOQuery1.State in [dsInsert,dsEdit] then ADOQuery1.Cancel;
ADOQuery2.CancelUpdates;
ADOQuery1.CancelUpdates;
EditStatus:=0;
SetButtons;
end;
procedure TMDParentForm.SetDetailPKValue;
var I,Count,Value,TmpValue,MaxRecId,TmpRecId:Integer;
begin
{try
Count:=DetailQuery.RecordCount;
DetailQuery.DisableControls;
if EditStatus=1 then begin
Value:=GetPKID;
if MasterQuery.State=dsBrowse then MasterQuery.Edit;
MasterQuery.FieldByName(MPKCol).AsInteger:=Value;
end else if EditStatus=2 then begin
Value:=MasterQuery.FieldByName(MPKCol).AsInteger;
end;
MaxRecId:=1;
DetailQuery.First;
for I:=1 to Count do
begin
TmpValue:=DetailQuery.FieldByName(DPKCol1).AsInteger;
TmpRecId:=DetailQuery.FieldByName(DPKCol2).AsInteger;
if TmpValue=0 then
begin
DetailQuery.Edit;
DetailQuery.FieldByName(DPKCol1).AsInteger:=Value;
DetailQuery.FieldByName(DPKCol2).AsInteger:=MaxRecId;
DetailQuery.Post;
MaxRecId:=MaxRecId+1;
end else if MaxRecId<=TmpRecId then MaxRecId:=TmpRecId+1;
DetailQuery.Next;
end;
finally
DetailQuery.EnableControls;
end; }
end;
function TMDParentForm.DataChanged:Boolean;
begin
{if MasterQuery.State=dsInsert then
begin
if MasterQuery.Modified then MasterQuery.Post
end;
if (MasterQuery.State=dsEdit) then MasterQuery.Post;
if (DetailQuery.State in [dsInsert,dsEdit]) then DetailQuery.Post;
Result:=(MasterQuery.UpdatesPending or DetailQuery.UpdatesPending);}
end;
procedure TMDParentForm.SaveBtnClick(Sender: TObject);
var t1,t2:Integer;
begin
t1:=GetTickCount;
//if not DataChanged then
//begin
// MessageBox(Handle,'请填写单据数据!!','信息提示',MB_OK+MB_ICONINFORMATION);
// Exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -