在VB中更改SQLServer数据库结构

2016-02-19 18:11 7 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的在VB中更改SQLServer数据库结构,希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

笔者在开发"凉山州林业局"天然林资源保护综合管理系统中,需要为程序建立SqlServer数据库的运行环境。为了方便用户,笔者开发了这个数据库配置工具。完成在SQLServer数据库中建立设备,建立数据库,建立表格,分配权限的功能,"凉山州林业局"系统中的所有数据库配置操作都可以通过这个小工具完成。方便了数据库应用程序所需SqlServer环境的建立,根本不用启动SQLEnterpriseManager配置数据库。
  
  ----这个小工具由VB开发,利用ADO访问数据库,实现更改数据库结构,其他语言也可以此作为参考。启动VB6.0,新建一个工程,在菜单-工程-引用里选"MicrosoftActiveXDataObjects2.0Library",代码里需要有
  
  dimconnAsNewADODB.Connection
  '定义ADO数据库对象
  conn.ConnectionString="driver={SQLServer};"&_
  "server="&ServerName&";uid="&UserName&";
  pwd="&Password&";database="&DatabaseName&""
  '连接数据串
  conn.open'连接数据库
  
  ----注:ServerName为服务器名;UserName为用户名;Password为用户口令;DatabaseName要登录的数据库名,可以为空。
  ----核心代码如下:
  
  一、建立数据库
  ----原理:建立数据库先要初始化一个数据库设备,然后在此设备上建立数据库。所有的设备名在系统表"sysdevices"里有记录,所有的数据库名在系统表"sysdatabases"里有记录。在建立之前,最好先查询这两个系统表,看名称是否已经存在。在建立设备之前,还需要的一个物理名和空闲的设备标识号。
  初始化设备语法:
  DISKINITNAME="device_name",PHYNAME=
  "physical_name",VDEVNO=device_number,
  SIZE=numberofblock
  
  ----说明:这里,NAME是数据库设备名(一个有效的标识符),PHYNAME(数据库设备的物理名)是原始的磁盘分区UNIX或外设(vms)名,或者是操作系统的文件名。VDEVNO时数据库的设备标识号,合法值为1-255,SIZE的单位是2KB的块,例如1MB(1024KB)时SIZE值为512。
  ----建立数据库语法:CREATEDATABASEdatabase_name[ONdatabase_device]
  
  ----说明:database_name是要建的数据库名,database_device是设备名
  
  ----要新建立一个数据库,就需要设备名,数据库名,物理名和设备号。具体步骤如下:
  
  ----我们假设用户要新建立设备dbName,在设备dbName上建立数据库dbName。
  
  ----1)得到设备名。dbName是用户给出的设备名;先查询系统表sysdevices,看用户给出的设备名dbName是否已经存在,如果此设备名存在,就需要更换一个设备名,因为设备名是唯一的。
  
  sql="select*fromsysdevices
  wherename='"&dbName&"'"
  Setrs=conn.Execute(sql)
  IfNotrs.EOFThen
  MsgBox"设备名""&dbName&""
  已存在!",16,"请重新输入名称"
  ExitSub
  EndIf
  
  ----2)得到数据库名。dbName是用户给出的数据库名;查询系统表sysdatabases,看用户给出的数据库名dbName是否已经存在,如果此数据库存在,就需要更换一个数据库名,像设备名一样,数据库名也是唯一的
  sql="select*fromsysdatabases
  wherename='"&dbName&"'"
  Setrs=conn.Execute(sql)'下面代码略
  
  ----3)得到PHYNAME物理名。查询服务器上数据库文件的物理位置serverpath,典型的,我们可以从系统表sysdevices中查询master(这是SQLServer的主库名)数据库的位置,例如G:MSSQLDATAMASTER.DAT,则我们的数据库可以建在"G:MSSQLDATA"目录下。
  sql="selectname,phynamefromsysdevices"
  'low/16777216为设备号
  Setrs=conn.Execute(sql)
  然后遍历记录对象rs,当name="master"时,取出phyname,
  从而可以得到物理位置serverpath=G:MSSQLDATA。
  
  ----4)得到一个空闲的设备号vdevno。设备号合法值1~255,遍历这些号,查找出未被使用的空闲设备号,下面程序得到已有的设备号
  sql="selectdistinctlow/16777216
  fromsysdevicesorderbylow/16777216"
  'low/16777216为设备号
  
  ----5)建立数据库。所需的信息都准备完毕,可以建立数据库了(注:下面的""&Chr(34)&""就是一个"""双引号,这样处理后,才能满足语法要求;数据库为20M,则dbSize=512*20)
  sql="DISKINITNAME="&Chr(34)&""
  &dbName&""&Chr(34)&",PHYSNAME="
  &Chr(34)&""&serverpath&""&dbName
  &".dat"&Chr(34)&",VDEVNO="&vdevno
  &",SIZE="&dbSize&""
  Setrs=conn.Execute(sql)'初始化设备
  sql="CREATEDATABASE"&dbName&"
  on"&dbName&"="&dbSize&""
  '注:
  第一个dbName是数据库名,
  第二个dbName是设备名
  Setrs=conn.Execute(sql)'
  在设备dbName上建立数据库dbName
  MsgBox"数据库""&dbName&""建在服务器上
  ""&serverpath&""&dbName&".dat",
  建立成功!",64,"成功"
  
  二、建立表格
  ----建立表格比较简单,这里用到了自动计数字段和缺省值字段类型,语法如下:
  CREATETABLEtable_name
  (field_namedata_type[NOTNULL|NULL],…)
  
  ----说明:table_name为新建的表名,field_name为字段名,data_type为数据类型。
  (注意下面的fileidintIDENTITY字段自动计数,
  datetimeNOTNULLDEFAULT(GETDATE())字段每当入
  库时有个缺省值,由数据库生成当时的时间)。
  sql="CREATETABLE"&TableName&"
  (fileidintIDENTITY,filetimedatetimeNOT
  NULLDEFAULT(GETDATE()),fileimageimageNULL)"
  conn.Executesql'建立表格
  
  三、建立用户组用户
  ----建立用户组和用户不能直接通过SQL语句完成,需要执行SQLServer的存储过程sp_addlogin,sp_addgroup,sp_adduser。我们假设新建登录账号是username1,用户名是username1,组名是group1,则步骤如下:
  ----1)建立用户的登录账号
  
  语法:sp_addloginlogin_name,password[,defdb]
  其中,login_name是用户的登录名,password是用
  户的口令,defdb上登录的缺省数据库名称。建立数
  据库DatabaseName的登录账号:
  sql="EXECUTEsp_addlogin"&username1&","
  &password1&","&DatabaseName&""
  Setrs=conn.Execute(sql)
  
  ----2)增加用户组
  语法:sp_addgroupgroup_name
  其中,group_name是新建组名
  sql="EXECUTEsp_addgroup"&group1&""
  Setrs=conn.Execute(sql)
  
  ----3)增加用户
  语法:sp_adduserlogin_name
  [,name_in_db[,grpname]]
  其中,login_name用户名,name_in_db是用户在当
  前数据库中的名字(这里是第一步建立的登录账号
  username1),grpname是要将用户加入的那个组的组名。
  
  在数据库DatabaseName增加用户username1:
  sql="EXECUTEsp_adduser"&username1&","&
  username1&","&group1&""
  '注:第一个username1是用户名,第二个username1是
  数据库DatabaseName的登录账号
  Setrs=conn.Execute(sql)
  
  四、分配权限
  ----语法:grantpermission_listonobject_nametowho
  ----其中,permission_list是所要分配的权限清单,object_name是在这个对象上的权限,who是接受授权的用户。
  
  ----凉山州林业局"系统需要将特殊用户建立的表授权给其他用户,所以先从系统表sysobjects得到所有的用户建立表格名(type='U')
  
  sql="selectnamefromsysobjectswheretype='U'"
  Setrs=conn.Execute(sql)
  
  ----然后从中选取所需要的表格来分配权限给其他用户。例如,这里选择将tablename3的读取权限分配给组group1。
  sql="grantselecton"&tablename3&
  "to"&group1&""
  conn.Executesql
  
  ----由于这个小工具的使用,使SQLServer数据库配置变得简单、方便了。->

来源:https://www.tulaoshi.com/n/20160219/1616981.html

延伸阅读
标签: vb
DAO(Data Access Object)全称为数据访问对象,它是数据库编程的重要方法之一。DAO的一种面向对象的界面接口,特色为它不是可视化的对象,使用它全部都要靠编码来完成,DAO是设计关系型数据库系统结构的对象类的集合。它提供了完成管理这样一个系统所需的全部操作的属性和方法,包括创建数据库,定义表、字段和索引,建立表间的关系,定位...
标签: SQLServer
在软件开发过程中经常会遇到数据库升迁的问题,原因比较多,如acsess访问速度比sql server慢、删除数据记录后access会留下空档,文件越来越大(也可用压缩修复的方式减小文件大小,但太麻烦),访问速度越来越慢,甚至会数据库损坏,损坏得比较轻的可以找第三方工具来修复,便严重时会导致数据库无法修复,或修复后数据记录会损坏。所以我们...
标签: vb
· "公共队列"在整个可传递消息的"消息队列"网络中复制并传输,并且有可能由网络连接的所有站点访问。 · "专用队列"不在整个网络中发布。相反,它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。 · "管理队列"包含确认在给定"消息队列"网络中发送的消息回执的消息。指定希望 Me...
DataSet ds=new DataSet(); System.Data.SqlClient.SqlConnection cnn=new System.Data.SqlClient.SqlConnection("server=(local);database=northwind;trusted_connection=yes") ; cnn.Open(); System.Data.SqlClient.SqlCommand cmd=new System.Data.SqlClient.SqlCommand(); cmd.Connection=cnn; cmd.CommandText="Select * from PersonDeta...
  最近在CSDN上看到两篇关于《DELPHI中存取JPEG文件到SQLSERVER》中的文章之后,觉得其中讲述的方法虽然有可取之处,但颇费时,我这里有更简单的操作方法,而且安全可靠,不敢一人独享,愿发布出来与大家共享。在Delphi7.0+Win2000+SqlServer 2000中测试通过,运行良好,现将思路、源码公开如下: 解决思路: 1、 关键在于将...

经验教程

381

收藏

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