说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中更改SQL Server数据库结构

HTML文档下载 WORD文档下载 PDF文档下载
在VB中更改SQL Server数据库结构
四川省冕宁县
陈锦平
---- 笔者在开发"凉山州林业局"天然林资源保护综合管理系统中,需要为程序建立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)得到设备名。dbName是用户给出的设备名;先查询系统表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数据库配置变得简单、方便了。
ART运行时Foreground GC和Background GC切换过程分析 开创未来的关键:是什么造就了硅谷?(上) 微软前员工:开发Apple Watch应用的27个技巧 Apple Watch应用开发:从再造墨迹天气谈起 Java二十年特别策划:有奖征文,评选结果出炉! Zen=禅道:图解AMD技术战略转型 从友盟微社区看Android第三方SDK架构实践 无创客 不青春!2015全国大学生移动应用创新大赛在京启动 响应式Web开发,必懂媒体查询(系统理论+实战教程) 实例剖析:如何用Foundation For Apps创建完美Web应用 【舌尖上的CTO】兄弟肉夹馍的开发运维一体化 开创未来的关键:是什么造就了硅谷?(下) 安全漏洞影响2.5万iOS应用?AFNetworking维护者发布回应 《近匠》专访AbleCloud李海磊:IoT平台求变 腾讯、京东、微软等设计专家齐聚,探讨移动应用体验创新设计 TIOBE 2015年5月编程语言排行榜:微软系语言份额上升 《Hadoop核心技术》作者翟周伟 :我与Hadoop的不解之缘 云集百位核心专家 中国云计算大会演讲议题公布(表) 细品这杯香浓的咖啡——阿里中间件高级专家沈询的Java之旅 超图研究院院长李绍俊:创新2.0时代的平台软件研发体系 优麒麟(Ubuntu Kylin)15.04发布派对在天津成功举行 【CTO讲堂】以API为核心的移动应用云大发展时代 游戏设计的迭代误用:从半成品到概念修正 成功的社区在于拥抱变化——知乎创始人周源专访 优化UITableViewCell高度计算的那些事 国外iOS大牛:开发Apple Watch应用我犯过的错 云上Java System Profiling与Debugging——蚂蚁金服观察与实践 搜狗商业平台Java技术实践 Java在电信软件领域的技术实战 关于Java框架Vert.x的几点思考 Java在游戏服务器开发中的应用 我的WSAD 5.0的新建“数据库Web页面”,为什么“下一步”和“完成”都不能按?(详情请进!)请帮帮我! 机器被入侵,help 非常简单关于TreeView Control。的问题。喜欢大家帮忙, 求助 一个说易也不易的问题 cookie 只能已天为单位 来过期么? :( 30分钟就国旗 用什么? 请教高手 有些IE不能瀏覽flash文件﹐請問在哪有下載? 求购时间控件,用去web开发 如何才能按照分类显示视图的内容呢? 同志们 再见 接分! 再发一次,ie版本问题怎么解决,100分 请教:在Rational rose中如何去设计数据库表? 为什么wndows2k pro一访问windows2k server就有"打印机"和"任务计划"的共享,可不可以消除? win2k server下,iis5.0有问题,我想卸载,再重新安装,怎么做? treeview的使用小结(一) INDY 资料! 请分析这段代码,谢谢 怎样获得DataGrid的DataSource? 有关struts的问题,返回页面结果不对!在线等待,以解决就结帖 怎么改变快捷菜单PopupMenu1的颜色? 用OWC组件做柱状图,需要显示不同颜色的柱状以及显示不同颜色的图例 VS.NET中如何让自定义的事件出现在属性编辑器中? javascript 中有没有能返回指定某年某月中总天数的函数 如何将主窗体中的变量传到报表中,以供dataset查询用,急急急!!! 新手探路 不知道这是不是一个bug 函数返回值类型问题 兄弟我现在改行搞传统的邮政商业信函业务!给点建议!来者有分! 装有isa客户端的机器不能用FlashGet或者蚂蚁下载 网路多少钱才要交税? Kingofark关于英语及外语学习的50个观点 adotable定位记录有哪些方法?如何使用? 超高难度求sql语句,非高手莫进,在线等.......... petshop有些代碼不明白。。。。。。。。。。。 哎,运算符重载把我卡住了!求救!!! 最后 请问函数传递,设置默认值问题! 通过ODBC连接INFORMIX的问题!急!急!急! 有没有VC高手想在上海找工作? 求一个发送邮件的例子(急!!) 有谁碰到过多人同时改写几十个xml文件从而导致xml文件混乱的情况? 我在datawindow中设置initial vlaue=0,为什么写到数据库里的值还是null 请问联众和中游客户端的聊天大厅是基于chtmlview还是crichedit编程的? WINDOWS高级用户或技术支持人员请进! 通过ODBC连接INFORMIX的问题!急!急!急! 将数据保存到数据库问题 ???急。。。在线等待。。。 一个动态模板列的问题 请各位兄弟姐妹扔个FontTwister1.3的注册码上来,谢过了。 高分求救:怎么时查询后的记录成高亮状态! jsp中如何得到 select 控件的值??? 48、响尾蛇是从何处发出声音的?17093go, 2010年太阳有那些异常?地球和人类会受到那些影响? ‘没有地球太阳还是会绕’,这有错误吗? 从16分之67减去2.5与2分之3的差,结果是 多少? 连词成句(句子首字母已大写,标点已给出)South,country,not,America,is,a. 从8分之7的7分之2里连续减去( )个16分之1的差为0. 从16分之67中减去2.5与2分之3的差,结果是多少? 梦到黑熊,但是黑熊没有攻击我是什么意思? 做梦梦到黑熊有什么意思 请大写句首字母并加上句末标点什么意思 the school is far from the park.改为反义句 洛杉矶国际机场发生枪击事件 至少两人洛杉矶国际机场发生枪击事件 一嫌疑人希腊首都雅典发生枪击事件美国三大汽车制造商10月销量普增巴基斯坦塔利班证实其头目被美军无人机洛杉矶国际机场发生枪击事件 一嫌疑人洛杉矶国际机场发生枪击事件 嫌犯被执洛杉矶机场枪击案至少3人受伤 包括一洛杉矶国际机场发生枪击事件 至少两人洛杉矶国际机场发生枪击事件 一嫌疑人伦敦股市股指1日收盘基本持平48℃的坚守图片新闻北京常住人口总量控制在2300万以内爸爸被“快递”回家共创中伊关系美好明天美醉翁之意不在“中东”,俄才是众矢之“最忙独董”宋常涉内幕交易被调查 系将非首都功能疏解导入“精耕”节奏中国童书榜颁奖 原创作品占比过半名城保护 实施中轴线文保工程大股东减持不得违反短线交易规定
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘