📄 udep.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 + -