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

📄 udep.pas

📁 这是一个门禁系统的应用程序,用 delphi编写,希望与大家交流.
💻 PAS
字号:
unit udep;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, XPMenu, StdCtrls, Mask, DBCtrls, Grids, DBGrids, DB, ADODB,
  DBGridEh, ComCtrls, ExtCtrls;

type
  TfrmDep = class(TForm)
    Label1: TLabel;
    btnAdd: TButton;
    btnEdit: TButton;
    btnUp: TButton;
    btnDown: TButton;
    btnDel: TButton;
    btnTrs: TButton;
    btnClose: TButton;
    dsdep: TDataSource;
    aqDep: TADOQuery;
    pnlSDep: TPanel;
    pnlDep: TPanel;
    dgDep: TDBGridEh;
    dbedep: TDBEdit;
    dbeDes: TDBEdit;
    Label3: TLabel;
    Label2: TLabel;
    dgSDep: TDBGridEh;
    deSDep: TDBEdit;
    dcbDep: TDBComboBox;
    Label6: TLabel;
    Label5: TLabel;
    deDes: TDBEdit;
    Label4: TLabel;
    rbDep: TRadioButton;
    rbSDep: TRadioButton;
    procedure btnEditClick(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure btnUpClick(Sender: TObject);
    procedure btnDownClick(Sender: TObject);
    procedure btnDelClick(Sender: TObject);
    procedure btnTrsClick(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure dsdepDataChange(Sender: TObject; Field: TField);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure rbDepClick(Sender: TObject);
    procedure rbSDepClick(Sender: TObject);
  private
    { Private declarations }
    procedure SetState(aState: Boolean = true);
    procedure UpdateData(aDepChecked: Boolean = true);
  public
    { Public declarations }
  end;

var
  frmDep: TfrmDep;

implementation

uses udata, uglobal, ustainfo;

var
  oDep: string;

{$R *.dfm}

procedure TfrmDep.SetState(aState: Boolean);
var
  pnlCur: TPanel;
  i: Integer;
begin
  rbDep.Enabled := aState;
  rbSDep.Enabled := aState;
  if rbDep.Checked then
  begin
    pnlCur := pnlDep;
    dgDep.Enabled := aState;
  end
  else
  begin
    pnlCur := pnlSDep;
    dgSDep.Enabled := aState;
  end;

  for i := 0 to pnlCur.ControlCount - 1 do
    if pnlCur.Controls[i] is TDBEdit then
      TDBEdit(pnlCur.Controls[i]).ReadOnly := aState
    else if pnlCur.Controls[i] is TDBComBoBox then
      TDBComBoBox(pnlCur.Controls[i]).ReadOnly := aState
    else if pnlCur.Controls[i] is TDBMemo then
      TDBMemo(pnlCur.Controls[i]).ReadOnly := aState;

  if aState then
  begin
    for i := 0 to pnlCur.ControlCount - 1 do
      if pnlCur.Controls[i] is TDBEdit then
        TDBEdit(pnlCur.Controls[i]).Color := clSkyBlue
      else if pnlCur.Controls[i] is TDBComBoBox then
        TDBComBoBox(pnlCur.Controls[i]).Color := clSkyBlue
      else if pnlCur.Controls[i] is TDBMemo then
        TDBMemo(pnlCur.Controls[i]).Color := clSkyBlue;

    btnadd.Caption := '添  加';
    btnEdit.Caption := '更  新';
    btnUp.Visible := true;
    btnDown.Visible := true;
    btnDel.Visible := true;
  end
  else
  begin
    if rbDep.Checked then dbeDep.SetFocus else deSDep.SetFocus;
    for i := 0 to pnlCur.ControlCount - 1 do
      if pnlCur.Controls[i] is TDBEdit then
        TDBEdit(pnlCur.Controls[i]).Color := clWindow
      else if pnlCur.Controls[i] is TDBComBoBox then
        TDBComBoBox(pnlCur.Controls[i]).Color := clWindow
      else if pnlCur.Controls[i] is TDBMemo then
        TDBMemo(pnlCur.Controls[i]).Color := clWindow;

    if aqDep.State = dsInsert then
      btnadd.Caption := '提  交'
    else
      btnadd.Caption := '确  定';
    btnedit.Caption := '取  消';
    btnUp.Visible := false;
    btnDown.Visible := false;
    btnDel.Visible := false;
  end;
end;

procedure TfrmDep.UpdateData(aDepChecked: Boolean = true);
var
  aqExists, aqOrder: TADOQuery;
begin
  if aDepChecked then
  begin
    if dbedep.Text <> '' then
    begin
      if btnadd.Caption = '提  交' then
      begin
        aqExists := TADOQuery.Create(self);
        aqExists.Clone(aqDep, ltReadOnly);
        if aqExists.Locate('dep', dbeDep.Text, []) then
        begin
          MessageBox(self.Handle, '此部门已存在!', '提示', mb_IconInformation + mb_Ok);
          dbedep.SetFocus;
          Abort;
        end
        else
        begin
          aqOrder := TADOquery.Create(nil);
          Try
            aqOrder.Connection:= dmper.acper;
            aqOrder.SQL.Text := 'update dept set ornum=ornum+1';
            aqOrder.ExecSQL;
          finally
            FreeAndNil(aqOrder);
          end;
          aqDep.Post;
          aqDep.UpdateBatch();
          SetState(true);
        end;
        FreeAndNil(aqExists);
      end
      else
      begin
        aqDep.Post;
        aqDep.UpdateBatch();
        if oDep <> '' then
        begin
          dmPer.ExecQuery('update stainfo set dep=' + QuotedStr(dbeDep.Text) +
                          ' where dep = ' + QuotedStr(oDep));
          dmPer.ExecQuery('update sdep set dep=' + QuotedStr(dbeDep.Text) +
                          ' where dep = ' + QuotedStr(oDep));
          oDep := '';
        end;
        SetState(true);
      end;
    end
    else
    begin
      MessageBox(self.Handle, '请输入部门名!', '提示', mb_IconInformation + mb_Ok);
      dbedep.SetFocus;
      Abort;
    end;
  end
  else
  begin
    if deSDep.Text <> '' then
    begin
      if btnadd.Caption = '提  交' then
      begin
        aqExists := TADOQuery.Create(self);
        aqExists.Clone(aqDep, ltReadOnly);
        if aqExists.Locate('sdep', deSDep.Text, []) then
        begin
          MessageBox(self.Handle, '此单位已存在!', '提示', mb_IconInformation + mb_Ok);
          deSDep.SetFocus;
          Abort;
        end
        else
        begin
          aqOrder := TADOquery.Create(nil);
          Try
            aqOrder.Connection:= dmper.acper;
            aqOrder.SQL.Text := 'update sdep set ornum=ornum+1';
            aqOrder.ExecSQL;
          finally
            FreeAndNil(aqOrder);
          end;
          aqDep.Post;
          aqDep.UpdateBatch();
          SetState(true);
        end;
        FreeAndNil(aqExists);
      end
      else
      begin
        aqDep.Post;
        aqDep.UpdateBatch();
        if oDep <> '' then
        begin
          dmPer.ExecQuery('update stainfo set sdep=' + QuotedStr(deSDep.Text) +
                          ' where sdep = ' + QuotedStr(oDep));
          oDep := '';
        end;
        SetState(true);
      end;
    end
    else
    begin
      MessageBox(self.Handle, '请输入单位名!', '提示', mb_IconInformation + mb_Ok);
      deSDep.SetFocus;
      Abort;
    end;
  end;
  aqDep.Requery();
end;

procedure TfrmDep.FormShow(Sender: TObject);
begin
  rbDepClick(Sender);

  dmPer.OpenDep;
  while not dmPer.aqDep.Eof do
  begin
    dcbDep.Items.Append(dmPer.aqDep.FieldByName('dep').AsString);
    dmPer.aqDep.Next;
  end;
  if dcbDep.Items.Count > 0 then dcbDep.ItemIndex := 0;
end;

procedure TfrmDep.rbDepClick(Sender: TObject);
begin
  pnlDep.BringToFront;
  SetState(true);
  deSDep.DataField := '';
  dmPer.OpenQuery(aqDep, 'select * from dept order by ornum');
  dgDep.SetFocus;
end;

procedure TfrmDep.rbSDepClick(Sender: TObject);
begin
  dmPer.OpenDep;
  dcbDep.Clear;
  while not dmPer.aqDep.Eof do
  begin
    dcbDep.Items.Append(dmPer.aqDep.FieldByName('dep').AsString);
    dmPer.aqDep.Next;
  end;
  pnlSDep.BringToFront;
  SetState(true);
  dmPer.OpenQuery(aqDep, 'select * from sdep order by dep, ornum');
  deSDep.DataSource := dsDep;
  deSDep.DataField := 'sdep';
  dgSDep.SetFocus;
end;

procedure TfrmDep.btnAddClick(Sender: TObject);
begin
  if btnadd.Caption = '添  加' then
  begin
    aqdep.Append;
    SetState(false);
  end
  else
    UpdateData(rbDep.Checked);
end;

procedure TfrmDep.btnEditClick(Sender: TObject);
begin
  if btnedit.Caption ='更  新' then
  begin
    if rbDep.Checked then oDep := dcbDep.Text else oDep := deSDep.Text;
    aqDep.Edit;
    SetState(false);
  end
  else
  begin
    aqDep.Cancel;
    aqdep.CancelBatch();
    SetState(true);
  end;
end;

procedure TfrmDep.btnUpClick(Sender: TObject);
var
  id, ornum: integer;
  tName: string;
begin
  tName := 'dept';
  if rbSDep.Checked then tName := 'sdep';
  id := aqdep.FieldByName('id').AsInteger;
  ornum := aqdep.FieldByName('ornum').AsInteger - 1;
  aqDep.Close;
  aqDep.SQL.Clear;
  aqDep.sql.add('update '+tName+' set [ornum]=ornum-1 where id=' + IntToStr(id));
  aqDep.ExecSQL;
  aqDep.Close;
  aqDep.SQL.Clear;
  aqDep.sql.add('update '+tName+' set [ornum]=ornum+1 where id<>' + IntToStr(id) + ' and ornum=' + IntToStr(ornum));
  aqDep.ExecSQL;
  aqDep.Close;
  aqDep.SQL.Clear;
  aqDep.sql.Text := 'select * from '+tName+' order by ornum';
  aqDep.Open;
  aqDep.Locate('id', id, []);
end;

procedure TfrmDep.btnDownClick(Sender: TObject);
var
  id, ornum: integer;
  tName: string;
begin
  tName := 'dept';
  if rbSDep.Checked then tName := 'sdep';
  id := aqDep.FieldByName('id').AsInteger;
  ornum := aqDep.FieldByName('ornum').AsInteger + 1;
  aqDep.Close;
  aqDep.SQL.Clear;
  aqDep.sql.add('update '+tName+' set [ornum]=ornum+1 where id=' + IntToStr(id));
  aqDep.ExecSQL;
  aqDep.Close;
  aqDep.SQL.Clear;
  aqDep.sql.add('update '+tName+' set [ornum]=ornum-1 where id<>' + IntToStr(id) + ' and ornum=' + IntToStr(ornum));
  aqDep.ExecSQL;
  aqDep.Close;
  aqDep.SQL.Clear;
  aqDep.sql.Text := 'select * from '+tName+' order by ornum';
  aqDep.Open;
  aqDep.Locate('id', id, []);
end;

procedure TfrmDep.btnDelClick(Sender: TObject);
  procedure DelStaInfo(aDep: string; IsDep: Boolean = true);
  var
    aqDelInfo: TADOQuery;
    i: Integer;
    sDep: string;
  begin
    if IsDep then sDep := 'dep' else sDep := 'sdep';
    aqDelInfo := TADOQuery.Create(nil);
    dmPer.OpenQuery(aqDelInfo, 'select image from stainfo where '+sDep+'=' + QuotedStr(aDep));
    if not aqDelInfo.Eof then
      for i := 0 to aqDelInfo.RecordCount - 1 do
        if FileExists(sPath + 'images\' + aqDelInfo.Fieldbyname('image').AsString) then
          DeleteFile(sPath + 'images\' + aqDelInfo.Fieldbyname('image').AsString);
    dmPer.ExecQuery(aqDelInfo, 'delete from stainfo where dep=' + QuotedStr(aDep));
    FreeAndNil(aqDelInfo);
  end;

  procedure DelSDepInfo(aDep: string);
  var
    aqDelInfo, aqOrder: TADOQuery;
    ornum: Integer;
  begin
    aqDelInfo := TADOQuery.Create(nil);
    dmPer.OpenQuery(aqDelInfo, 'select sdep from sdep where dep=' + QuotedStr(aDep) + ' order by ornum');
    while not aqDelInfo.Eof do
    begin
      aqOrder := TADOQuery.Create(nil);
      dmPer.OpenQuery(aqOrder, 'select ornum from sdep where sdep=' + QuotedStr(aqDelInfo.FieldByName('sdep').AsString));
      if aqOrder.Eof then
      begin
        FreeAndNil(aqOrder);
        Break;
      end;
      ornum := aqOrder.FieldByName('ornum').AsInteger;
      aqOrder.SQL.Text := 'update sdep set [ornum]=ornum-1 where ornum>' + IntToStr(ornum);
      aqOrder.ExecSQL;
      aqDelInfo.Next;
      FreeAndNil(aqOrder);  
    end;
    dmPer.ExecQuery(aqDelInfo, 'delete from sdep where dep=' + QuotedStr(aDep));
    FreeAndNil(aqDelInfo);
  end;

var
  ornum: integer;
  dStr, tName: string;
begin
  dStr := '真的要删除此部门么?';
  tName := 'dept';
  if rbSDep.Checked then
  begin
    dStr := '真的要删除此单位么?';
    tName := 'sdep';
  end;

  if MessageBox(handle, PChar(dStr), '提示', mb_IconQuestion + mb_YesNo) = idYes then
  begin
    if rbDep.Checked then
    begin
      DelStaInfo(aqDep.FieldByName('dep').AsString, true);
      DelSDepInfo(aqDep.FieldByName('dep').AsString);
    end
    else
      DelStaInfo(aqDep.FieldByName('sdep').AsString, false); 
    ornum := aqDep.FieldByName('ornum').AsInteger;
    aqDep.Delete;
    aqDep.UpdateBatch();
    aqDep.Close;
    aqDep.SQL.Clear;
    aqDep.sql.add('update '+tName+' set [ornum]=ornum-1 where ornum>' + IntToStr(ornum));
    aqDep.ExecSQL;
    aqDep.Close;
    aqDep.SQL.Clear;
    aqDep.sql.Text := 'select * from '+tName+' order by ornum';
    aqDep.Open;
  end;
end;

procedure TfrmDep.btnTrsClick(Sender: TObject);
begin
  if btntrs.Caption = '半透明' then
  begin
    self.AlphaBlend := true;
    self.AlphaBlendValue := 125;
    btntrs.Caption := '还  原';
  end
  else
  begin
    self.AlphaBlend := false;
    btntrs.Caption := '半透明';
  end;   
end;

procedure TfrmDep.btnCloseClick(Sender: TObject);
begin
  Close();
end;

procedure TfrmDep.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if aqDep.State in [dsInsert, dsEdit] then
  begin
    if MessageBox(self.Handle, '还有信息没有保存,确定要退出吗?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
    begin
      aqDep.Cancel;
      aqDep.CancelBatch();
      CanClose := true;
    end
    else
      CanClose := false;
  end
  else
    CanClose := true;
end;

procedure TfrmDep.dsdepDataChange(Sender: TObject; Field: TField);
begin
  if (aqDep.RecNo = 1) or (aqDep.RecordCount = 0) then
    btnup.Enabled := false
  else
    btnup.Enabled := true;

  if (aqDep.RecNo = aqDep.RecordCount) or (aqDep.RecordCount = 0) then
    btndown.Enabled := false
  else
    btndown.Enabled := true;

  if not (aqDep.State in [dsInsert, dsEdit]) then
    btnEdit.Enabled := aqDep.RecordCount <> 0
  else
    btnEdit.Enabled := true;
  btnDel.Enabled := aqDep.RecordCount <> 0;
end;

procedure TfrmDep.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(frmStaInfo) then
  begin
    frmStainfo.DrawTree;
    if frmStainfo.pcSta.ActivePageIndex = 0 then
      frmStainfo.tsStainfoShow(Sender);
  end;
end;

end.

⌨️ 快捷键说明

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