【正文】
Col,(PUsender as TStringGrid).row])+39。%39。+39。//模糊查詢 end。 end else if wherestr=39。39。 then begin if (()=TEdit) and ((sender as TEdit).Text39。39。) then str:=str+39。 where 39。+FieldName1 +39。 like 39。+39+39。%39。+trim((sender as TEdit).Text)+39。%39。+39。 if ()=TStringGrid then begin if (sender as TStringGrid).cells[(sender as TStringGrid).Col,(sender as TStringGrid).row]=39。39。 then str:=str+39。 from 39。+TableName else str:=str+39。 where39。+FieldName1+39。 like 39。 +39+39。%39。+trim((sender as TStringGrid).cells[(sender as TStringGrid).Col,(sender as TStringGrid).row])+39。%39。+39。 end。 end。 if ord39。39。 then str:=str+39。 39。+Ord。 result:=str。end。(四)密碼加密——用戶登陸時的密碼在數據庫中是以二進制代碼加密的形式存在,保證安全性,如圖所示:function SetPassword(PasswordStr:string):string。//用戶密碼加密函數var str:string。 i:integer。 AscStr:string。begin result:=39。39。 str:=PasswordStr。//密碼 for i:=1 to length(str) do//循環(huán),加密的開始 begin result:=trim(result+char(integer(str[i])8))。//往后移動8位 end。 // showmessage(result)。end。 密碼在數據庫的二進制代碼存在形式(五)日歷格式的定義——比如日歷日期2004/3/8輸出時自動該為2004/03/08procedure MonthCalendarClick(AMC:TMonthCalendar)。var YY,MM,dd:string。begin yy:=getyear()。 MM:=getmonth()。 DD:=getday()。 if length(MM)=1 then MM:=39。039。+MM。 // 加零 if length(DD)=1 then DD:=39。039。+DD。 (PUsender as TMaskEdit).text:=YY+39。39。+MM+39。39。+DD。 // 輸出格式 :=false。end。(六)函數功能:將月、日、小時、分鐘的一位數前加零Function GetTimeToEdit(DT:TDateTime):string。var YY,MM,dd,HH,SS:string。 Hour,Min,Sec,MSec: Word。begin yy:=getyear(DT)。 //年 MM:=getmonth(DT)。 //月 DD:=getday(DT)。 //日 DecodeTime(DT,Hour,Min,Sec,MSec)。 HH := InttoStr(Hour)。 SS := InttoStr(Min)。 if length(MM)=1 then MM:=39。039。+MM。 if length(DD)=1 then DD:=39。039。+DD。 if length(HH)=1 then HH:=39。039。+HH。 if length(SS)=1 then SS:=39。039。+SS。 result:=YY+39。39。+MM+39。39。+DD+39。 39。+HH+39。:39。+SS+39。:39。 // 返回結果格式end。:Dmmon公共數據庫模塊的使用建立一個名為DMmon的數據庫模塊,把ADO連接和其他的一些公共的DATASET 和ADOQUERY放在一起,作為數據庫調用的公共模塊,有利于減輕數據庫服務器負擔,減少網絡流量;。 公共數據模塊單元:六個窗口共用一個單元資源——充分、合理利用系統(tǒng)資源在資源利用方面,對于一些相同的界面只建立一個單元。利用這個單元,用簡單的代碼就可開發(fā)其他的界面,大大節(jié)約資源,同時提高開發(fā)效率。人事系統(tǒng)中實際的單元為“環(huán)維集團員工基本資料維護”,而“環(huán)維香港員工資料維護”、“環(huán)維電子員工資料維護”、“環(huán)維發(fā)展員工資料維護”、“環(huán)維慧而遠員工資料維護”、“環(huán)維工業(yè)照明員工資料維護”這五個界面都是由簡單的代碼調用該單元來實現的。實現方法:在public設一個變量AttribFlag作為標記,只需在系統(tǒng)子菜單按紐中敲入如下通用代碼,然后修改AttribFlag的值,也就是界面中“基本資料”的“所屬公司”的FormShow事件值,然后將Caption改為該單元的名稱即可。通用代碼如下:procedure (Sender: TObject)。begin (TF_Employee, F_Employee)。 :=39。環(huán)維集團員工資料維護39。 :=39。39。 // 技術體現之處,變量的使用 if = TMenuItem then (GetSubMenuCaption(trim((sender as TMenuItem).Caption)))。 // 與審核單元相關聯(lián) 。 // 窗口顯示 。 // 釋放占用的資源end。 主界面圖:面向對象技術的繼承性體現在面向對象編程的繼承性方面,則體現在系統(tǒng)界面風格一致性上,用建立了一個叫做Ubase的單元,其他都繼承于它(體現為Inherited),既使得風格一致,還提高了系統(tǒng)開發(fā)效率,在各個界面按紐的功能基本一致,均來源于Ubase單元。 父單元:搜索查詢窗口靈活調用技術在各個界面中按紐“查詢”調用一個搜索窗口,其中的字段動態(tài)調用,也就是說隨著不同的需要,從數據庫調用的字段個數,名稱可隨需要動態(tài)變化,并且實現模糊查詢功能。該功能主要由公共代碼CallSearch(AMC:TMonthCalendar)過程和取字段函數GetStr(sender:Tobject):string來實現。該功能的精彩之處在于:根據各個模塊的需要調取所需的字段,但在此限制為最多有三個字段剛好填滿畫面的表格,但也可根據需要只取一個或兩個字段。當然,所調用的數據庫肯定是不一樣的。舉例如下:,所調用的數據庫表Employee表,所取的字段是員工編號和姓名兩個字段如下調用程序:procedure (Sender: TObject)。begin if Operate = 39。qry39。 then //這是各個界面查詢按鈕的標識 begin if AttribFlag=39。39。 then//設置公共變量,代表公司名稱的標識,是在員工基本資料維護中定義的(EmployeeCodeEdt,CommonBBtn1,39。Employee39。,39。EmployeeCode39。,39。員工編碼39。,39。EmployeeName39。,39。員工姓名39。,39。39。,39。39。,39。39。,39。39。)//另外一個公共函數SetCommonBBtn的調用。分別代表(控件名,小按鈕名,數據庫表名,字段:員工編碼,字段:員工姓名) else (EmployeeCodeEdt,CommonBBtn1,39。Employee39。,39。EmployeeCode39。,39。員工編碼39。,39。EmployeeName39。,39。員工姓名39。,39。39。,39。39。,39。pany=39。+39+AttribFlag+39,39。39。)。//解釋同上 OnEnterFlag1 := 1。//設置標識 end else OnEnterFlag1 := 0 。 //設置標識end。 ,所調用的數據庫表dimission表,所取的字段是員工編號、姓名和到職日期三個字段如下調用程序:procedure (Sender: TObject)。begin if operate=39。Qry39。 then begin if AttribFlag=39。39。 then (EmployeeNoEdt,CommonBBtn1,39。Employee39。,39。EmployeeCode39。,39。員工編碼39。,39。EmployeeName39。,39。員工姓名39。,39。dtWorkDay39。,39。到職日期39。,39。(dtOffWork is null) or (dtOffWork 39。+39+datetimetostr()+39+39。)39。,39。39。)//解釋同上 else (EmployeeNoEdt,CommonBBtn1,39。Employee39。,39。EmployeeCode39。,39。員工編碼39。,39。EmployeeName39。,39。員工姓名39。,39。dtOffWork39。,39。離職日期39。,39。dtOffWork=39。+39+datetimetostr()+39,39。39。)。//解釋同上 OnEnterFlag := 1。 end else OnEnterFlag := 0。end。 ,所調用的數據庫表employee表,所取的字段只有民族一個字段如下調用程序:procedure (Sender: TObject)。begin (HomePlaceEdt,CommonBBtn1,39。Code39。,39。CodeName39。,39。籍貫39。,39。39。,39。39。,39。39。,39。39。,39。39。)。 //括號含義:Edit名稱,公共小按鈕,數據庫表名,字段名,字段說明(也是顯示的字段名),另外兩個空的字段不顯示(前面說過最多只允許三個字段)end。 :界面數據顯示的美觀Delphi在界面的設計方面堪稱是一門藝術,尤其是第三方組件的引入,你可以自己建立組件或者安裝別人的優(yōu)秀組件、控件。在程序設計方面也非常容易,舉例如下:begin s1 :=trim([39。EmployeeCode39。])。 s2 :=trim([39。EmployeeName39。])。s :=39。39。+s1+39。 39。+s2。//定制自己的格式end。 中:listbox中的兩個字段顯示中間“兩個空格+ —— +兩個空格”注意:在單擊列表框員工時,將以編號為引導將各個字段數據發(fā)送到右邊的各個顯示空時,還應該對這兩個字段進行處理處理過程由以下函數完成Function (ListValue:string):string。var s,s1:string。 i:integer。begin Result := 39。39。 //結果集初始化 s := trim(ListValue)。 if s 39。39。 then begin for i := 1 to Length(s) do //循環(huán) begin if Copy(s,i,1) = 39。39。 then break。 //單擊時拷貝編號,當遇到“—”時退出,返回值為編號 s1 := s1 + copy(s,i,1)。 Result := trim(S1)。//返回結果集:拷貝函數拷貝的結果——員工編號 end。 end。end。:事務處理在對多個表執(zhí)行多條SQL語句時,就必須使用到事務處理技術,在Delphi中事務處理的編程形式如下:begin 查詢控件BeginTrans。try 查詢控件CommitTrans。except 查詢控件RoolBackTrans。end。舉個簡單的例子——離職操作界面dimission單元的保存功能//開始事務處理 begin 。 //事務開始語句…… //增加在職為離職 if Operate = 39。add39。 then //各個界面中的增加按鈕的標識 with do //調用DMCommon公共查詢模塊的QryOperate查詢 begin ……//省略代碼 end。 //修改離職記錄