完成在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 &