国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

淺談在PB中創建數據庫的方法

2024-07-21 02:09:59
字體:
來源:轉載
供稿:網友

淺談在pb中創建數據庫的方法

大連理工大學 李宏 
01-6-5 下午 02:49:57

--------------------------------------------------------------------------------
 

當我們把用powerbuilder(以下簡稱pb)開發的數據庫客戶端應用程序交給用戶后,還需要在用戶的服務器端的數據庫系統上進行一系列配置工作,如建立業務數據庫和建表、視圖、主鍵、索引等數據對象。只有正確配置了數據庫服務器上的數據結構,應用程序才能正常運行。通常由經驗豐富的數據庫管理員,使用數據庫系統提供的工具,手工或通過其他輔助工具,來完成數據庫端的配置工作。本文以微軟的sql server 2000為例,介紹用pb開發一個生成業務數據庫及各種業務數據對象的程序,用戶只要運行這個程序,就可以建立數據庫端的數據結構。
程序功能及結構
程序的主要功能是建立客戶應用程序運行時需要的業務數據庫和在新建立的業務數據庫上建立數據對象。
程序的輸入信息通過4個單行編輯文本框獲得:
●sle_database:新建立的數據庫名稱;
●sle_datafile:新建數據庫所用的數據文件;
●sle_logfile:新建數據庫所用的日志文件;
●sle_script:建立數據庫中的數據對象所用的腳本文件。
完成程序功能的兩個按鈕分別為:cb_create 用于建立數據庫;cb_table用于在新建的數據庫中建立表、主鍵等數據對象。
在兩個輸出窗口中輸出結果:dw_database 用于顯示新建的數據庫名稱及數據文件;dw_objects用于顯示通過cb_table按鈕建立的數據對象。
具體實現
考慮到對于一個特定的應用,在系統分析階段就已經確定數據庫所需要的數據空間、日志空間的大小等一些系統物理信息,不會等到程序運行時由用戶確定,所以這些信息不需要用戶輸入。數據庫的名稱一般來說也是固定的,用戶輸入的數據庫名稱(sle_database),可用來檢查數據庫系統中是否已經有同名的數據庫。數據文件和邏輯文件的物理位置和名稱,由用戶根據服務器上的磁盤空間空閑情況輸入(sle_datafile、sle_logfile),程序中給出了初始值,指定的文件位置是sql server通常的數據文件存放位置。
1.建立數據對象的腳本文件(sle_script)
該文件是普通的文本文件類型,其內容由建立表、主鍵等數據對象的數據定義語言(ddl)組成,其語法符合數據庫系統的規則。例如,腳本test.sql內容為建立兩個帶有主鍵的表:
create table xz_tj_all
( gxjg char(4) not null,
nian smallint not null,
yue tinyint not null,
bz1 tinyint not null,
bz2 tinyint not null,
a1 integer ,
a2 integer ,
a3 integer ,
primary key (gxjg, nian, yue, bz1, bz2)
)
create table xz_tj_4_1
( gxjg char(4) not null,
nian smallint not null,
yue tinyint not null,
bz1 tinyint not null,
bz2 tinyint not null,
a1 integer ,
primary key (gxjg, nian, yue, bz1, bz2)
)
2.窗口的open事件
應用程序只用到一個窗口(w_create_database),在其open事件中,對兩個全局事務對象進行創建,并利用其中的一個事務對象(tr_sql)與系統數據庫(master)進行連接。此時還沒有進行業務數據庫的創建工作,業務數據庫不存在,所以不能在這里進行與新建業務數據庫的連接。w_create_database 的open事件腳本如下:
//創建與master系統數據庫相連接的事務對象
tr_sql = create transaction
tr_sql.dbms =“mss microsoft sql server 6.x”
tr_sql.database = “master”
//數據庫系統管理員
tr_sql.logpass = “sa”
//服務器名
tr_sql.servername = “station4”
//系統管理員口令
tr_sql.logid = “sa”
tr_sql.autocommit = false
tr_sql.dbparm = “”
//連接到master系統數據庫
connect using tr_sql;
if tr_sql.sqlcode <> 0 then
messagebox (“數據庫連接錯誤”,“不能連接到sql server數據庫master。請確認sql server數據庫是否啟動。~n~r” + “錯誤信息:” + tr_sql.sqlerrtext)
return
end if
//從系統表sysdatabases中檢索數據庫信息
dw_database.settransobject(tr_sql);
//創建與新建業務數據庫相連接的事務對象
tr_newbase = create transaction
tr_newbase.dbms =“mss microsoft sql server 6.x”
tr_newbase.logpass =“sa”
tr_newbase.servername =“station4”
tr_newbase.logid =“sa”
tr_newbase.autocommit = false
tr_newbase.dbparm =“”
3.cb_create按鈕的單擊事件
根據業務需要,這里創建的數據文件和日志文件的初始大小為100mb,最大值為200mb,增量為20mb。按鈕cb_create根據輸入參數構造動態sql語句,創建數據庫。cb_create的clicked事件腳本如下:
//數據庫名
string ls_database 
//數據文件路徑及文件名
string ls_datafile 
//日志文件路徑及文件名
string ls_logfile 
//創建數據庫的sql語句
string ls_mysql 
//邏輯數據文件名
string ls_logicalfilename 
//邏輯日志文件名
string ls_logicallogname 
setpointer(hourglass!)
//取得用戶輸入的數據庫名稱
ls_database = trim(sle_database.text) 
//取得數據文件位置和名稱
ls_datafile = trim(sle_datafile.text) 
//取得日志文件位置和名稱
ls_logfile = trim(sle_logfile.text) 
ls_logicalfilename = ls_database + “arch1”
ls_logicallogname = ls_database + “archlog1”
tr_sql.autocommit = true 
//建立數據庫的語句
ls_mysql=“create database ”+ls_database+“on”&
+“( name =”+ls_logicalfilename+“,”&
+“filename = ‘”+ls_datafile+“',”&
+“size = 100mb,”&
+“maxsize = 200,”&
+“filegrowth = 20)”&
+“log on ”&
+“( name = ”+ls_logicallogname+“,”&
+“filename = ‘”+ls_logfile+“',”&
+“size = 100mb,”&
+“maxsize = 200,”&
+“filegrowth = 20)”
execute immediate :ls_mysql using tr_sql; 
tr_sql.autocommit = false
//檢索出剛剛建立的數據庫
dw_database.retrieve(ls_database) 
cb_table.enabled = true
setpointer(arrow!)
4.cb_table按鈕的單擊事件
按鈕cb_table從指定的腳本文件(sle_script.text)中讀取內容,構造動態的sql語句,創建數據對象。為簡化程序,對于腳本文件大于32765字節的情況,本文沒做處理,讀者可用多次讀文件等技術自行處理。
cb_table的clicked事件腳本如下:
//創建數據對象前的時間
datetime ldt_create 
//數據庫名
string ls_database 
//創建數據對象的sql語句
string ls_sql 
//存儲腳本文件名
string ls_filename 
//打開文件的文件號
int li_fileno 
//文件長度,讀取的文件字節數 
long ll_filelength, ll_number 
//取得新建的數據庫名稱
ls_database = trim(sle_database.text) 
if messagebox(“請確認”,“將要在”+ls_database+“數據庫中生成表結構?”, question!,yesno!,2) = 2 then 
return 
end if
setpointer(hourglass!)
//為連接業務數據庫的事務對象設置數據庫值
tr_newbase.database = ls_database
connect using tr_newbase;
if tr_newbase.sqlcode <> 0 then
messagebox (“數據庫連接錯誤”,“不能連接到sql server數據庫:” +ls_database + “ 。~n~r”+“錯誤信息:”+ tr_newbase.sqlerrtext)
return
end if
//取得建立數據對象的時間,并從系統表sysobjects中提取建立的數據對象
select distinct getdate() 
into :ldt_create 
from sysobjects
using tr_newbase;
//此數據窗口將顯示新建事務對象
dw_objects.settransobject(tr_newbase) 
//從輸入中取得腳本文件名
ls_filename = trim(sle_script.text) 
ll_filelength = filelength(ls_filename)
//對大于32765字節的文件不做處理
if ll_filelength > 32765 then 
messagebox(“”,“腳本文件太大”)
disconnect using tr_newbase;
return
elseif ll_filelength > 0 then 
//讀取文件內容,執行動態sql語句
li_fileno = fileopen(ls_filename, streammode!)
ll_number = fileread(li_fileno, ls_sql)
if ll_number > 0 and ll_number <= 32765 then
tr_newbase.autocommit = true 
execute immediate :ls_sql 
usingtr_newbase;
tr_newbase.autocommit = false
end if
fileclose(li_fileno)
else //不能正確讀取文件信息
sle_script.setfocus()
sle_script.selecttext(1,len(sle_script.text))
messagebox(“打開腳本文件出錯”,“請輸入正確的表結構腳本文件名稱”)
disconnect using tr_newbase;
return
end if
//檢索剛剛建立的數據對象 
dw_objects.retrieve(ldt_create)
disconnect using tr_newbase;
setpointer(arrow!)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 基隆市| 陇西县| 普兰店市| 荔波县| 周口市| 赤城县| 博爱县| 清河县| 新巴尔虎左旗| 广南县| 康平县| 准格尔旗| 安吉县| 滦南县| 康保县| 凤翔县| 文水县| 阿荣旗| 册亨县| 桐乡市| 塔城市| 沁阳市| 河源市| 泾阳县| 永清县| 景德镇市| 龙胜| 酒泉市| 宁城县| 墨江| 环江| 商城县| 汪清县| 阿拉善左旗| 万州区| 曲阳县| 厦门市| 洪泽县| 云梦县| 井研县| 江油市|