📄 ubaseinfo.pas
字号:
unit uBaseInfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, ExtCtrls, dxExEdtr, dxCntner, dxTL, dxDBCtrl,
dxDBGrid, DB, DBClient, Provider, uDM, ImgList, ActnList, dxGrClms,
dxDBTLCl, dxGrClEx, uPub_Resource;
type
TBaseInfo = class(TForm)
pnlClass: TPanel;
pnlmain: TPanel;
cbMain: TCoolBar;
tbMain: TToolBar;
Cell: TdxDBGrid;
cdsItem: TClientDataSet;
dsItem: TDataSource;
dspItem: TDataSetProvider;
tvClass: TTreeView;
Actions: TActionList;
actClose: TAction;
actAdd: TAction;
actDel: TAction;
actSave: TAction;
Img_Main: TImageList;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
procedure FormShow(Sender: TObject);
procedure tvClassChange(Sender: TObject; Node: TTreeNode);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure actSaveExecute(Sender: TObject);
procedure actCloseExecute(Sender: TObject);
procedure actAddExecute(Sender: TObject);
procedure actDelExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FTableName: string;
{ Private declarations }
protected
function IsDataChanged:boolean;virtual;
procedure GetList; virtual;
procedure SetTableName(const Value: string);
procedure Save; virtual;
procedure Add; virtual;
procedure Del; virtual;
function GetID:string;virtual;
function CheckBeforeDelete:boolean;virtual;
procedure AddTeamLookupColumn; virtual;
function SaveChangedData:boolean; virtual;
procedure OnTeamCloseUp(Sender: TObject; var Text: String;
var Accept: Boolean);
public
{ Public declarations }
property TableName:string read FTableName write SetTableName;
end;
var
BaseInfo: TBaseInfo;
implementation
uses uGlobal;
{$R *.dfm}
{ TBaseInfo }
procedure TBaseInfo.GetList;
begin
if FTableName='' then exit;
cdsItem.DisableControls ;
try
if cdsItem.Active then cdsItem.Close ;
cdsItem.CommandText :='SELECT * FROM ' + FTableName ;
cdsItem.Active:=True;
CreateCellCols(cell, cdsItem);
if FTableName =CS_Table_Employee then
AddTeamLookupColumn;
SetAllColumnsCanEdit(cell, True);
finally
cdsItem.EnableControls ;
SetCellAutoWidth(Cell);
end;
end;
procedure TBaseInfo.FormShow(Sender: TObject);
begin
tvClass.Items [0].Expanded :=True;
tvClass.Select(tvClass.Items [1]) ;
tvClassChange(tvClass, tvClass.Items [1]);
end;
procedure TBaseInfo.tvClassChange(Sender: TObject; Node: TTreeNode);
begin
if not SaveChangedData then Abort;
if Node=nil then exit;
if Node.IsFirstNode then exit;
if Node.Text ='员工' then
FTableName:=CS_Table_Employee
else if Node.Text ='组' then
FTableName:=CS_Table_Team
else
FTableName:='';
if FTableName<>'' then
GetList;
end;
procedure TBaseInfo.SetTableName(const Value: string);
begin
FTableName := Value;
end;
function TBaseInfo.IsDataChanged: boolean;
begin
Result:=False;
if not CheckDataSet(cdsItem) then exit;
cdsItem.CheckBrowseMode ;
Result:= (cdsItem.ChangeCount >0) ;
end;
function TBaseInfo.SaveChangedData: boolean;
var
iResult:Cardinal;
begin
Result:=True;
if IsDataChanged then
begin
iResult:=Application.MessageBox(pchar('数据已被修改,是否要保存!'), pchar(Application.Title ), MB_YESNOCANCEL + MB_ICONQUESTION );
try
Case iResult of
IDYES: Save;
IDCANCEL: Result:=False;
else
end;
except
Result:=False;
end;
end;
end;
procedure TBaseInfo.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=SaveChangedData;
end;
procedure TBaseInfo.Save;
begin
if not IsDataChanged then exit;
Dm.SetInfoByTableName (FTableName, cdsItem.Delta ,null);
DM.RefreshSysData;
end;
procedure TBaseInfo.actSaveExecute(Sender: TObject);
begin
Save;
GetList;
end;
procedure TBaseInfo.actCloseExecute(Sender: TObject);
begin
Close;
end;
procedure TBaseInfo.actAddExecute(Sender: TObject);
begin
Add;
end;
procedure TBaseInfo.actDelExecute(Sender: TObject);
begin
Del;
end;
procedure TBaseInfo.Add;
begin
if not CheckDataSet(cdsItem) then exit;
cdsItem.Append ;
end;
procedure TBaseInfo.Del;
begin
if not CheckDataSet(cdsItem) then exit;
if not CheckBeforeDelete then exit;
cdsItem.Delete ;
end;
procedure TBaseInfo.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TBaseInfo.AddTeamLookupColumn;
var
DBColumn: TdxDBTreeListColumn;
begin
DBColumn:= Cell.FindColumnByFieldName(CS_TeamNameFieldName);
if DBColumn<>nil then
DBColumn.Free;
DBColumn := Cell.CreateColumn(TdxDBGridExtLookupColumn) as TdxDBGridExtLookupColumn;
with TdxDBGridExtLookupColumn(DBColumn) do
begin
FieldName:=CS_TeamNameFieldName;
DBGridLayout:=Pub_Resource.layTeam ;
PickListField :=CS_TeamNameFieldName;
Caption:=CS_TeamNameFieldName;
OnCloseUp :=OnTeamCloseUp;
end;
end;
procedure TBaseInfo.OnTeamCloseUp(Sender: TObject; var Text: String;
var Accept: Boolean);
begin
if not Accept then exit;
if not CheckDataSet(cdsItem) then exit;
cdsItem.FieldByName(CS_TeamIDFieldName).AsString :=DM.cdsTeam.FieldByName(CS_KeyFieldName).AsString ;
end;
function TBaseInfo.CheckBeforeDelete: boolean;
var
sID:string;
begin
Result:=True;
sID:=GetID;
if sID='' then exit;
if FTableName=CS_Table_Team then
begin
if DM.RecordExists('SELECT * FROM ' + CS_Table_Employee
+ ' WHERE ' + CS_TeamIDFieldName + ' = ' + sID ) then
begin
Result:=False;
Application.MessageBox(pchar(CS_Table_Team + '已在使用中,不能删除!'), pchar(Application.Title ), MB_OK + MB_ICONERROR );
end;
end else
if FTableName=CS_Table_Employee then
begin
if DM.RecordExists('SELECT * FROM ' + CS_Table_PayDetail
+ ' WHERE ' + CS_EmpIDFieldName + ' = ' + sID ) then
begin
Result:=False;
Application.MessageBox(pchar(CS_Table_Employee + '已在使用中,不能删除!'), pchar(Application.Title ), MB_OK + MB_ICONERROR );
end;
end;
end;
function TBaseInfo.GetID: string;
begin
Result:='';
if not CheckDataSet(cdsItem) then exit;
with cdsItem do
begin
if RecordCount=0 then exit;
if FindField(CS_KeyFieldName)<>nil then
Result:=FindField(CS_KeyFieldName).AsString;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -