在VB中更改SQL 数据库结构

2016-02-19 14:54 6 1 收藏

下面图老师小编要跟大家分享在VB中更改SQL 数据库结构,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

  笔者在开发"凉山州林业局"天然林资源保护综合管理系统中,需要为程序建立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 me是要建的数据库名,database_device是设备名

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
sql = "select * from sysdeviceswhere name=" & dbName & ""Set rs = conn.Execute(sql)If Not rs.EOF ThenMsgBox "设备名"" & dbName & ""已存在!", 16, "请重新输入名称"Exit SubEnd If
---- 2)得到数据库名。dbName是用户给出的数据库名;查询系统表sysdatabases,看用户给出的数据库名dbName是否已经存在,如果此数据库存在,就需要更换一个数据库名,像设备名一样,数据库名也是唯一的
sql = "select * from sysdatabaseswhere name=" & dbName & ""Set rs = conn.Execute(sql) 下面代码略
---- 3)得到PHYNAME物理名。查询服务器上数据库文件的物理位置serverpath,典型的,我们可以从系统表sysdevices中查询master(这是SQL Server的主库名)数据库的位置,例如G:MSSQLDATAMASTER.DAT,则我们的数据库可以建在"G:MSSQLDATA"目录下。
sql = "select name,phyname from sysdevices "  low/16777216为设备号Set rs = conn.Execute(sql)然后遍历记录对象rs,当name="master"时,取出phyname,从而可以得到物理位置serverpath =G:MSSQLDATA。
---- 4)得到一个空闲的设备号vdevno。设备号合法值1~255,遍历这些号,查找出未被使用的空闲设备号,下面程序得到已有的设备号
sql = "select distinct low/16777216from 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上建立数据库dbNameMsgBox "数据库"" & 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 NOTNULL 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数据库配置变得简单、方便了。

来源:http://www.tulaoshi.com/n/20160219/1608303.html

延伸阅读
标签: SQLServer
先把要恢复的文件置于MS SQL里的DATA文件里,进入MS SQL主数据库服务器后 1.我们使用默认方式建立一个供恢复使用的数据库(如MHDYF2005)。可以在SQL Server里面建立。 2.停掉数据库服务器。 3.将刚才生成的数据库的日志文件MHDYF2005_log.ldf删除,用要恢复的数据库mdf(yu1.mdf)文件覆盖刚才生成的数据库数据文件MHDYF2005...
摘要VisualBasic有着强大的数据库存取能力,不仅能够直接支持MsAccess数据库,而且通过其内部安装的ISAM驱动程序使它能间接支持FoxPro、dBASE等外来数据库。本文不仅从VB数据库体系结构的角度探讨了VB对这些外来数据库的支持,还结合了一些实例具体阐述了使用数据库存取对象变量的方法实现这些外来数据库的新建、库结构修改、显示及其运行环境设...
标签: 办公软件
Word共享Access数据最简单的方法是复制、粘贴,你只需打开Access数据库中的表,就可以像复制Excel数据那样复制Access数据然后粘贴到Word中。另外,Word还可以使用插入记录的方法共享Access、SQL数据。 1、插入全部记录 右键单击Word工具栏,选择“数据库”命令,打开“数据库”工具栏,单击“插入数据库”按钮,在打开的“数据库”...
标签: vb
DAO(Data Access Object)全称为数据访问对象,它是数据库编程的重要方法之一。DAO的一种面向对象的界面接口,特色为它不是可视化的对象,使用它全部都要靠编码来完成,DAO是设计关系型数据库系统结构的对象类的集合。它提供了完成管理这样一个系统所需的全部操作的属性和方法,包括创建数据库,定义表、字段和索引,建立表间的关系,定位...

经验教程

556

收藏

84
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部