?? maindlg.pas
字號:
//一般來講,在對一個表做大的修改前都需要創建一個臨時表,以保存備份
//根據用戶需要可以從SQL SERVER中恢復該數據表或者在程序中編寫SQL 語句
//將備份表的數據重新讀入組織機構編碼表中
adocommand1.CommandText:='delete from 組織機構編碼表';
adocommand1.Execute;
//清空要操作的表
adocommand1.CommandText:='insert into 組織機構編碼表([內部編號],[類別],[AbsIndex],[ItemIndex],[ItemLevel],[ParentIndex],[類別號],[單位編號],[單位名稱]) values(''300'',''省醫藥集團'',''0'',''0'',''0'',''-1'',''0'',''0'',''省醫藥集團'')';
adocommand1.Execute;
//直接插入首項數據
for i:=2 to treeview1.Items.Count do
//用treeview1.items.count可以計算樹控件中所有的節點數目
begin
pnode:=treeview1.Items.Item[i-1];
//依次指向樹形圖的所有節點
name:=pnode.Text;
number:=inttostr(300+pnode.AbsoluteIndex);
//內部編碼設為從300開始,也可以設為讀者愿意使用的任何整數
absindex:=inttostr(pnode.AbsoluteIndex);
itemindex:=inttostr(pnode.Index);
parentindex:=inttostr(pnode.Parent.AbsoluteIndex);
//為節點各項參數讀入數據
s:=inttostr(pnode.Index);
if length(s)=1 then
s:='0'+s
else
s:=s;
order:=s;
//取子項的本級編號Index,也就是類別號
//由于類別號是兩位整數,而本級編號小于10的節點的編號是1位整數
//對其進行編碼,把例如1的index轉為字符串01
//-----------------------------------------------------------
//某一個節點的編號實際上是由它自己的類別號,也就是它在本級中的INDEX
//前面加上父節點的編號組成,而父節點的編號也可以用這種方法依次推出
while pnode.Parent<>nil do
begin
sp:=inttostr(pnode.Parent.Index);
if length(sp)=1 then
sp:='0'+sp
else
sp:=sp;
s:=sp+s;
pnode:=pnode.Parent;
//節點的編號等于類別號前面加上它的父節點編號,也等于加上它的所有父節點的類別號
//這里的加是指字符串加
//取父節點的類別號,并一直追溯到最頂層的主節點,從而構成一個節點的完整編號
end;
code:=copy(s,2,length(s));
//由于首項的編號為0,程序中將它轉為了00,因此需要去掉一個零
temp:=length(code)-1;
temp:=round(temp/2);
itemlevel:=inttostr(temp);
//根據編號的長度來計算它的所屬級別,也就是它的itemlevel
adocommand1.CommandText:='insert into 組織機構編碼表([內部編號],[類別],[AbsIndex],[ItemIndex],[ItemLevel],[ParentIndex],[類別號],[單位編號],[單位名稱]) values('''+number+''','''+name+''','''+absindex+''','''+itemindex+''','''+itemlevel+''','''+parentindex+''','''+order+''','''+code+''','''+name+''')';
adocommand1.Execute;
//向表中插入新記錄
end;
adocommand1.CommandText:='set IDENTITY_insert 組織機構編碼表 off';
adocommand1.Execute;
//關掉組織機構編碼表的插入許可
adocommand1.Commandtext:='drop table zztemp';
adocommand1.Execute;
//刪除臨時表
MessageBox(0,'對機構所作的修改已經保存成功!','成功',MB_OK);
//刷新樹形圖的顯示
treeview1.Items.Clear;
adoquery1.Active:=false;
adoquery1.Active:=true;
button12.Click;
end;
//------------------------------------------------------------
//------------------機構信息管理功能的實現--------------------
//-------------------------------------------------------------
procedure Tmain.TabSheet2Show(Sender: TObject);
//顯示機構信息
begin
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select 內部編號,單位編號,單位名稱,拼音編碼,單位地址,');
adoquery2.SQL.Add('單位電話號碼,開戶銀行,帳號,開戶全稱 from 組織機構編碼表');
adoquery2.Open;
//設置列寬度
dbgrid1.Columns[0].Width:=64;
dbgrid1.Columns[1].Width:=64;
dbgrid1.Columns[2].Width:=192;
dbgrid1.Columns[3].Width:=64;
dbgrid1.Columns[4].Width:=256;
dbgrid1.Columns[5].Width:=128;
dbgrid1.Columns[6].Width:=128;
dbgrid1.Columns[7].Width:=128;
dbgrid1.Columns[8].Width:=128;
end;
procedure Tmain.Button8Click(Sender: TObject);
begin
//查詢機構信息
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select 內部編號,單位編號,單位名稱,拼音編碼,單位地址,');
adoquery2.SQL.Add('單位電話號碼,開戶銀行,帳號,開戶全稱 from 組織機構編碼表');
adoquery2.SQL.Add('where 單位名稱 like ''%'+edit31.Text+'%''');
adoquery2.Open;
//設置查詢結果顯示時的列寬度
dbgrid1.Columns[0].Width:=64;
dbgrid1.Columns[1].Width:=64;
dbgrid1.Columns[2].Width:=192;
dbgrid1.Columns[3].Width:=64;
dbgrid1.Columns[4].Width:=256;
dbgrid1.Columns[5].Width:=128;
end;
//--------------------------------------------------------------
//-----------------------職員信息管理功能的實現-----------------
//----------------------職員信息維護----------------------------
procedure Tmain.DBGrid2CellClick(Column: TColumn);
//將用戶在dbgrid上所選取的職員的全部信息添加到職員信息維護窗體中的相應文本框中
begin
adotable1.Refresh;
edit5.Text:=dbgrid2.Fields[1].AsString;
edit6.Text:=dbgrid2.Fields[2].AsString;
edit7.Text:=dbgrid2.Fields[3].AsString;
combobox1.Text:=dbgrid2.Fields[4].AsString;
edit8.Text:=dbgrid2.Fields[5].AsString;
edit9.Text:=dbgrid2.Fields[6].AsString;
edit10.Text:=dbgrid2.Fields[7].AsString;
combobox2.Text:=dbgrid2.Fields[8].AsString;
edit11.Text:=dbgrid2.Fields[9].AsString;
edit12.Text:=dbgrid2.Fields[10].AsString;
edit13.Text:=dbgrid2.Fields[11].AsString;
combobox3.Text:=dbgrid2.Fields[12].AsString;
edit14.Text:=dbgrid2.Fields[13].AsString;
edit15.Text:=dbgrid2.Fields[14].AsString;
edit16.Text:=dbgrid2.Fields[15].AsString;
edit17.Text:=dbgrid2.Fields[16].AsString;
edit18.Text:=dbgrid2.Fields[18].AsString;
edit19.Text:=dbgrid2.Fields[17].AsString;
edit20.Text:=dbgrid2.Fields[19].AsString;
edit21.Text:=dbgrid2.Fields[20].AsString;
//允許修改,插入,刪除記錄
button1.Enabled:=true;
button2.Enabled:=true;
button3.Enabled:=true;
end;
//--------------修改所選取的職員的數據-------------
procedure Tmain.Button1Click(Sender: TObject);
var
intNum:integer;
begin
//讀取選取的職員的內部編號
intNum:=dbgrid2.Fields[0].AsInteger;
//更新數據表
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('update 職員基本信息表 set 職員編號='''+edit5.Text+'''');
adoquery2.SQL.Add(',姓名='''+edit6.Text+'''');
adoquery2.SQL.Add(',姓名簡碼='''+edit7.Text+'''');
adoquery2.SQL.Add(',性別='''+combobox1.text+'''');
adoquery2.SQL.Add(',出生日期='''+edit8.Text+'''');
adoquery2.SQL.Add(',年齡='''+edit9.Text+'''');
adoquery2.SQL.Add(',籍貫='''+edit10.Text+'''');
adoquery2.SQL.Add(',民族='''+combobox2.Text+'''');
adoquery2.SQL.Add(',文化程度='''+edit11.Text+'''');
adoquery2.SQL.Add(',畢業學校='''+edit12.Text+'''');
adoquery2.SQL.Add(',健康狀況='''+edit13.Text+'''');
adoquery2.SQL.Add(',婚姻狀況='''+combobox3.Text+'''');
adoquery2.SQL.Add(',身份證號碼='''+edit14.Text+'''');
adoquery2.SQL.Add(',家庭電話='''+edit15.Text+'''');
adoquery2.SQL.Add(',辦公電話='''+edit16.Text+'''');
adoquery2.SQL.Add(',手機='''+edit17.Text+'''');
adoquery2.SQL.Add(',電子郵件地址='''+edit19.Text+'''');
adoquery2.SQL.Add(',職工賬號='''+edit18.Text+'''');
adoquery2.SQL.Add(',單位編號='''+edit20.Text+'''');
adoquery2.SQL.Add(',備注='''+edit21.Text+'''');
adoquery2.SQL.Add(' where 內部編號='''+inttostr(intNum)+'''');
adoquery2.SQL.Add('select 姓名 from 職員基本信息表 where 內部編號='''+inttostr(intNum)+'''');
adoquery2.Open;
//顯示更新了數據的職員名,并發出更新成功的消息
label58.Caption:=adoquery2.fieldbyname('姓名').asstring+'的信息已經被成功修改';
//刷新dbgrid中的數據
adotable1.Active:=false;
adotable1.Active:=true;
end;
//------------刪除記錄---------------------------
procedure Tmain.Button2Click(Sender: TObject);
var
deleteName:string;
deleteNum:integer;
begin
//讀入要刪除記錄的職員的姓名和職員編號
deleteName:=edit6.Text;
deleteNum:=dbgrid2.Fields[0].AsInteger;
//為保險起見,只有職員姓名和編號都符合時才能刪除
adocommand1.CommandText:='delete from 職員基本信息表 where (內部編號='''+inttostr(deleteNum)+''')and(姓名='''+deleteName+''')';
adocommand1.Execute;
//顯示刪除成功的消息
MessageBox(0,'刪除記錄成功!','刪除',MB_OK);
label58.Caption:=deleteName+'的記錄已被成功刪除';
//刷新dbgrid的數據
adotable1.Active:=false;
adotable1.Active:=true;
end;
//----------------插入新記錄----------------------------
procedure Tmain.Button3Click(Sender: TObject);
var
MaxIntNum:integer;
TotalNum:integer;
begin
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select max(內部編號) 最大編號,count(內部編號) 總人數 from 職員基本信息表');
adoquery2.Open;
//計算數據表中職員內部編號的最大值和總人數
//自動計算新插入的職員數據的內部編號
MaxIntNum:=adoquery2.FieldByName('最大編號').AsInteger;
TotalNum:=adoquery2.FieldByName('總人數').AsInteger;
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select count(職員編號) 雷同編號 from 職員基本信息表 where 職員編號='''+edit5.Text+'''');
adoquery2.Open;
//判斷輸入的職員編號,如果輸入的職員編號于已有的相同,則提示修改
if (adoquery2.FieldByName('雷同編號').AsInteger>0) then
MessageBox(0,'職員編號與其他職員編號雷同!','Error!',MB_OK)
else
begin
//不允許用戶輸入空的編號和姓名,如果輸入為空,則提示錯誤
if (edit5.Text='')or(edit6.Text='') then
MessageBox(0,'姓名和編號不能為空!','Error!',MB_OK)
else
begin
//打開職員基本信息表插入許可
adocommand1.CommandText:='set IDENTITY_insert 職員基本信息表 on';
adocommand1.Execute;
//向表中插入新記錄,這里只插入了不能為空的三項,后面用update語句來對它進行更新
adocommand1.CommandText:='insert into 職員基本信息表([內部編號], [職員編號], [姓名]) values('''+inttostr(MaxIntNum+1)+''','+''''+edit5.Text+''','+''''+edit6.Text+''')';
adocommand1.Execute;
adoquery2.Close;
adoquery2.SQL.Clear;
//更新新插入的數據項,完成插入的功能
adoquery2.SQL.Add('update 職員基本信息表 set 姓名簡碼='''+edit7.Text+'''');
adoquery2.SQL.Add(',性別='''+combobox1.text+'''');
adoquery2.SQL.Add(',出生日期='''+edit8.Text+'''');
adoquery2.SQL.Add(',年齡='''+edit9.Text+'''');
adoquery2.SQL.Add(',籍貫='''+edit10.Text+'''');
adoquery2.SQL.Add(',民族='''+combobox2.Text+'''');
adoquery2.SQL.Add(',文化程度='''+edit11.Text+'''');
adoquery2.SQL.Add(',畢業學校='''+edit12.Text+'''');
adoquery2.SQL.Add(',健康狀況='''+edit13.Text+'''');
adoquery2.SQL.Add(',婚姻狀況='''+combobox3.Text+'''');
adoquery2.SQL.Add(',身份證號碼='''+edit14.Text+'''');
adoquery2.SQL.Add(',家庭電話='''+edit15.Text+'''');
adoquery2.SQL.Add(',辦公電話='''+edit16.Text+'''');
adoquery2.SQL.Add(',手機='''+edit17.Text+'''');
adoquery2.SQL.Add(',電子郵件地址='''+edit19.Text+'''');
adoquery2.SQL.Add(',職工賬號='''+edit18.Text+'''');
adoquery2.SQL.Add(',單位編號='''+edit20.Text+'''');
adoquery2.SQL.Add(',備注='''+edit21.Text+'''');
adoquery2.SQL.Add(' where 內部編號='''+inttostr(MaxIntNum+1)+'''');
adoquery2.SQL.Add('select 姓名 from 職員基本信息表 where 內部編號='''+inttostr(MaxIntNum+1)+'''');
adoquery2.Open;
adoquery2.FieldByName('姓名').AsString;
//刷新dbgrid的數據并發送插入成功的消息
//label58就是放入的那個caption為空,用來顯示消息的label控件
label58.Caption:=adoquery2.fieldbyname('姓名').asstring+'的信息已經被成功插入';
adotable1.Active:=false;
adotable1.Active:=true;
//別忘了關掉插入許可
adocommand1.CommandText:='set IDENTITY_insert 職員基本信息表 off';
adocommand1.Execute;
end;
end;
end;
//--------------------------------------------------------------
//-----------------------職員信息管理功能的實現-----------------
//----------------------職員信息查詢----------------------------
procedure Tmain.Button4Click(Sender: TObject);
begin
//這里是從兩個表中查詢數據,請注意其中邏輯運算符的使用方法和通配符的使用
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Add('select a.姓名,a.性別,a.出生日期,a.籍貫,a.民族,b.單位名稱,a.辦公電話,a.婚姻狀況,a.文化程度 from 職員基本信息表 a,組織機構編碼表 b');
adoquery3.sql.add('where (a.單位編號=b.單位編號)and((姓名 like ''%'+edit22.text+'%'')and');
adoquery3.SQL.Add('(姓名簡碼 like ''%'+edit23.Text+'%'')and');
adoquery3.SQL.Add('(籍貫 like ''%'+edit24.Text+'%'')and');
adoquery3.SQL.Add('(民族 like ''%'+combobox5.Text+''')and');
adoquery3.SQL.Add('(性別 like ''%'+combobox4.Text+'''))');
adoquery3.Open
end;
//-----------窗體顯示時,將表中所有數據顯示出來-----------
procedure Tmain.TabSheet3Show(Sender: TObject);
begin
button4.Click;
end;
//--------------------------------------------------------------------------------
//----------------------薪資福利管理功能的實現-----------------------------------
//-----------------工資發放歷史查詢,個人所得稅率表顯示,職員獎懲管理------------
procedure Tmain.Button5Click(Sender: TObject);
//工資發放歷史查詢
var
i:integer;
begin
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Add('select b.姓名,a.* from 工資發放歷史表 a,職員基本信息表 b ');
adoquery3.SQL.Add('where (a.職員編號=b.職員編號)and((b.姓名 like ''%'+edit26.Text+'%'')and');
adoquery3.SQL.Add('(a.日期 like ''%'+edit25.Text+'%''))');
adoquery3.Open;
//設置表的寬度
for i:=3 to 29 do
dbgrid5.Columns[i].Width:=64;
end;
procedure Tmain.TabSheet9Show(Sender: TObject);
//顯示時列出表中所有數據,相當于輸入空值進行查詢
begin
button5.Click;
end;
//-------------------------當月工資管理------------------------------------------
//---------設置表中的字段的寬度------------
procedure Tmain.TabSheet7Show(Sender: TObject);
begin
dbgrid8.Columns[0].Width:=80;
dbgrid8.Columns[1].Width:=80;
dbgrid8.Columns[2].Width:=86;
dbgrid8.Columns[3].Width:=86;
dbgrid8.Columns[4].Width:=86;
dbgrid8.Columns[5].Width:=80;
dbgrid8.Columns[6].Width:=80;
dbgrid8.Columns[7].Width:=80;
dbgrid8.Columns[8].Width:=80;
end;
//---------讀取工資的歷史紀錄---------------------------------
procedure Tmain.Button9Click(Sender: TObject);
//利用SQL 建庫時的腳本,實現月工資統計表的形成
begin
//檢查輸入的要導入數據的月份和將導入數據的當前月份,如果為空,則提示重新輸入
if (edit32.text='')or(edit33.text='') then
MessageBox(0,'輸入不能為空!','錯誤',MB_OK)
//檢查輸入的時間的格式
else if (length(edit32.Text)<>6)or(length(edit33.Text)<>6) then
MessageBox(0,'輸入應如''200301''格式!','錯誤',MB_OK)
else
begin
//形成當月工資統計表
adocommand1.CommandText:='exec sf_形成月工資統計表 '''+edit32.Text+''','''+edit33.Text+'''';
adocommand1.Execute;
//刷新數據
adoquery4.Active:=false;
adoquery4.Active:=true;
end;
end;
//------------計算當月工資------------------
procedure Tmain.Button10Click(Sender: TObject);
begin
adocommand1.CommandText:='exec sf_當月工資統計';
adocommand1.Execute;
//刷新數據
adoquery4.Active:=false;
adoquery4.Active:=true;
end;
//----------------發放所選取的員工的工資----------------
procedure Tmain.Button11Click(Sender: TObject);
var
num:string;
begin
//獲取要發放工資的員工的編號
num:=adoquery4.Fields[2].AsString;
//發放工資
adocommand1.CommandText:='exec sf_當月工資發放 '''+num+'''';
adocommand1.Execute;
MessageBox(0,'所選員工的工資發放已成功!','Success',MB_OK);
//刷新數據
adoquery4.Active:=false;
adoquery4.Active:=true;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -