分享
 
 
 

VB实现SQL Enterprise Manager功能

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

完成在SQL Server数据库中建立设备,建立数据库,建立表格,分配权限的功能方便了数据库应用程序所需Sql Server环境的建立,根本不用启动SQL Enterprise Manager配置数据库。

这个小工具由VB开发,利用ADO 访问数据库,实现更改数据库结构,其他语言也可以此作为参考。启动VB6.0,新建一个工程,在菜单-工程-引用里选"Microsoft ActiveX Data Objects 2.0 Library",代码里需要有

dim conn As New ADODB.Connection

定义ADO数据库对象

conn.ConnectionString = "driver={SQL Server};" & _

"server=" & ServerName & ";uid=" & UserName & ";

pwd=" & Password & ";database=" & DatabaseName & ""

连接数据串

conn.open 连接数据库

注:ServerName为服务器名;UserName为用户名;Password为用户口令; DatabaseName要登录的数据库名,可以为空。

核心代码如下:

一、建立数据库

原理:建立数据库先要初始化一个数据库设备,然后在此设备上建立数据库。所有的设备名在系统表"sysdevices"里有记录,所有的数据库名在系统表"sysdatabases"里有记录。在建立之前,最好先查询这两个系统表,看名称是否已经存在。在建立设备之前,还需要的一个物理名和空闲的设备标识号。

初始化设备语法:

DISK INIT NAME="device_name",PHYNAME=

"physical_name",VDEVNO=device_number,

SIZE=numberofblock

说明:这里,NAME是数据库设备名(一个有效的标识符),PHYNAME(数据库设备的物理名)是原始的磁盘分区UNIX或外设(vms)名,或者是操作系统的文件名。VDEVNO时数据库的设备标识号,合法值为1-255,SIZE的单位是2KB的块,例如1MB(1024KB)时SIZE值为512。

建立数据库语法:CREATE DATABASE database_name [ON database_device]

说明:database_name是要建的数据库名,database_device是设备名

要新建立一个数据库,就需要设备名,数据库名,物理名和设备号。具体步骤如下:

我们假设用户要新建立设备dbName,在设备dbName上建立数据库dbName。

1)得到设备名 bName是用户给出的设备名;先查询系统表sysdevices,看用户给出的设备名dbName是否已经存在,如果此设备名存在,就需要更换一个设备名,因为设备名是唯一的。

sql = "select * from sysdevices

where name=" & dbName & ""

Set rs = conn.Execute(sql)

If Not rs.EOF Then

MsgBox "设备名"" & dbName & ""

已存在!", 16, "请重新输入名称"

Exit Sub

End If

2)得到数据库名。dbName是用户给出的数据库名;查询系统表sysdatabases,看用户给出的数据库名dbName是否已经存在,如果此数据库存在,就需要更换一个数据库名,像设备名一样,数据库名也是唯一的

sql = "select * from sysdatabases

where name=" & dbName & ""

Set rs = conn.Execute(sql) 下面代码略

3)得到PHYNAME物理名。查询服务器上数据库文件的物理位置serverpath,典型的,我们可以从系统表sysdevices中查询master(这是SQL Server的主库名)数据库的位置,例如G:\MSSQL\DATA\MASTER.DAT,则我们的数据库可以建在"G:\MSSQL\DATA\"目录下。

sql = "select name,phyname from sysdevices "

low/16777216为设备号

Set rs = conn.Execute(sql)

然后遍历记录对象rs,当name="master"时,取出phyname,

从而可以得到物理位置serverpath =G:\MSSQL\DATA\。

4)得到一个空闲的设备号vdevno。设备号合法值1~255,遍历这些号,查找出未被使用的空闲设备号,下面程序得到已有的设备号

sql = "select distinct low/16777216

from sysdevices order by low/16777216"

low/16777216为设备号

5)建立数据库。所需的信息都准备完毕,可以建立数据库了(注:下面的"" & Chr(34) & ""就是一个"""双引号,这样处理后,才能满足语法要求;数据库为20M,则dbSize=512*20)

sql = "DISK INIT NAME=" & Chr(34) & ""

& dbName & "" & Chr(34) & ",PHYSNAME="

& Chr(34) & "" & serverpath & "" & dbName

& ".dat" & Chr(34) & ",VDEVNO=" & vdevno

& ",SIZE=" & dbSize & ""

Set rs = conn.Execute(sql) 初始化设备

sql = "CREATE DATABASE " & dbName & "

on " & dbName & "=" & dbSize & ""

注:

第一个dbName是数据库名,

第二个dbName是设备名

Set rs = conn.Execute(sql)

在设备dbName上建立数据库dbName

MsgBox "数据库"" & dbName & ""建在服务器上

"" & serverpath & "" & dbName & ".dat",

建立成功!", 64, "成功"

二、建立表格

建立表格比较简单,这里用到了自动计数字段和缺省值字段类型,语法如下:

CREATE TABLE table_name

(field_name data_type [NOT NULL|NULL],…)

说明:table_name为新建的表名,field_name为字段名,data_type为数据类型。

(注意下面的fileid int IDENTITY字段自动计数,

datetime NOT NULL DEFAULT(GETDATE())字段每当入

库时有个缺省值,由数据库生成当时的时间)。

sql = "CREATE TABLE " & TableName & "

(fileid int IDENTITY, filetime datetime NOT

NULL DEFAULT(GETDATE()),fileimage image NULL )"

conn.Execute sql 建立表格

三、建立用户组用户

建立用户组和用户不能直接通过SQL语句完成,需要执行SQL Server的存储过程sp_addlogin,sp_addgroup, sp_adduser。我们假设新建登录账号是username1,用户名是username1,组名是group1,则步骤如下:

1)建立用户的登录账号

语法:sp_addlogin login_name,password[,defdb]

其中,login_name是用户的登录名,password是用

户的口令,defdb上登录的缺省数据库名称。建立数

据库DatabaseName的登录账号:

sql = "EXECUTE sp_addlogin " & username1 & ","

& password1 & "," & DatabaseName & ""

Set rs = conn.Execute(sql)

2)增加用户组

语法:sp_addgroup group_name

其中,group_name 是新建组名

sql = "EXECUTE sp_addgroup " & group1 & ""

Set rs = conn.Execute(sql)

3)增加用户

语法:sp_adduser login_name

[,name_in_db][,grpname]]

其中,login_name用户名,name_in_db是用户在当

前数据库中的名字(这里是第一步建立的登录账号

username1),grpname是要将用户加入的那个组的组名。

在数据库DatabaseName增加用户username1:

sql = "EXECUTE sp_adduser " & username1 & "," &

username1 & "," & group1& ""

注:第一个username1是用户名,第二个username1是

数据库DatabaseName的登录账号

Set rs = conn.Execute(sql)

四、分配权限

语法:grant permission_list on object_name to who

其中,permission_list是所要分配的权限清单,object_name是在这个对象上的权限,who是接受授权的用户。

先从系统表sysobjects得到所有的用户建立表格名(type=U)

sql = "select name from sysobjects where type=U"

Set rs = conn.Execute(sql)

然后从中选取所需要的表格来分配权限给其他用户。例如,这里选择将tablename3的读取权限分配给组group1。

sql = "grant select on " & tablename3 &

" to " & group1 & ""

conn.Execute sql

由于这个小工具的使用,使SQL Server数据库配置变得简单、方便了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有