1、种种不同规模的数据库系统,可以说与VB本身没有任何的关系,但是VB可以访问所有这些数据库中的数据,而且采用统一的访问方式。形象地比喻它们的关系是:VB是在屏幕上冲锋陷阵的工具(界面显示和控制),数据库系统是后面提供粮草或装备的基地(数据的管理)。 VB提供了方便的数据访问控件VB可以支持多种数据库系统VB提供数据对象可以灵活操作数据,为什么用VB开发数据库应用程序,文件方式数据的长期保存必须靠文件,通过文件的操作可以实现数据的保存、删除、查询。应用程序必须熟知数据是以何种结构存放到那个文件中的。任何数据结构的改变都将修改应用程序。比如增加了一个数据项,长度改变了等等。数据库出现了如何能够让应用
2、程序与数据的存储分离,数据结构的变化不再需要修改应用程序。数据库管理系统出现了,该系统实现数据的管理,应用程序只需要调用有关的接口就可以完成数据的插入、删除和修改等操作,而不需要关心数据放在什么文件中,是怎样存放的。,数据库的产生,表(Table)任何数据都可以看成是二维表格中的元素,而这个由行和列组成的二维表格就是数据库中的表(Table),一个数据库中可能有一个或多个表。比如销售系统的数据库中包含客户表、供应商表、产品表和订单表等。记录(Record)表中的每一行称为行、元组或记录(Record),一行中的所有数据元素描述的是同一个实体的不同方面的特征。一个表中的所有记录是各不相同的,一般
3、不允许重复。 字段(Field)二维表中的每一列是一个属性值集,称为属性或字段(Field)。比如客户表有客户编号、客户名称、地址、联系人和电话等字段。当某个字段在表中的值具有唯一性时,称该字段为表的主键(Primary Key)。比如客户表的主键是客户编号字段。,数据库的基本概念,关联一般说来每个表都独立地描述某类事物,但事物之间是有关系的,所以数据库应该能够在表之间建立这种关联。比如订单表中记录的是某个客户的订单,可能设计有订单号、客户编号和订单日期等字段,那么通过客户编号(外部关键字)可以与客户表建立关联,这样要查询订货日期在某天的所有客户名称和地址将是可能的。 SQLSQL是Struc
4、tured Query Language(结构化查询语言)的缩写。但查询只是SQL语言的重要组成部分,并不是全部,它还包含数据定义、数据操纵等其它功能。SQL语言包含为数不多的十来条命令,实现创建数据库的表、对表中的数据进行添加、删除或修改等功能,尤其可以实现各种形式的查询、排序和分组汇总。,数据库的基本概念,多表关联示例,OrderIDCustomerIDEmployeeIDOrderDateRequiredDateShippedDate,CategoryIDCategoryNameDescriptionPicture,产品目录,ProductIDProductNameSupplierIDC
5、ategoryID.,订单,订单明细,OrderIDProductIDUnitPriceQuantityDiscount,SupplierIDCompanyName.,供应商,产品,CustomerIDCompanyName,客户,Access格式数据库(Windows Office自带)桌面数据库, dBASE, Foxpro等小型数据库系统ODBC数据库, SQL Server, Oracle, Sybase等主流数据库,VB支持的数据库系统,可视数据管理器(VB提供的一个应用程序,不需要编程就可访问)数据控件和数据绑定控件(简单应用,只需少量编程)数据访问对象,DAO模型(早期)Acti
6、veX数据访问对象,ADO模型(最常用),VB访问数据库的方式,VB工具可视数据管理器,不需要安装Access等数据库系统,可以独立运行,是用VB编写的应用软件,并提供全套源代码。具备以下功能:建立数据库浏览和查询数据库添加、修改和删除记录压缩和修复数据库,可视数据管理器建立数据库,一般用于建立单机环境下的小型数据库。,可视数据管理器建立数据库,步骤:菜单“文件|新建表”,选择数据库类型和版本鼠标右键菜单“新建表”,弹出表结构对话框在对话框中添加字段必要的情况下添加索引,最后确认生成表双击表,弹出记录维护窗口,可以添加记录,可视数据管理器添加数据,双击表名,或先点击鼠标右键弹出菜单,执行弹出菜
7、单的【打开】命令,就可以出现下图所示的记录操作窗口。该窗口会显示表的所有字段,可以浏览记录,也可以利用按钮命令来完成记录的添加、修改和删除等操作。,可视数据管理器浏览数据库,数据库打开后,就会显示该数据库结构的树状结构,可以查看字段和索引的设计,鼠标双击浏览全部数据。浏览界面有三种(在工具栏选择):使用Data控件方式不使用Data控件方式使用DBGrid控件方式(表格),可视数据管理器查询数据库,数据库打开后,有两种查询数据的方式:在SQL语句窗口中可以输入Select语句使用菜单“实用程序|查询生成器”,可视数据管理器打开数据库,对于已经存在的数据库,可以打开并查询数据,前提是最好知道数据
8、库的类型和版本。菜单“文件|打开数据库”选择数据库类型和数据库文件如果需要修改表结构,先选中该表,鼠标右键“设计”,将弹出表结构对话框可以对字段进行添加和删除。,可视数据管理器其它功能,不同数据库格式的数据导入/导出压缩数据库(实现记录的真删除。因为记录在删除的时候,只是做了标记,并未清除)修复数据库(修复遭破坏的数据库),现在开始数据库编程,学会使用VB自带控件,掌握Recordset对象,掌握ADO对象,实现具体应用,高手,标准的Data数据控件,具备以下功能:完成对本地和远程数据库的链接打开指定数据库的表,或者是基于SQL的查询集将表中的字段传至数据绑定控件, 并能针对数据绑定控件中的修
9、改,更新数据库因为功能的局限,目前很少使用Data控件,理解ADO,ActiveX Data Objects;一种提供访问各种类型数据库的连接机制,底层通过ODBC接口访问数据库,可以使用任何一种ODBC数据源,统一的数据访问接口方法,独立于开发工具和开发语言(vb, vc+, delphi)对象模型简单易用,使用ADO的四种方法,使用可见控件:(加载部件)利用ADO数据控件(Adodc)和绑定控件利用DataEnvironment设计器和绑定控件制作报表使用DataReport设计器使用对象:(加载引用)直接使用ADO对象,窗体,数据库,Label TextBox ListBox Image
10、 ,Data Adodc,数据识别控件,数据源控件,ADO对象模型,OLE DB提供程序,AccessProvider,SQL ServerProvider,OracleProvider,Access,Sql Server,Oracle,访问数据库的过程,添加Adodc数据控件设置数据控件的属性,建立到数据库的连接添加其它控件,并与数据控件进行绑定,指定要显示的字段运行程序,可以查看数据库记录了。,最简单的的数据库访问程序,【例】显示所有总部在伦敦的客户名称、地址和电话。直接利用VB提供的NWind.mdb文件(位于VB安装主目录),该数据库是Access格式数据库,包含了订单销售系统所需要的
11、数据,如产品表、供应商表、客户表、订单表等。界面如图。,数据库示例1,1)执行【文件】【新建工程】创建一个新的数据工程;2)打开工程中的“frmDataEnv”窗体,添加用于显示数据的Label控件和TextBox控件,然后在工具箱中找到Adodc控件,将它放置在窗体上(Adodc1)3) 选中窗体中的Adodc1控件,点击鼠标右键选择【ADODC属性】菜单项,打开“属性页”对话框;4)建立数据库连接:按下属性页对话框的“通用”选项卡中【生成】按钮,在打开的“数据连接”对话框中选择Provider(数据源提供者)为“Microsoft Jet 4.0 OLE DB Provider”,接着浏览
12、并选择数据库为“C:Program FilesMicrosoft Visual StudioVB98NWIND.MDB”,按下【确定】按钮;5)回到“属性页”对话框中,选择“记录源”选项卡,在“命令文本”输入框中输入“Select * from Customers Where City=London;”,按下【确定】按钮;6)选择窗体上的“客户名称”文本框,在“属性窗口”中选择设置属性DataSource为Adodc1,属性DataField为CompanyName(Customers表的字段),同样设置另外两个文本框的Datasource属性和DataField属性;启动程序,便可以看到显示
13、的数据,点击控件Adodc1两端的四个箭头,可以看第一条、看最后一条记录,或向前或向后浏览每一条记录。,示例的具体步骤,建立在ADO对象模型之上的数据源控件是ADO数据控件,该控件是一个ActiveX控件,所以如同通用对话框一样需要先加载后使用。加载ADO数据控件有两种方法,一种就是新建一个新的数据工程,该工程会自动加载所有的数据库访问有关的控件;另外一种是自己在工程中执行【工程】【部件】菜单加载“Microsoft ADO Data Control”部件。工具箱中会出现名称为“Adodc”的ADO数据控件。,ADO数据控件,ConnectionString属性 用于建立链接,指明数据库名称、
14、访问权限等,可以由提示自动生成CommandType属性 用于指明命令类型,表/查询文本/存储过程等。RecordSource属性 用于指明数据源的内容,如果CommandType是表类型,则为表名,如果是文本,则是Select语句主要属性可以在ADO数据控件的属性页中设置,ADO数据控件的主要属性,建立到数据库的连接ConnectString,ConnectString属性用于将数据控件与某种格式的数据库建立连接。有三种方法可供选择:使用数据库连接文件:必须先建立一个数据连接文件,然后选中该文件,最终ConnectionString属性存放文件名,如“FILE NAME=D:myVBtest
15、.udl”。使用ODBC数据源(DSN):可以在该对话框内或“控制面板”的“数据源(ODBC)”中创建数据源,每个数据源有一个唯一的名称,最终ConnectionString属性指定数据源名称,如“DSN=aaa”。使用连接字符串:ConnectionString属性指定一个符合语法的连接字符串,可以在该对话框中生成该连接字符串,如“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:myVBschool.mdb;Persist Security Info=False”。,指定记录源RecordSource,虽然指定了数据库,但还没有指定访问的是哪些表
16、、哪些记录,记录的范围由数据控件的RecordSource属性指定。RecordSource属性是字符串类型,通常包含一条语句,用于决定从数据库检索什么信息,它需要与数据控件的另一个属性CommandType属性结合使用才能真正确定记录范围。CommandType属性用来指定RecordSource属性保存的究竟是一条SQL语句、一个表的名称、一个存储过程、还是一个未知的类型指定命令类型。RecordSource属性和CommandType属性同样也可以在“属性窗口”中设置,也可以在数据控件的“属性页”对话框中设置。,记录源类型CommandType,CommandType属性用来指定记录源类
17、型。表类型:当CommandType属性取值为2(常量adCmdTable)时,说明RecordSource属性中的字符串是一个表名。图中指定的就是Customers表。文本类型:当CommandType属性取值为1(常量adCmdText)时,说明RecordSource属性中的字符串是一个SQL命令,在对话框作选择该类型后,应该在“命令文本”输入框中输入一个有效的SQL查询命令,这时数据控件将会访问到满足查询条件的全部记录。,使用代码设置属性值,如果在程序运行时需要修改数据控件的属性,也能用代码为它们重新赋值,赋值无顺序要求。举例如下:Adodc1.CommandType = adCmdT
18、ableAdodc1.RecordSource = teacherAdodc1.Refresh 但是要记住,一旦重新设置了记录源,则一定要调用Refresh,数据绑定控件的功能,数据绑定控件是数据识别控件,在数据库应用程序中可以通过它来显示数据库数据。一旦与数据控件实现了绑定,则具有下列功能: 可以自动显示记录值 编辑修改记录值 可以自动将记录值写入数据库,数据绑定控件的类别,标准绑定控件如CheckBox, ListBox , TextBox,Label,PictureBox,Image,ComboBox等,将它们的DataSource和DataField属性绑定到数据库和字段上 外部绑定控
19、件(需要加载部件)如DBCombo, DBGrid, DBList, RichText, FlexGrid等 适用于OLEDB的外部绑定控件(与ADO控件结合)如DataCombo, DataList, DataGrid等,数据绑定控件的一般用法,DataSource属性, 指定该控件要绑定的数据源,即Data控件的名称可以直接在属性窗口中设置或用代码赋值; 如果一个窗体中有多个数据控件,只能绑定到其中之一;DataField属性, 指定该控件要绑定的字段可以直接在属性窗口中设置或用代码赋值; Set Text1.DataSource = Adodc1 设置数据绑定控件的数据源Text1.Da
20、taField = stuNo设置数据绑定控件绑定的字段,数据库示例2,【例】编写程序,能输入城市名,查询并显示该城市的客户名称、地址和电话。还是利用NWind.mdb数据库,客户信息存放在Customers表中,该表有CustomerID、CompanyName、Address、City、Phone、Fax等字段。界面效果见图。,数据库示例2,使用ADO数据控件与数据库NWind.mdb连接,并设置访问Customers表,使用三个TextBox绑定到数据控件上用于显示公司名称、地址和电话,增加城市输入框和查询按钮,一旦按下查询按钮,编写代码修改数据控件的有关属性Private Sub cm
21、dQuery_Click()Dim strSql As String If txtCity Then strSql = select * from customers where city= _& txtCity.Text & Adodc1.CommandType = adCmdTextAdodc1.RecordSource = strSql Adodc1.Refresh End IfEnd Sub,VB提供了一些表格控件可以显示整个表的所有记录,比如DataGrid控件和MSHFlexGrid控件。使用DataGrid控件需要加载“Microsoft Data Control 6.0”部件,
22、使用MSHFlexGrid控件需要加载“Microsoft Hierarchical FlexGrid Control 6.0”部件。,表格控件,【例】显示客户基本信息及其所有订单信息。客户信息从Customers表读取,由Adodc1控件提供数据源,左边显示客户信息的文本框与Adodc1控件绑定;订单信息从Orders表中读取,由Adodc2控件提供数据源,右边的表格与Adodc2控件绑定。两个表通过Customerid字段关联,当记录移动后客户代码文本框的内容会改变,需要在Orders表中查询该客户代码的所有订单,即修改Adodc2的RecordSource属性,这样右边表格的订单内容也随
23、之刷新。 Private Sub txtCustomerid_Change() Adodc2.CommandType = adCmdText Adodc2.RecordSource = select * from orders where customerid= & txtCustomerID & Adodc2.Refresh End Sub,数据库示例3,SQL语句介绍,什么是SQL,SQL(Structured Query Language)结构化查询语言,已经成为关系数据库的标准数据语言。包含以下功能:数据查询:Select数据定义:Create, Drop , Alter数据操纵:In
24、sert, Update, Delete数据控制:Grant, Revoke,简单查询SELECT(一),1、从客户表中查询全部内容SELECT *FROM cumtomers;2、从客户表中查询所有公司名称SELECT companyname FROM cumtomers;3、从客户表中查询所有城市(使用DISTINCT去掉重复值)SELECT DISTINCT cityFROM cumtomers;,简单查询SELECT(二),3、从客户表中查询在伦敦的公司名称SELECT companynameFROM cumtomersWHERE city=London4、从订单表中查询所有发往伦敦的
25、运费100元以上的订单SELECT * FROM ordersWHERE shipcity=London AND freight100;,连接查询SELECT,1、找出订单运费在100元以上的订单号和公司名称SELECT orderid, companyname FROM orders, customers WHERE freight100 AND orders.customerid=customers.customerid; 2、查出订有43号产品的订单及其到货城市SELECT orders.orderid, productid, shipcity FROM orders, orderdet
26、ails WHERE productid=43 AND orders.orderid=orderdetails.orderid;如果两个表有相同的字段名,必须指定字段为表名.字段名,嵌套查询SELECT,需要的结果来自一个表,但条件涉及多个表找出订有43号产品的公司名称、地址和电话SELECT companyname, address, phoneFROM customers WHERE customerid IN (SELECT customerid FROM orders, orderdetails WHERE orderdetails.productid=43 AND orders.or
27、derid=orderdetails.orderid);,SELECT中的特殊算符,1、找出运费在50到100元之间的订单SELECT * FROM ordersWHERE freight BETWEEN 50 AND 100; 2、查出名称是F开头的客户SELECT * FROM customersWHERE companyname LIKE F* /?单字符3、查出不在伦敦的的客户SELECT * FROM customersWHERE NOT city=London ;,SELECT结果排序,1、按照日期降序输出SELECT * FROM ordersORDER BY orderdate
28、 DESC; 2、先按日期降序,再按运费升序输出SELECT * FROM ordersORDER BY orderdate DESC, freight;,计算查询和分组,COUNT:计数SUM:求和AVG:计算平均值MAX:求最大值MIN:求最小值1、求每个客户的总运费SELECT customerid, SUM(freight) FROM ordersGROUP BY customerid;,创建表CREATE TABLE,CREATE TABLE orders(orderid CHAR(5) NOT NULL, orderdate DATE, requireddate DATE, com
29、panyid CHAR(4); CREATE TABLE orderdetail(orderid CHAR(5) NOT NULL, productid CHAR(4) NOT NULL, price NUMBER(10.2), quantity NUMBER(8);DROP TABLE orders;/删除表,插入记录INSERT INTO,1、插入一条记录,包含三个字段值:INSERT INTO orders(orderid, orderdate,companyid)VALUES(00001, 2002/11/01, 111);2、插入检索结果:INSERT INTO ordersbakS
30、ELECT * FROM orders;,修改记录UPDATE SET,1、修改一条记录:UPDATE ordersSETorderid=10001, requireddate=2002/12/01WHERE orderid=00001);2、修改一批记录:UPDATE ordersSETfreight=freight*1.05WHERE shipcity=London);,删除记录DELETE FROM,删除所有发往伦敦的订单:DELETE FROM ordersWHERE shipcity=London;,数据控件的Recordset属性,Recordset是Adodc控件的一个属性, 同
31、时本身就是一个功能强大的对象记录集对象。窗口加载时, 如果控件的各属性都设置正确, 将自动创建基于这些属性的记录集对象,即Adodc1.RecordSet注意:该属性和RecordSource不同,RecordSouce是一个字符串对象,指定记录的来源,而RecordSet则是真正得到的记录集合,是对象类型,RecordCount:指示当前记录集的记录总数如取得本次记录集中的记录总数,并显示在一个文本框中,代码是这样的:Text1.Text = Adodc1.Recordset.RecordCount,记录集的个数,记录集通常顺序读取,有一个记录指针指示当前的记录位置。AbsolutePosi
32、tion:指示当前记录在记录集中的确切位置(当前是第几条记录),从0开始计数。BOF:指示当前记录是否指到首记录之前EOF:指示当前记录是否指到尾记录之后如打印所有客户的名称:Do While Not Adodc1.Recordset.EOFPrint Adodc1.Recordset(“CompanyName”)Adodc1.Recordset.MoveNextLoop,记录集的当前记录位置,Recordset对象含有由Field对象组成的Fields集合,一个Fields集合中包含多少元素,由Fields的Count属性指明。Fields:表示记录集的字段信息,主要属性有:Name属性:可
33、返回字段名。Value属性:可查看或更改数据库字段值,该属性是Field对象的缺省属性。Type属性:可返回字段的类型。DefinedSize属性:返回已声明的字段大小。ActualSize属性:返回给定字段中数据的实际大小。,记录集的字段信息,访问某个记录的字段信息,就是访问要访问Fields集合中的某个Field对象,有两种方法:可以利用字段在集合中的索引位置(编号从0开始),如 Fields(1)、Fields(2)或者直接使用字段名,如Fields(“Address”)、Fields(“电话”)等等。例如取出当前记录所有字段的值,可以使用下面的循环:For i=0 To Adodc1.
34、Recordset.Fields.Count - 1 Print Adodc1.Recordset.Fields(i).Name & “=” _& Adodc1.Recordset.Fields(i).Value Next,访问某条记录的字段,或Print Adodc1.Recordset(i).Name & = & Adodc1.Recordset(i),记录集的功能,记录集对象具有丰富的属性和方法,利用它们可以增强数据控件的功能: 提供数据库记录,支持反复筛选查询 数据库记录的增删改可以将记录集传递给其它过程或模块(类似一个公用变量),移动记录,Move方法组MoveFirst:指向记录集
35、中首记录MoveLast:指向记录集中尾记录MoveNext:指向记录集当前记录的下一记录MovePrevious:指向记录集当前记录的上一记录Move NumRecords, Start :指向记录集任何位置,*注意*MoveNext和MovePrevious方法不能自动检查是否到了记录集的上下界(BOF, EOF),如果程序员不加控制,继续移动则会导致越界错误。,数据库示例4,【例】隐藏数据控件,采用按钮来实现记录的移动。编程思路:ADO数据控件的外观没有文字提示,箭头方式控制记录移动对缺乏计算机基础的用户来说不够直观,因此可以替换为四个按钮控件。此外,为了防止误操作,查询时禁止对数据的编
36、辑,即设置文本框的Locked属性为True,数据库示例4, 移到第一条记录Private Sub cmdFirst_Click() Adodc1.Recordset.MoveFirstEnd Sub 移到最后一条记录Private Sub cmdLast_Click() Adodc1.Recordset.MoveLastEnd Sub 移到当前记录的上一记录Private Sub cmdPrevious_Click() Adodc1.Recordset.MovePrevious If Adodc1.Recordset.BOF = True then Adodc1.Recordset.Move
37、FirstEnd Sub 移到当前记录的下一记录Private Sub cmdNext_Click() Adodc1.Recordset.MoveNext If Adodc1.Recordset.EOF = True then Adodc1.Recordset.MoveLastEnd Sub,Recordset对象的AddNew方法可以在记录集中添加一个新记录。AddNew方法有两种用法recordset.AddNew FieldList, Values 指定字段和字段值recordset.AddNew空记录通常我们会使用第二种方式来添加记录。但是缺省情况下新添加的记录只是存放在本地缓冲区,只
38、有调用了Recordset对象的Update方法后才会真正写回到数据库中。Update方法:调用该方法提交记录到数据库中,确认本次记录的添加;CancelUpdate方法:取消记录的添加,清除缓冲区,当前记录恢复到到添加前位置。,*赋值必须注意值的类型与字段的类型必须是一致,添加新记录,数据库示例5,【例】增加按钮,实现记录的添加。编程思路:增加一个按钮来实现记录的添加,文本框解锁。考虑在添加空记录后还有确定和取消两种可能的操作,所以另外增加两个按钮。运行时保证这三个按钮在操作顺序上的约束控制关系:,数据库示例5,Private Sub cmdAdd_Click() Adodc1.Record
39、set.AddNew 添加一条空记录 SetLocked False 使文本框可编辑 SetEnabled False 控制按钮的可用性End SubPrivate Sub setLocked(flag As Boolean) Text1.Locked = flag Text2.Locked = flag Text3.Locked = flag Text4.Locked = flagEnd SubPrivate Sub setEnabled(flag As Boolean) cmdAdd.Enabled = flag cmdOK.Enabled = Not flag cmdCancel.Ena
40、bled = Not flagEnd Sub,数据库示例5,Private Sub cmdOk_Click() Adodc1.Recordset.Update 更新数据库 SetLocked True 使文本框不可编辑 SetEnabled True 使【添加】按钮恢复可用End SubPrivate Sub cmdCancel_Click() Adodc1.Recordset.CancelUpdate SetLocked True SetEnabled True End Sub,可以直接在绑定控件上修改记录值(在本地缓冲区),调用Recordset对象的Update方法将更新到数据库。,修改
41、记录,【例】增加按钮,实现记录的修改Private Sub cmdModify_Click() setEnabled False setLocked False Text1.SetFocusEnd Sub,数据库示例6,使用Recordset对象的Delete方法将删除当前记录或一组记录。该方法的语法为:recordset.Delete AffectRecordsAffectRecords参数用来确定删除哪些记录:省略该参数表示删除当前记录。参数设置为adAffectGroup并参照Recordset对象的Filter属性的设置可以删除一组记录。,删除记录,【例】增加按钮,实现记录的删除Pri
42、vate Sub cmdDelete_Click() If MsgBox(“确认要删除吗?, vbOKCancel) _= vbOK Then Adodc1.Recordset.Delete Call cmdNext_ClickEnd Sub,数据库示例7,指定记录集类型,CursorType属性:游标类型 (控制对记录集的访问方式)有以下几种类型:Static支持向前和向后的卷动记录,但不反映其他用户对数据库所做的增加、删除和修改等操作Dynamic能够反映所有用户对数据库记录的操作,支持向前和向后的记录卷动Forward-only仅支持向前的记录卷动,能反映未访问记录的修改Keyset能反
43、映修改操作,不反映插入操作,介于Static和Dynamic之间,指定记录集记录的存放位置,CursorLocation属性:游标引擎的位置AdUseClient使用本地游标库提供的客户端游标服务器将整个结果集传回给客户端,使网络负担重,但下载后的数据浏览速度快AdUseServer使用数据提供者提供的服务器端游标,仅传送客户端需要的记录,网络负担小,但服务器资源消耗大,可能不支持Bookmark、AbsolutePosition等属性,给记录集加锁,LockType属性:设置多用户情况下的记录锁定,保证各用户间的操作互不干扰AdLockReadOnly指定记录只读AdLockPessimis
44、tic保证用户能成功地编辑记录,其它用户不可访问AdLockOptimistic只是在使用Update方法时,才锁定记录AdLockBatchOptimistic如果使用批更新模式,则需要设为这种锁定方式,Bookmark:当前所在记录的记录指针,可以读取,也可以赋值。赋值时作用类似于书签,可快速移动到指定记录书签与记录的序号不同,如果用户删除了之前的某些记录,序号会发生变化,而书签则唯一标识某条记录,总是能指向原来的那条记录。Dim tempBookmark As Variant 保存原始的书签tempBookmark = Adodc1.Recordset.Bookmark. 返回原来的记录
45、Adodc1.Recordset.Bookmark = tempBookmark,在记录集中使用书签,数据控件的RecordSet属性保存了数据库记录的所有信息,而且可以支持记录的各种操作,因此利用RecordSet对象可以灵活地编写应用程序。比如控件不需要绑定到数据控件上就可以直接利用RecordSet取出每个字段值来显示:Adodc1.RecordSet.MoveNextCall DisplayRecordPrivate DisplayRecord()Text1 = Adodc1.RecordSet(“CompanyID”)Text1 = Adodc1.RecordSet(“Company
46、Name”) Text1 = Adodc1.RecordSet(“Address”) Text1 = Adodc1.RecordSet(“City”)End Sub,利用记录集编写程序,真正了解ADO对象模型,Connection,Errors,Error,Command,Parameters,Parameter,Recordset,Fields,Field,ADO对象模型,Connection: 负责与数据源建立连接Command: 用于设置访问数据源所需的命令Recordset: 用于处理结果集中的记录Field: 对应结果集中的各个字段Error: 用来存放访问数据源时所发生的错误Par
47、ameter: 用来进行参数化查询对象之间既相互独立,又可以建立关联,“工程|引用”选择Microsoft ActiveX Data Object 2.0 Library,准备如何创建对象,对象可以说是一种复杂的数据类型,与普通的数据类型在定义和使用时有区别。一般类型的变量在定义之后就可以使用,但对象变量必须经过声明和创建两个过程,然后才能使用(一个空对象不可用)。声明:Dim adoRecordset As ADODB.Recordset创建:方法一:在对象变量定义的时候就创建该对象Dim adoRecordset As New ADODB.Recordset方法二:使用New运算符Dim adoRecordset As ADODB.RecordsetSet adoRecordset = New ADODB.Recordset,