创建数据库的方法:浅谈在PB中创建数据库的方法



浅谈在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 small not null,
yue tiny not null,
bz1 tiny not null,
bz2 tiny not null,
a1 eger ,
a2 eger ,
a3 eger ,
primary key (gxjg, nian, yue, bz1, bz2)
)
create table xz_tj_4_1
( gxjg char(4) not null,
nian small not null,
yue tiny not null,
bz1 tiny not null,
bz2 tiny not null,
a1 eger ,
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;
tr_sql.sqlcode <> 0 then
MessageBox (“数据库连接”,“不能连接到SQL Server数据库Master请确认SQL Server数据库是否启动~n~r” + “信息:” + tr_sql.sqlerrtext)

end
//从系统表sysdatabases中检索数据库信息
dw_database.SetTransObject(tr_sql);
//创建和新建业务数据库相连接事务对象
tr_Base = create transaction
tr_Base.DBMS =“MSS Microsoft SQL Server 6.x”
tr_Base.LogPass =“sa”
tr_Base.ServerName =“station4”
tr_Base.LogId =“sa”
tr_Base.AutoCommit = False
tr_Base.DBParm =“”
3.cb_create按钮单击事件
根据业务需要这里创建数据文件和日志文件大小为100MB,最大值为200MB增量为20MB按钮cb_create根据输入参数构造动态SQL语句创建数据库cb_createclicked事件脚本如下:
//数据库名
ls_database
//数据文件路径及文件名
ls_dataFile
//日志文件路径及文件名
ls_logFile
//创建数据库SQL语句
ls_mySql
//逻辑数据文件名
ls_logicalFileName
//逻辑日志文件名
ls_logicalLogName
SetPoer(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 _disibledevent=>+“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
SetPoer(Arrow!)
4.cb_table按钮单击事件
按钮cb_table从指定脚本文件(sle_script.text)中读取内容构造动态SQL语句创建数据对象为简化对于脚本文件大于32765字节情况本文没做处理读者可用多次读文件等技术自行处理
cb_tableclicked事件脚本如下:
//创建数据对象前时间
datetime ldt_create
//数据库名
ls_database
//创建数据对象SQL语句
ls_sql
//存储脚本文件名
ls_fileName
//打开文件文件号
li_fileNo
//文件长度读取文件字节数
long ll_fileLength, ll_number
//取得新建数据库名称
ls_database = trim(sle_database.text)
MessageBox(“请确认”,“将要在”+ls_database+“数据库中生成表结构?”, Question!,YesNO!,2) = 2 then

end
SetPoer(HourGlass!)
//为连接业务数据库事务对象设置数据库值
tr_Base.DataBase = ls_database
connect using tr_Base;
tr_Base.sqlcode <> 0 then
MessageBox (“数据库连接”,“不能连接到SQL Server数据库:” +ls_database + “ ~n~r”+“信息:”+ tr_Base.sqlerrtext)

end
//取得建立数据对象时间并从系统表sysobjects中提取建立数据对象
Select distinct getDate
o :ldt_create
from sysobjects
using tr_Base;
//此数据窗口将显示新建事务对象
dw_objects.SetTransObject(tr_Base)
//从输入中取得脚本文件名
ls_fileName = trim(sle_script.text)
ll_fileLength = FileLength(ls_fileName)
//对大于32765字节文件不做处理
ll_fileLength > 32765 then
MessageBox(“”,“脚本文件太大”)
DISCONNECT USING tr_Base;

ll_fileLength > 0 then
//读取文件内容执行动态SQL语句
li_fileNo = FileOpen(ls_fileName, StreamMode!)
ll_number = FileRead(li_fileNo, ls_sql)
ll_number > 0 and ll_number <= 32765 then
tr_Base.AutoCommit = True
EXECUTE IMMEDIATE :ls_sql
Usingtr_Base;
tr_Base.AutoCommit = False
end
FileClose(li_fileNO)
//不能正确读取文件信息
sle_script.Focus
sle_script.SelectText(1,len(sle_script.text))
MessageBox(“打开脚本文件出错”,“请输入正确表结构脚本文件名称”)
DISCONNECT USING tr_Base;

end
//检索刚刚建立数据对象
dw_objects.Retrieve(ldt_create)
DISCONNECT USING tr_Base;
SetPoer(Arrow!)


Tags:  pb打开数据库 pb数据库 pb连接数据库 创建数据库的方法

延伸阅读

最新评论

发表评论