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

📄 ubaseinfo.pas

📁 简单易用的按件按时计工资管理系统
💻 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 + -