巫宗賓
【摘 要】 基于MSDE桌面數據庫系統設計一個通用管理程序,完成對數據庫實體也就是賬套的新建、刪除、備份、恢復、注冊、反注冊、壓縮等功能。使非專業人士也可以專業的完成數據庫維護,同時提供標準的開發接口,縮短開發周期,降低開發成本。具有良好的市場推廣價值和創造經濟價值。
【關鍵詞】 MSDE 賬套 備份 MIS 通用接口
【Abstract】 a general management program design of database system based on MSDE desktop, complete was the database entity account of new, delete, backup, restore, registration, the registration, compression and other functions. The non professionals can also professional complete database maintenance, while providing development interface standard, shorten the development cycle, reduce the cost of development. Has a good market popularizing value and create economic value.
【Keywords】 MSDE account backup MIS universal interface
MSDE是MS SQL Server的桌面免費版,它是一個基于 SQL Server 核心技術構建的數據引擎,沒有圖型管理工具,通過命令行管理程序osql來連接的。當對數據庫系統的功能和性能提出新的需求時,則可以在不修改現有程序代碼的情況下,完全移植到SQL Server的平臺上運行。在管理信息系統的應用中,每一個程序都需要對數據庫賬套進行新建、刪除、備份、恢復、壓縮、信息注冊、反注冊等操作。設計一個通用的管理程序,通過簡單的操作完成數據庫管理并提供標準的開發接口。本設計通過利用動態SQL語句和Powerbuilder9.0作為開發工具,完成基于MSDE的數據庫管理軟件設計。
1 設計思路
通過查詢Master數據庫中的系統表sysaltfiles,檢測是否包含賬套信息數據庫的邏輯數據庫名稱Kt_acct,如果存在則直接連接Kt_acct數據庫,否則創建Kt_acct數據庫,同時創建用戶表T_user,帳套信息表T_acct和帳套文件存放信息表T_acct_info,并連接到Kt_acct數據庫進入賬套管理程序,對賬套進行維護,同時通過訪問Kt_acct數據庫獲取應用程序的賬套數據庫信息,連接到賬套數據庫建立新的應用。具體流程參見(圖1):
2 具體實現方法
該環節實現賬套信息數據庫的建立和表的創建,以及賬套的新建、刪除、備份、恢復、壓縮等功能的實現。程序主界面如(圖2)所示:
2.1 檢測賬套信息數據庫Kt_acct
通過查詢Master數據庫中的sysaltfiles表,檢測賬套信息數據庫的邏輯數據庫名稱t_acct_data是否存在,如果存在則連接Kt_acctk,否則創建Kt_acctk,其核心代碼如下:
Int flags=0;
select count(*) into: flags from sysaltfiles where name="kt_acct_data";
如果SQL語句執行后flags>0表示數據庫已經存在,否則表示數據庫不存在。
2.2 創建賬套信息數據庫Kt_acct
該環節通過構建動態SQL語句并執行SQL語句完成數據庫Kt_acct的創建。定義字符串變量ls_sql,構建一個動態SQL語句賦予變量ls_sql,在SQL語句具中指出數據庫主文件kt_acct_data.mdf和數據庫日志文件kt_acct_log.ldf,通過執行變量ls_sql中的語句完成數據庫創建,其核心代碼如下:
string ls_sql=””;
ls_sql="create database kt_acct on( name=kt_acct_data,filename = 'd:\kt_acct_data.mdf',size = 10) log on( name =kt_acct_log,filename ='d:\kt_acct_log.ldf',size = 10)" ;
execute immediate :ls_sql using sqlca;
2.3 創建用戶表T_USER
該環節構建一個動態SQL語句并執行完成數據庫用戶信息表T_USER的創建,包含用戶名稱USERS字段和密碼字段PASS,并向表添加一個超級用戶Admin,密碼為空。其核心代碼如下:
string ls_createtable=””;
ls_createtable="create table t_user(users char(8) not null,pass char(16)null)";
execute immediate:ls_createtable using sqlca;
insert into t_user (users,pass)values ("admin","") using sqlca ;
2.4 創建賬套信息表T_acct
該環節構建一個動態SQL語句,通過動態SQL語句生成數據庫表T_acct,并定義表字段kacctid為主鍵,其核心代碼如下:endprint
ls_createtable="create table [dbo].[t_acct] ([kacctid] [int] identity (1, 1) not null , [kacctnumber] [nvarchar] (50) collate chinese_prc_ci_as not null ,[kacctname] [nvarchar] (50) collate chinese_prc_ci_as not null ,[kdbname] [nvarchar] (100) collate chinese_prc_ci_as not null ,[kcompanyname] [nvarchar] (50) collate chinese_prc_ci_as not null ,[fdescription] [nvarchar] (50) collate chinese_prc_ci_as null,[kacctver] [char] (10) collate chinese_prc_ci_as not null ) on [primary]";
execute immediate:ls_createtable using sqlca;
ls_createtable="alter table [dbo].[t_acct] add constraint [pk_t_acct] primary key clustered ([kacctid]) on [primary]" ;
execute immediate:ls_createtable using sqlca;
2.5 創建數據庫文件存放信息表t_acct_info
該環節構建一個動態SQL語句,通過動態SQL語句生成數據庫表,其中字段l_name存放數據庫文件邏輯名,字段,p_name存放數據庫文件完整路徑及文件名,字段f_g_name存放文件屬性,size和maxsize字段指定文件大小。其核心代碼如下:
ls_createtable="create table [dbo].[t_acct_info](l_name varchar(30),p_name varchar(1000),type varchar(10),f_g_name varchar(20) null,size bigint,maxsize bigint)";
execute immediate:ls_createtable using sqlca;
2.6 創建存儲過程
該環節創建兩個動態SQL語句,通過動態SQL語句生成存儲過程sp_ restore 和sp_dump,其中sp_ restore完成數據庫恢復,sp_dump取消數據庫記錄日志,為壓縮數據庫做準備,這兩個存儲過程供程序調用完成相關功能。核心代碼如下:
ls_createtable="create procedure sp_restore @bakfile nvarchar(1000) as insert into t_acct_info exec('restore filelistonly from disk = n'''+@bakfile+'''')";
execute immediate :ls_createtable;
ls_createtable="create procedure sp_dump @datafile nvarchar(50) as dump transaction @datafile with no_log backup log @datafile with no_log dbcc shrinkfile (2) dbcc shrinkfile (1) ";
execute immediate:ls_createtable;
3 賬套管理實現方法
該環節主要實現應用程序數據庫的新建、刪除、備份、恢復、數據壓縮、信息登記、賬套注冊以及賬套數據結轉等功能,充分體現簡單的操作方法和高效的管理的特點,當基于SQL SERVER2000應用的MIS開發成功以后,都會有一個存放所有數據的數據庫文件,通過SQL SERVER2000的工具將該數據庫文件導出生成一個SQL文件,這個文件包含數據庫的所有對象、數據以及對象間關系,把文件命名為:chs.sql。通過文件chs.sql可以完成行業賬套的新建和恢復等功能。
3.1 新建賬套
在登錄至管理界面之后選中新建功能,輸入帳套號,帳套名稱帳套數據庫路徑之后便能得到一個所需要管理的數據庫,至于公司名稱及帳套說明是對所需要管理的數據說明,以便用戶分清所要管理數據的特征。輸入信息完畢后,軟件提示等待信息,當帳套創建成功后有信息提示框彈出,如(圖3)所示。
其核心代碼如下:
string str_acctnumber=""http://恢復賬套名稱;
string ls_sql=""http://動態sql變量;
string ls_logicdata=""http://新數據庫mdf邏輯名稱;
string ls_logiclog=""http://新數據庫ldf邏輯名稱;
string ls_griphicmdf=""http://新數據庫mdf存放路徑及名稱;
string ls_griphicldf=""http://新數據庫ldf存放路徑及名稱;
string ls_olddatabase=""http://備份文件中數據庫名稱;
ls_sql="restore database "+str_acctnumber+" from "+ ls_olddatabase+" with recovery,move "+"'"+ls_logicdata+"' to '"+ls_griphicmdf+"',move "+"'"+ls_logiclog+"' to '"+ls_griphicldf+"'";endprint
execute immediate : ls_sql using tr_sqlca;//恢復數據庫;
3.2 刪除賬套
在登錄至管理界面之后選中賬套數據庫點擊刪除圖標,根據提示完成數據庫賬套刪除。該操作會刪除賬套信息數據庫中相關的記錄,同時會從物理上刪除行業數據庫的文件。其核心代碼如下:
string ls_exec//動態sql變量
string str_dbname=""http://數據庫名稱
ls_exec="sp_detach_db @dbname='"+str_dbname+"'";
execute immediate :ls_exec using tr_sqlca ;
3.3 備份賬套
在登錄至管理界面之后選中賬套數據庫點擊備份圖標,根據選擇備份路徑等,完成數據庫備份。其核心代碼如下:
string ls_path ,ls_use,ls_dbname
ls_use = "exec sp_dropdevice 'hotel'"
execute immediate : ls_use using tr_sqlca;
ls_use = "exec sp_addumpdevice 'disk'"+" , 'hotel' , "+" '"+ls_path+"'"
execute immediate : ls_use using tr_sqlca;
ls_use ="backup database "+ls_dbname+" to hotel"
execute immediate : ls_use using tr_sqlca;
ls_use = "exec sp_dropdevice 'hotel'"
execute immediate : ls_use using tr_sqlca;
3.4 恢復賬套
恢復功能是建立在備份數據基礎上的功能,這個功能的主要實現目的在于當數據丟失或誤刪時,能夠及時恢復數據。其核心代碼如下:
string str_bakfile=""
declare sp_ restore procedure for sp_ restore @bakfile=:str_bakfile;
execute sp_ restore;
close sp_ restore;
3.5 壓縮賬套
這項功能用于對不是經常用的數據進行壓縮處理,這樣既保留了數據的完整性又避免了數據過多的占用空間資源。其核心代碼如下:
string str_datafile
declare sp_dump procedure for sp_dump @datafile=:str_datafile using sqlca;
execute sp_dump;
close sp_dump;
3.6 賬套注冊
該功能把數據庫實體登記到賬套管理數據庫,以方便應用程序訪問,如(圖4)所示:
其核心代碼如下:
if dw_2.update()=1 then
commit using sqlca;
if sqlca.sqlcode=0 then
messagebox("提示","注冊成功!")
dw_2.reset()
dw_2.insertrow(0)
dw_1.retrieve()
else
messagebox("提示","注冊失敗,請確定帳套名稱和公司名稱是否正確!")
end if
else
messagebox("提示","注冊失敗,請確定帳套名稱和公司名稱是否正確!")
rollback using sqlca;
end if
3.7 賬套反注冊
該功能取消數據庫實體在賬套管理數據庫的登記,這樣用用程序將不能夠訪問,如(圖5)所示:
其核心代碼如下:
if dw_1.getrow()>0 then
dw_1.deleterow(dw_1.getrow())
if dw_1.update()=1 then
commit using sqlca;
else
rollback using sqlca;
end if
end if
4 行業MIS訪問賬套
該功能完成賬套數據庫的訪問,可以完成行業軟件的開發。如(圖6)所示:
其核心代碼如下:
string ls_server//服務器名稱
string ls_accout//賬套名稱
sqlca.dbms = "mss microsoft sql server"
sqlca.database =ls_accout
sqlca.servername = ls_server
sqlca.logid = "sa"
sqlca.autocommit = false
sqlca.dbparm = ""
connect using sqlca;
5 結語
在數據庫應用管理程序的設計當中,最重要的是有以下幾點:(1)軟件消耗的資源不能太多;(2)設計管理軟件的時候要盡量避免復雜的操作和設計,以免給用戶帶來不必要的誤解,使用戶不能充分的理解該軟件的功能從而無法使用,所以設計應當盡量使其簡單化;(3)開發軟件時周期不能太長。所以該管理程序的開發應用,可以簡化開發流程,縮短開發周期以及實現便捷的數據庫管理方法,具有很高的實用價值和經濟價值。
參考文獻:
[1]王蓉等.PowerBuild7.0應用開發技術詳解[M].電子工業出版社.2000.
[2]唐學忠等.SQL Server 2000數據庫教程[M].電子工業出版社.2000.
[3]Konrad King(美).譯者:杜大鵬等.SQL編程實用大全[M].中國水利水電出版社.2000.
[4]錢雪忠..數據庫原理及應用[M].北京郵電大學出版社.2007.
[5]Bain T.SQL server 2000數據倉庫與Analysis Services[M].中國電力出版社.2003.
[6]王珊.數據庫技術與聯機分析處理[M].北京科學出版社.1998.endprint
execute immediate : ls_sql using tr_sqlca;//恢復數據庫;
3.2 刪除賬套
在登錄至管理界面之后選中賬套數據庫點擊刪除圖標,根據提示完成數據庫賬套刪除。該操作會刪除賬套信息數據庫中相關的記錄,同時會從物理上刪除行業數據庫的文件。其核心代碼如下:
string ls_exec//動態sql變量
string str_dbname=""http://數據庫名稱
ls_exec="sp_detach_db @dbname='"+str_dbname+"'";
execute immediate :ls_exec using tr_sqlca ;
3.3 備份賬套
在登錄至管理界面之后選中賬套數據庫點擊備份圖標,根據選擇備份路徑等,完成數據庫備份。其核心代碼如下:
string ls_path ,ls_use,ls_dbname
ls_use = "exec sp_dropdevice 'hotel'"
execute immediate : ls_use using tr_sqlca;
ls_use = "exec sp_addumpdevice 'disk'"+" , 'hotel' , "+" '"+ls_path+"'"
execute immediate : ls_use using tr_sqlca;
ls_use ="backup database "+ls_dbname+" to hotel"
execute immediate : ls_use using tr_sqlca;
ls_use = "exec sp_dropdevice 'hotel'"
execute immediate : ls_use using tr_sqlca;
3.4 恢復賬套
恢復功能是建立在備份數據基礎上的功能,這個功能的主要實現目的在于當數據丟失或誤刪時,能夠及時恢復數據。其核心代碼如下:
string str_bakfile=""
declare sp_ restore procedure for sp_ restore @bakfile=:str_bakfile;
execute sp_ restore;
close sp_ restore;
3.5 壓縮賬套
這項功能用于對不是經常用的數據進行壓縮處理,這樣既保留了數據的完整性又避免了數據過多的占用空間資源。其核心代碼如下:
string str_datafile
declare sp_dump procedure for sp_dump @datafile=:str_datafile using sqlca;
execute sp_dump;
close sp_dump;
3.6 賬套注冊
該功能把數據庫實體登記到賬套管理數據庫,以方便應用程序訪問,如(圖4)所示:
其核心代碼如下:
if dw_2.update()=1 then
commit using sqlca;
if sqlca.sqlcode=0 then
messagebox("提示","注冊成功!")
dw_2.reset()
dw_2.insertrow(0)
dw_1.retrieve()
else
messagebox("提示","注冊失敗,請確定帳套名稱和公司名稱是否正確!")
end if
else
messagebox("提示","注冊失敗,請確定帳套名稱和公司名稱是否正確!")
rollback using sqlca;
end if
3.7 賬套反注冊
該功能取消數據庫實體在賬套管理數據庫的登記,這樣用用程序將不能夠訪問,如(圖5)所示:
其核心代碼如下:
if dw_1.getrow()>0 then
dw_1.deleterow(dw_1.getrow())
if dw_1.update()=1 then
commit using sqlca;
else
rollback using sqlca;
end if
end if
4 行業MIS訪問賬套
該功能完成賬套數據庫的訪問,可以完成行業軟件的開發。如(圖6)所示:
其核心代碼如下:
string ls_server//服務器名稱
string ls_accout//賬套名稱
sqlca.dbms = "mss microsoft sql server"
sqlca.database =ls_accout
sqlca.servername = ls_server
sqlca.logid = "sa"
sqlca.autocommit = false
sqlca.dbparm = ""
connect using sqlca;
5 結語
在數據庫應用管理程序的設計當中,最重要的是有以下幾點:(1)軟件消耗的資源不能太多;(2)設計管理軟件的時候要盡量避免復雜的操作和設計,以免給用戶帶來不必要的誤解,使用戶不能充分的理解該軟件的功能從而無法使用,所以設計應當盡量使其簡單化;(3)開發軟件時周期不能太長。所以該管理程序的開發應用,可以簡化開發流程,縮短開發周期以及實現便捷的數據庫管理方法,具有很高的實用價值和經濟價值。
參考文獻:
[1]王蓉等.PowerBuild7.0應用開發技術詳解[M].電子工業出版社.2000.
[2]唐學忠等.SQL Server 2000數據庫教程[M].電子工業出版社.2000.
[3]Konrad King(美).譯者:杜大鵬等.SQL編程實用大全[M].中國水利水電出版社.2000.
[4]錢雪忠..數據庫原理及應用[M].北京郵電大學出版社.2007.
[5]Bain T.SQL server 2000數據倉庫與Analysis Services[M].中國電力出版社.2003.
[6]王珊.數據庫技術與聯機分析處理[M].北京科學出版社.1998.endprint
execute immediate : ls_sql using tr_sqlca;//恢復數據庫;
3.2 刪除賬套
在登錄至管理界面之后選中賬套數據庫點擊刪除圖標,根據提示完成數據庫賬套刪除。該操作會刪除賬套信息數據庫中相關的記錄,同時會從物理上刪除行業數據庫的文件。其核心代碼如下:
string ls_exec//動態sql變量
string str_dbname=""http://數據庫名稱
ls_exec="sp_detach_db @dbname='"+str_dbname+"'";
execute immediate :ls_exec using tr_sqlca ;
3.3 備份賬套
在登錄至管理界面之后選中賬套數據庫點擊備份圖標,根據選擇備份路徑等,完成數據庫備份。其核心代碼如下:
string ls_path ,ls_use,ls_dbname
ls_use = "exec sp_dropdevice 'hotel'"
execute immediate : ls_use using tr_sqlca;
ls_use = "exec sp_addumpdevice 'disk'"+" , 'hotel' , "+" '"+ls_path+"'"
execute immediate : ls_use using tr_sqlca;
ls_use ="backup database "+ls_dbname+" to hotel"
execute immediate : ls_use using tr_sqlca;
ls_use = "exec sp_dropdevice 'hotel'"
execute immediate : ls_use using tr_sqlca;
3.4 恢復賬套
恢復功能是建立在備份數據基礎上的功能,這個功能的主要實現目的在于當數據丟失或誤刪時,能夠及時恢復數據。其核心代碼如下:
string str_bakfile=""
declare sp_ restore procedure for sp_ restore @bakfile=:str_bakfile;
execute sp_ restore;
close sp_ restore;
3.5 壓縮賬套
這項功能用于對不是經常用的數據進行壓縮處理,這樣既保留了數據的完整性又避免了數據過多的占用空間資源。其核心代碼如下:
string str_datafile
declare sp_dump procedure for sp_dump @datafile=:str_datafile using sqlca;
execute sp_dump;
close sp_dump;
3.6 賬套注冊
該功能把數據庫實體登記到賬套管理數據庫,以方便應用程序訪問,如(圖4)所示:
其核心代碼如下:
if dw_2.update()=1 then
commit using sqlca;
if sqlca.sqlcode=0 then
messagebox("提示","注冊成功!")
dw_2.reset()
dw_2.insertrow(0)
dw_1.retrieve()
else
messagebox("提示","注冊失敗,請確定帳套名稱和公司名稱是否正確!")
end if
else
messagebox("提示","注冊失敗,請確定帳套名稱和公司名稱是否正確!")
rollback using sqlca;
end if
3.7 賬套反注冊
該功能取消數據庫實體在賬套管理數據庫的登記,這樣用用程序將不能夠訪問,如(圖5)所示:
其核心代碼如下:
if dw_1.getrow()>0 then
dw_1.deleterow(dw_1.getrow())
if dw_1.update()=1 then
commit using sqlca;
else
rollback using sqlca;
end if
end if
4 行業MIS訪問賬套
該功能完成賬套數據庫的訪問,可以完成行業軟件的開發。如(圖6)所示:
其核心代碼如下:
string ls_server//服務器名稱
string ls_accout//賬套名稱
sqlca.dbms = "mss microsoft sql server"
sqlca.database =ls_accout
sqlca.servername = ls_server
sqlca.logid = "sa"
sqlca.autocommit = false
sqlca.dbparm = ""
connect using sqlca;
5 結語
在數據庫應用管理程序的設計當中,最重要的是有以下幾點:(1)軟件消耗的資源不能太多;(2)設計管理軟件的時候要盡量避免復雜的操作和設計,以免給用戶帶來不必要的誤解,使用戶不能充分的理解該軟件的功能從而無法使用,所以設計應當盡量使其簡單化;(3)開發軟件時周期不能太長。所以該管理程序的開發應用,可以簡化開發流程,縮短開發周期以及實現便捷的數據庫管理方法,具有很高的實用價值和經濟價值。
參考文獻:
[1]王蓉等.PowerBuild7.0應用開發技術詳解[M].電子工業出版社.2000.
[2]唐學忠等.SQL Server 2000數據庫教程[M].電子工業出版社.2000.
[3]Konrad King(美).譯者:杜大鵬等.SQL編程實用大全[M].中國水利水電出版社.2000.
[4]錢雪忠..數據庫原理及應用[M].北京郵電大學出版社.2007.
[5]Bain T.SQL server 2000數據倉庫與Analysis Services[M].中國電力出版社.2003.
[6]王珊.數據庫技術與聯機分析處理[M].北京科學出版社.1998.endprint