选择显示字体大小

在vb中更改sql server数据库结构


  10785发"凉山州林业局"天然林资源保护综合管理系统中,需要为程序建立sql server数据库的运行环境。为了方便用户,笔者开发了这个数据库配置工具。 完成在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 nullnull],…)

   说明: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数据库配置变得简单、方便了。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons