【数据库】VB对MDB数据库的编程杂谈,未整理 - EnCaL

【数据库】VB对MDB数据库的编程杂谈(未整理)

1.建立数据表

CREATE TABLE 数据表名 (字段名1 数据类型(长度), 字段名2 数据类型(长度),……)

举例:create table student(xh text(9), xm text(8) , cj single(4), nl integer(2))

建立含有xh、xm、cj、nl 4个字段的student表

2.添加字段

ALTER TABLE 数据表名 ADD COLUMN 字段名 数据类型(长度)

举例:alter table student add column xb text(2) \'在学生表中添加性别字段

3.删除字段

ALTER TABLE 数据表名 DROP COLUMN 字段名

举例: alter table student drop column nl \'将学生表中的年龄字段删除

4.数据查询

SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY 子句HAVING 子句 ORDER BY 子句 INTO 子句

举例:select xh, xm from student where xb="男" order by xh

从学生表中查询性别为男的学生,显示其学号和姓名并使结果按学号升序排列。

5.添加记录

INSERT INTO 数据表名(字段名1,字段名2……) VALUES(数据1,数据2……)

举例:insert into student (xh, xm, xb) values("015200101", "王小二", "男")

6.删除记录

DELETE FROM 数据表名 WHERE 条件表达式

举例:delete from student where xb="男"

7.更新记录

UPDATE 数据表名 SET 新数据值 WHERE 条件表达式

举例:update student set cj=cj+5 where xb="女"

2.------------------------------------------------------------------------------------------------

要能正确引用ADO数据对象,应在VB 6.0集成开发环境中选择“工程”菜单,再点击“引用”菜单项,在弹出的“引用”对话框中选中“Microsoft ActiveX Data Objects 2.1 Library”选项来添加ADO数据对象类型库。

3.------------------------------------------------------------------------------------------------

① DAO数据对象

  要能正确引用DAO数据对象来建立与数据库的连接,应先在VB集成开发环境中选择“工程”菜单,再点击“引用”菜单项,在弹出的“引用”对话框选择“Microsoft DAO 3.51 Object Library”选项来添加DAO数据对象类型库。

5.------------------------------------------------------------------------------------------------

\'RS.AbsolutePosition\'当前游标

\'RS.RecordCount \'表记录数

.RS.Fields.Count \'表字段多少

6.打开加密的数据庫------------------------------------------------------------------------

Set Conn = New ADODB.Connection

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & App.Path & "/Sjk.mdb;Jet OLEDB:Database password=269796455;"

Set RS = New ADODB.Recordset

RS.Open "select * from 单词_新概念英语 where 课目=\'1-001\' order by 序", Conn, 1, 1

9.添加记录到数据庫------------------------------------------------------------------------

RS.AddNew

RS.Fields!用户名 = Combo1.Text

RS.Fields!密码 = Text2.Text

RS.Update

10.修改数据库记录------------------------------------------------------------------------

RS.Fields!用户名 = Combo1.Text

RS.Fields!密码 = Text2.Text

RS.Update

11.动态加载VB控件(不用在原窗体预先添加)------------------------------------------------------------------------

Set text2 = Controls.Add("vb.textbox", "text2", P1(2))

text2.Visible = True

12.添加表字段名到下拉列表中------------------------------------------------------------------------

For I = 1 To RS.Fields.Count

Form1.P1_2_Combo1(3).AddItem RS.Fields(I - 1).Name

Next I

15.打开10条记录

RS.Open "select top 10 * from 单词_新概念英语 order by 序", Conn, 1, 2

16.关于rs.open sql,conn,1,1的问题

后面带1,1和不带1,1

带参数和不带参数有何区别吗。

不带1,1会出错

前一个1是游标类型,第二个是锁定类型,在ADODB.inc(好像是这个文件名)定义了一堆常量,其中就有这两个,但是必须要包含那个文件才可以使用,所以就都使用数值了

第一个:

1,前向游标:即读取数据记录只能从前向后读,不能返回,并且不能反映读取同时其它用户对数据库的更新

2,静态游标,可向前和向后,但是不能反映其它用户的更新

3,动态游标,功能最强,当然也最耗资源

第二个

1,只读锁定,只能读不可以写的锁定数数据库

2,悲观锁定,从打开数据库开始锁定数据库,即锁定时其它用户无法更新数据库

3,乐观锁定,只在更新的瞬间锁定数据库

4,批量乐观锁定,在更新完一批以后提交到数据库时才锁定,如果有很多用户同时在更新数据库,则有可能更新到同一条记录

悲观锁定最不容易发生冲突,但是锁定时间太长,各有各的用途,实际应用时选择

1,1 好像是只读

1,2 好像是擦入

1,3 好像是删除

rs.open sql,conn,1,1

前一个1是游标类型,表明是键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。

后一个1是锁定类型,说明是只读类型。

17.复制表

Conn.Execute "Select * Into 单词_自定义_sgzhxfsg2 from 单词_自定义_sgzhxfsg"

只复制表结构

Conn.Execute "Select * Into 单词_自定义_sgzhxfsg2 from 单词_自定义_sgzhxfsg where 1=0"

VB数据库连接recordset open的语法2007-11-19 22:35ADO常用方法

下面是我所掌握的使用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 ;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={Microsoft Visual FoxPro Driver};U;SourceDB=" & FileName &

";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"

\'4)连接SQL的数据库

\'------------------

CnStr = "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;u;pwd=" & DbPw & ";DRIVER=SQL Server;DATABASE=" & DbName & ";WS &

DbIP

\'也可以使用这段简易代码 CnStr = "Provider=SQLOLEDB;Data Source=" & DbIp & ";DATABASE=" & DbName & ";U;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 \'返回列数

\'*************************** *********************************

游标类型选项

Const adOpenForwardOnly = 0

前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。

Const adOpenKeyset = 1

静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。

Const adOpenDynamic = 2

键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。

Const adOpenStatic = 3

动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。

加锁类型选项

Const adLockReadOnly = 1

缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。

Const adLockPessimistic = 2

以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。

Const adLockOptimistic = 3

以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。

Const adLockBatchOptimistic = 4

执行多行批处理更新时使用这种类型

最后,打开一个记录集时,你可以指定一个Options参数。Options参数标明用来打开记录集的命令字符串的类型。告诉ADO被执行的字符串内容的有关信息有助于高效地执行该命令字符串。

你可以使用下面的常量作为Options参数:

adCMDTable。被执行的字符串包含一个表的名字。

adCMDText。被执行的字符串包含一个命令文本。

adCMDStoredProc。被执行的字符串包含一个存储过程名。

adCMDUnknown。不指定字符串的内容。(这是缺省值。)

在rs.open后面的参数设定。一般建议:

rs.open sql,conn,0,1 顺序遍历,不需要定位跳转,不需要添加删除更新操作,速度最快

rs.open sql,conn,1,3 遍历,可以进行更新操作,但不能进行定位跳转

rs.open sql,conn,2,3 可以进行所有操作,可以跳转

\'************************ ******************************

CursorType:游标类型,定义如下

0(adOpenForwardOnly): 只能在Recordset的记录中向前移动,但速度最快。

1(adOpenKeyset):可以在Recordset中任意移动,其他用户所做的记录修改可见,但其他用户添加的记录不可见,删除的记录字段值不能被使用。

2(adOpenDynamic):可以在Recordset中任意移动,其他用户增、删、改的记录都可见,但速度最慢。

3(adOpenStatic):可以在Recordset中任意移动,其他用户增、删、改的记录都不可见。

LockType:并发控制

0(adLockReadOnly):recordset的记录为只读

1(adLockPessimistic):只要保持Recordset为打开,别人就无法编辑该记录集中的记录.

2(adLockOptimistic):当update recordset中的记录时,将记录加锁

3(adLockBatchOptimistic):以批模式时更新记录时加锁

Options:指定source传递命令的类型

1(adCmdText):SQL语句

2(adCmdTable):数据表的名字

4(adCmdStoredProc):存储过程

8(adCmdUnknown):未知类型

发表于 2012-03-26 08:45 EnCaL 阅读(1804) 评论(0) 编辑收藏举报