VB中使用语句创建SQL数据库等操作.docx
- 文档编号:6225470
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:13
- 大小:21.79KB
VB中使用语句创建SQL数据库等操作.docx
《VB中使用语句创建SQL数据库等操作.docx》由会员分享,可在线阅读,更多相关《VB中使用语句创建SQL数据库等操作.docx(13页珍藏版)》请在冰点文库上搜索。
VB中使用语句创建SQL数据库等操作
VB中使用语句创建SQL数据库等操作(转载)
发表:
xhlbwb 阅读:
1257次 关键字:
不详 字体:
[大中小]
这个小工具由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)得到设备名bName是用户给出的设备名;先查询系统表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:
\MSSQL\DATA\MASTER.DAT,则我们的数据库可以建在"G:
\MSSQL\DATA\"目录下。
sql="selectname,phynamefromsysdevices"
low/16777216为设备号
Setrs=conn.Execute(sql)
然后遍历记录对象rs,当name="master"时,取出phyname,
从而可以得到物理位置serverpath=G:
\MSSQL\DATA\。
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&""
ADO的建立数据库连结
发表:
royone 阅读:
271次 关键字:
数据库ADO 字体:
[大中小]
ADO的建立连结
ADO的连结主要可分成透过OLEDBPrivder的方式与OLEDBProviderforODBC,前者
很明显的是Microsoft公司极力发展的方式,据说它比透过ODBC的方式快且所需资源少
,但实际上如何,几年之後就可很清楚了。
不过目前有Privder提供OLEDB介面者尚没有
非常多,但提供ODBC介面者就很多了,在只有ODBCDriver之下,如果也要使用ADO的话
那可以使用OLEDBProviderforODBC的介面,然而它的Performance和使用RDO来比,
那得花上好些工夫试看看,至少我没有那些工夫做这种事。
先看看OLEDBProviderforODBC的连法
DimconnstrAsString
Setcn=NewADODB.Connection
cn.Provider="MSDASQL" 'MicrosoftOLEDBProviderforODBC)
'因为是透过ODBC来做,所以connstr的设定,和使用RDOODBC的连结字串皆相同
connstr="UID=cww;PWD=jjh5612;Database=cwwpf@eis;"_
+"Driver={OpenLinkGeneric32BitDriver};"_
+"Host=192.168.0.61;"_
+";FetchBufferSize=30"_
+";NoLoginBox=Yes"_
+";Options="_
+";Protocol=TCP/IP"_
+";ReadOnly=No"_
+";ServerOptions="_
+";ServerType=Informix7.2"
cn.ConnectionString=connstr
cn.Open
sql="Select*fromtesttaborderbycase_no"
Setrs=NewADODB.Recordset
Setrs.ActiveConnection=cn '设定该Resultset依附在cn物件上开启
rs.CursorLocation=adUseServer
rs.LockType=adLockOptimistic
rs.CursorType=adOpenKeyset
rs.Source=sql
rs.Open
如此启了一个Connection。
不过这边要提出的是,ADO不像RDO它的Recordset物件不一定
要附属於某一个已开启的Connection物件。
回想一下,一般RDORecordset的建立是透过
rdoConnection.OpenResultset或rdoQuery.OpenResultset的方式,而rdoQuery的建立是
透过rdoConnection.CreateQuery,所以这里可见到rdoConnection/rdoQuery/rdoResultset
是有阶层观念的,rdoResultset一定要透过现存的一个rdoConnection物件才能建立,但
是在ADO则不同,adoResultset物件可以自行就产生了,不必透过adoConnection物件,但
它也可以将Connection依附在现存的adoConnection之下,像上面的例子便是如此。
而以
下的例子则是单独使用adoResultset建立连结的方式。
当然,单独使用Resultset物件来
建立连结它也有建立一个adoConnection来连,只是我们没有办法Reference到它;而在比
较复杂的系统(例如要有Transacction),那还是得先从adoConnection物件建立起再来做。
connstr="UID=cww;PWD=jjh5612;Database=cwwpf@eis;"_
+"Driver={OpenLinkGeneric32BitDriver};"_
+"Host=192.168.0.61;"_
+";FetchBufferSize=30"_
+";NoLoginBox=Yes"_
+";Options="_
+";Protocol=TCP/IP"_
+";ReadOnly=No"_
+";ServerOptions="_
+";ServerType=Informix7.2"
sql="Select*fromtesttaborderbycase_no"
Setrs=NewADODB.Recordset
'用以下的方式就不用单独设定CursorType/LockType/Source等等的属性,而原本第二
'个叁数是存放所依附的adoConnect物件,现在则改成连结的字串
rs.Opensql,constr,adOpenKeyset,adLockOptimistic
而使用OLEDB的方式呢?
Setcn=NewADODB.Connection
connstr="DataSource=OPEN_VIEW;User=cww;Password=jjh5612;InitialCatalog=Pubs"
cn.Provider="SQLOLEDB" '设定Privder是SQLServerOLEDB,该名称随不同的
'DatabasePrivder不同而有所不同
cn.ConnectionString=connstr
cn.Open
sql="Select*fromAuthors"
Setrs=NewADODB.Recordset
Setrs.ActiveConnection=cn
rs.CursorLocation= adUseServer
rs.Opensql,cn,adOpenKeyset,adLockOptimistic
上面的例子中,DataSource指的是SQLServer的名称,而InitialCatalog指的是Database
名称在这里,我们也可以不设定Database的名称,而在adoConnection建立之後再来设
定Connection物件的DefaultDatabase如下:
Setcn=NewADODB.Connection
connstr="DataSource=OPEN_VIEW;User=cww;Password=jjh5612;"
cn.Provider="SQLOLEDB"
cn.ConnectionString=connstr
cn.Open
cn.DefaultDatabase="cwwtest"
sql="Select*fromtesttab"
Setrs=NewADODB.Recordset
Setrs.ActiveConnection=cn
rs.CursorLocation=adUseServer
rs.Opensql,cn,adOpenKeyset,adLockOptimistic
Setrs2=NewADODB.Recordset
cn.DefaultDatabase="Pubs"
rs2.Open"Select*fromAuthors",cn,adOpenForwardOnly,adLockReadOnly
如此一来,同一个Connection物件,便可以有不同Database的asoResultset物件附於其
上了。
而连结Access数据库呢?
cn.Provider="Microsoft.Jet.OLEDB.3.51"
connstr="DataSource=e:
\cwwtest.mdb;"
cn.ConnectionString=connstr
cn.Open
sql="Select*fromtesttaborderbycase_no"
Setrs=NewADODB.Recordset
Setrs.ActiveConnection=cn
rs.Opensql,cn,adOpenKeyset,adLockPessimistic
不过使用ADO来连结Access数据库有时候没有办法发挥得像DAO那般的流畅,例如说,在
这个例子中,虽然我们设定悲观锁定(adLockPessimistic),但实际上测试结果,它还是
乐观锁定。
再则,它没有办法像DAO使用Seek指令。
而且ADO没有CreateDatabase
CreateTable的功能;由这里来看,ADO取代DAO的日子尚未到来,但是VB6.0的环境,使
用ADO才有办法把一些良好的数据库环境表现子得很好。
引用Microsoft ADO Ext. for DDL and Security
Sub CreateTable()
Dim tbl As New Table
Dim cat As New ADOX.Catalog
' 打开目录。
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:
\new.mdb"
tbl.Name = "MyTable"
tbl.Columns.Append "Column1", adInteger '在access中是number类型
tbl.Columns.Append "Column2", adVarWChar '在access中是text类型
tbl.Columns.Append "Column3", adLongVarWChar '在access中是meno类型
cat.Tables.Append tbl
End SubTop
如果用户在网站连接access数据库时出现错误(未发现数据源或驱动程序),请改用以下连接串连接数据库。
conn.Open"driver={microsoftaccessdriver(*.mdb)};dbq="&Server.MapPath("数据库名.mdb")
或
conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;JetOLEDB:
DatabasePassword=数据库密码;DataSource="&Server.MapPath("数据库名.mdb")
存取数据库的原理
在ASP中,用来存取数据库的对象统称ADO对象(ActiveDataObjects),主要含有三种对象:
Connection、Recordset和Command,其中Connection负责打开或连接数据库,Recordset负责存取数据表,Command负责对数据库执行行动查询(ActionQuery)命令和执行SQLServer的StoredProcedure。
只依靠这三个对象还是无法存取数据库的,还必须具有数据库存取的驱动程序:
OLEDB驱动程序和ODBC驱动程序。
对于任何一种数据库都必须有相对应的OLEDB驱动程序和ODBC驱动程序,ADO对象才能对数据库进行存取。
连接数据库和打开数据表
不同数据库的连接方法有所不同(即建立Connection实例的方法不一样),但建立Connection实例后,利用Recordset对象进行存取数据的方法却大同小异。
下面对于不同的数据类型,编写了相对应的连接函数,在程序中直接引用即可。
程序用VBScript脚本语言编写。
1.建立MdbRecordset对象。
MDB数据库是一个完整的数据库,内部可能含
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 使用 语句 创建 SQL 数据库 操作
![提示](https://static.bingdoc.com/images/bang_tan.gif)