VB操作Access数据库方法
使用ADODB
首先,声明一个链接变量,并根据需要声明记录集变量。
Dim LocCnn1 As ADODB.Connection Dim LocRst1 As ADODB.Recordset
建立与数据库的链接,如果数据库没有口令,最后一行可以不写(写上也不会错)。
Set LocCnn1 = New ADODB.Connection LocCnn1.Open ″Provider=Microsoft.Jet.OLEDB.4.0?User ID=Admin?″ & _ ″Data Source=″ & App.Path & ″\\数据库名称.mdb?″& _ ″Mode=Share Deny None?Extended Properties=''?Persist Security Info=False?″ & _ ″Jet OLEDB?Database Password='asp561rbc'?″
这种方法虽然代码长一些,但对数据环境要求低,且结构清晰,所编写的发布程序也大为减小。由于与链接SQL Server等数据库的方法一样,因而大量的操作数据库的代码相同,当数据库需要由Access扩充到一些大型数据库,或由一些大型数据库裁剪出一个简单数据库时,程序的移植会比较方便。
另外,这种方法对于Access97及Access2000均能很好地支持,兼容性好。对于大量插入、删除、修改等操作,只在Connection层进行即可,既可提高速度又可减少代码。
如果还要获取具体的记录集内容,则须再根据条件打开具体的库表,代码如下:
Set LocRst1 = New ADODB.Recordset LocRst1.CursorType = adOpenKeyset LocRst1.LockType = adLockOptimistic LocRst1.Open ″SELECT ? FROM 表名″? LocCnn1?adCmdText
ADO常用方法
下面是我所掌握的使用ADO对数据库操作的一些常用方法,主要是提供给初学者作为参考,有不对的地方请指正。如有补充不胜荣幸
准备工作 ========
Dim conn As New ADODB.Connection '创建一个 Connection 实例,在这里使用New等于将Dim和Set合并为一段代码执行
Dim rs As ADODB.Recordset '创建一个 Recordset 实例,不使用New 是因为,经常需要重复使用Set,因此没必要在这里使用
Dim CnStr As String, Sql As String '创建两个字符串变量分别存放两个集合的SQL语句代码段
1、装载数据库(不属于Recordset集合) =============
Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$
'以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码
FileName = App.Path & \"\\'数据库名'\" DbIp = \"数据库地址\" DbName = \"数据库名\"
DbUser = \"数据操作员用户名\" DbPw = \"操作员密码\"
'以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量 '1)连接Access数据库: '-------------------
CnStr = \"PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=\" & FileName & \";Jet OLEDB:Database Password=\" & DbPw '2)连接Oracle数据库: '-------------------
CnStr = \"PROVIDER=MSDAORA.1;Password=\" & DbPw & \";User ID=\" & DbUser & \";Data Source=\" & FileName & \";Persist Security Info=True\" '其中:
'PASSWORD: 密码 'User ID: 用户号 'Data Source: 数据库名 'Persist Security Info: 'Provider:
'3)连接VF的DBF库: '----------------
CnStr = \"PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Micro
soft Visual FoxPro Driver};UID=\" & DbUser & \";SourceDB=\" & FileName &
\";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;\" '4)连接SQL的数据库 '------------------
CnStr = \"PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=\" & DbUser & \";pwd=\" & DbPw & \";DRIVER=SQL Server;DATABASE=\" & DbName & \";WSID=GQSOFT;SERVER=\" & DbIP
'也可以使用这段简易代码 CnStr = \"Provider=SQLOLEDB;Data Source=\" & DbIp & \";DATABASE=\" & DbName & \";UID=\" & DbUser & \";pwd=\" & DbPw Conn.Open cnstr '使用 Connection 集合的 Open 方法 与数据库建立连接 2、Recordset集合的常用方法 ========================== '1)打开一个表 '------------
Sql = \"select * from 表名\" 'SQL查询语句 Set rs = New ADODB.Recordset '新建一个实例
rs.Open Sql, conn '使用 Open 方法打开数据库中的一个表
'注意,这种打开方式只能使用 rs.MoveNext (即,向后移动行坐标)而不能像其他方向,并且不能修改数据内容 '
'rs.Open Sql, conn,1 '虽然只加了个“1”,但这种方法可以向任何方向移动行坐标。 '
'以下参数代表了这个可选值的含义
'0 = adOpenForwardOnly (默认值)打开仅向前类型游标。 '1 = adOpenKeyset 打开键集类型游标。 '2 = adOpenDynamic 打开动态类型游标。 '3 = adOpenStatic 打开静态类型游标。 '
'虽然使用以上方法可以可以实现行坐标(游标)的任意移动,但是仍然无法写入数据。因此需要进一步的对Open 方法进行完善
'rs.Open Sql, conn, 1, 3 '后面的3是确定读写权限的
'以下参数代表了这个可选值的含义
'1 = adLockReadOnly (默认值)只读 — 不能改变数据。 '2 = adLockPessimistic 保守式锁定(逐个) — 在编辑时立即锁定数据源的记录。
'3 = adLockOptimistic 开放式锁定(逐个) — 只在调用 Update 方法时才锁定记录。
'4 = adLockBatchOptimistic 开放式批更新 — 用于批更新模式(与立即更新模式相对)。 '
'2)读写数据 '----------
'增加一行记录并对新记录的内容进行修改并保存可以如下写法 rs.AddNew '增加一行记录
rs(\"...\")=\"...\" '数据读写操作 ...
rs.UpDate '保存写入资料,如果使用只读权限,则不能使用这个方法
rs.Close '这个方法用来关闭你所代开的表,如果不使用这个方法也可以,但是数据库仍然认为你在对标进行锁定,可造成数据库负担过重 2、对数据进行筛选和排序 =======================
Sql = \"select * from 表名\" 'SQL查询语句 '以上为打开一个表的所有内容
Sql = \"select top 50 * from 表名\" 'SQL查询语句 '以上为只打开前50行的记录
Sql = \"select top 50 列名1,列名2,列名5 from 表名\" 'SQL查询语句 '以上为只打开前50行的记录,并且只打开第1、2、5列数据
Sql = \"select * from 表名 where 列名1='\" & 字段 & \"'\" 'SQL查询语句 '以上为一个简单的筛选,表示打开的内容必须符合[列名1='\" & 字段 & \"'\"]的内容
'需要注意的是,数据库列的类型必须匹配,比如字符串类型需要以单引号括起 '而数字类型则不能用单引号括起
'另外SQL语句还支持通配符,例如 列名1 like '%\" & 字段 & \"%'\" 表示包含[字段]
'在表达式中的匹配
'? _(下划线) 任何单一字符
'* or % 零个或多个字符
'# 任何单一数字(0 — 9) '[charlist] 任何在字符表中的单一字符 '[!charlist] 任何不在字符表中的单一字符
'注:根据数据库的不同?、_和*、%的应用有所差别,比如SQL只使用% 和 _ 分别代表多个字符和单一字符
Sql = \"select * from 表名 where 列名1='\" & 字段 & \"' ORDER BY 字段1 ASC\" '对查询结果进行升序排列
Sql = \"select * from 表名 where 列名1='\" & 字段 & \"' ORDER BY 字段1 DESC\" '对查询结果进行降序排列
Sql = \"select * from 表名 where 列名1='\" & 字段 & \"' ORDER BY 字段1 DESC, ORDER BY 字段2 DESC\" '对查询结果进行降序排列(速度奇慢,不推荐使用)
3、Recordset集合的常用属性方法 ==============================
rs.BOF '是否游标在最上边 rs.EOF '是否游标在最下边 rs.RecordCount '记录集的行数(如果使用像前类型的游标,可能返回不准确)
rs.AddNew '新建一行记录
rs.Update '保存当前行被修改的记录 rs.Delete '删除当前行 rs.Close '关闭记录集
4、Fields集合的一些属性的解释 =============================
'以下为简写,正常情况需要rs.Fileds.。。。但是Fields属于Recordset的一个默认集合,因此可以省略
rs() '括号内可以是列名也可以是列的序号例如:rs(\"姓名\")、rs(3) 都是是可以的
rs(3).Name '返回列名 rs(3).Type '返回列的类型 rs(3).Value '返回当前行的值 rs.Fields.Count '返回列数
阅读全文(463) | 回复(2) |反映问题 | 引用通告(0) | 编辑
• 标签:数据库
上一篇:right\\left\\mid 函数的运用-----读取路径中的文件名 • 下一篇:如何用纯代码来控制WMP的播放
•
2009-6-1 15:02:52
Re:VB操作Access数据库方法
工程引用
Microsoft ActiveX Data Objects 2.1 Library
然后添加代码:
Private dbName As String '数据库名字
Private conn As ADODB.Connection '数据库连接 Private rs As ADODB.Recordset '搜索记录集 Private sqlString As String '搜索字符串
Private Sub Form_Load()
'获得数据库地址 dbName = App.Path
If Right(dbName, 1) <> \"\\\" Then dbName = dbName & \"\\\" dbName = dbName & \"zx.mdb\"
'连接有密码数据库
' Set conn = New ADODB.Connection ' conn.ConnectionString = _
' \"Provider=Microsoft.Jet.OLEDB.4.0;\" & _ ' \"Data Source=\" & dbName & \";\" & _
' \"Jet OLEDB:Database Password=\" & password
'连接无密码数据库
Set conn = New ADODB.Connection conn.ConnectionString = _
\"Provider=Microsoft.Jet.OLEDB.4.0;\" & _ \"Data Source=\" & dbName & \";\" & _ \"Persist Security Info=False\" conn.Open
''''''''''''''''''''''''''''''''''' '下面是一个例子,插入记录 '你可以随便改变sqlString '执行你自己的操作
''''''''''''''''''''''''''''''''''''
'插入新纪录
Sub InsertData()
sqlString = \"insert into txl (Name) values('\" & NewName & \"')\" Set rs = conn.Execute(sqlString, , adCmdText)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'关闭数据库连接 rs.Close conn.Close End Sub
个人主页 | 引用 | 返回 | 删除 | 回复
2009-6-1 10:42:08
Re:VB操作Access数据库方法
在VB编程中通常要与数据库打交道,对于数据量较小的应用,一般选用
Access作为数据库,因为Access数据库比较简单,功能也比较齐全,数据的备份、拷贝都很方便,且程序发布时不需要额外单独安装其它的数据库管理软件。因此,在功能能够满足要求的条件下,Access数据库往往成为一些小型数据库软件的首选。
关于用VB操作Access库表的方法有多种,一般初学者往往会使用数据控件,许多资料上也大都以此作为操作Access数据库的起点来介绍,因为这个方法使用起来非常简单,但使用数据控件的方法在程序编码上往往不够灵活。现在介绍一下其它两种操作Access数据库的方法。
第一种:使用数据库对象
首先,要进行有关数据对象的声明,代码如下。
Dim MyWs As Workspace Dim MyDB As Database
Dim WordTab As Recordset
生成工作区,打开数据库,然后再根据需要打开相应的库表。
Set MyWs = DBEngine.CreateWorkspace?″″? ″Admin″? ″″? dbUseJet?
Set MyDB = MyWs.OpenDatabase?数据库名称? False? False? Set WordTab = MyDB.OpenRecordset?″表名″? dbOpenDynaset?
这种方法的优点是代码比较简单,要求的环境为DAO 2.5/3.51,其中表名可以换成SELECT语句,即根据条件打开所需要的记录集,这种方法可脱离数据控件,可以比较方便灵活地操作数据库表,增加了程序的灵活性。
提示:经过测试发现,这种方法只能打开Access97库表,对于Access2000库表却为力,会弹出库表格式不对的出错提示。另外,对数据环境的要求仍比较多。