500 likes | 694 Views
Visual Basic. 程序设计教程. 第十五讲. VB 数据库应用( 2 ). 本章教学内容. 8.1 数据库基本知识 8.2 Data 控件 8.3 ADODC 控件 8.4 ADO 对象模型 8.5 数据窗体向导 8.6 数据环境设计器 8.7 数据报表 Data Report. 本讲教学内容. 8.3 ADODC 控件 8.4 ADO 对象模型. 8.3 ADODC 控件 1. ADODC 控件的特点
E N D
Visual Basic 程序设计教程
第十五讲 VB数据库应用(2)
本章教学内容 8.1 数据库基本知识 8.2 Data控件 8.3 ADODC控件 8.4 ADO对象模型 8.5 数据窗体向导 8.6 数据环境设计器 8.7 数据报表Data Report
本讲教学内容 8.3 ADODC控件 8.4 ADO对象模型
8.3 ADODC控件 1. ADODC控件的特点 (1)在VB中,用户可使用三种数据访问接口,即ActiveX数据对象(ADO)、数据访问对象(DAO)和远程数据对象(RDO),这三种接口代表了数据访问技术的三个发展时代,其中最新的是ADO。 (2) ADO(Active Data Objects)实际是上一种提供访问各种数据类型的连接机制。它是DAO/ RDO的后继产物,ADO是为Microsoft的数据访问OLE DB而设计的,OLE DB是一个低层的数据访问接口,通过它可以访问各种数据源,这些数据源包括关系和非关系数据库、文本文件和图形等等。
(3) ADODC控件(又称为ADO Data Control或ADO Data控件)可以利用Microsoft ActiveX Data Objects数据对象(ADO)快速建立数据绑定控件和数据提供者之间的连接。数据提供者可以是任何符合OLE DB规范的数据源。ADODC控件和Data控件在概念上很相似,都可以将一个数据源连接到一个数据绑定控件,也都有相同的外观共四个按钮。但是,相比较来说ADODC更加灵活,适应性更广。
2. ADODC控件的创建方法 当新建一个工程时,ADODC控件不在工具箱中,需要打开菜单“工程”---“部件…”对话框选择“Microsoft ADO Data Control 6.0(OLEDB)”复选框,向工具箱中添加ADODC控件的图标。将ADODC控件放置到窗体中,ADODC控件的外观如下图所示,默认控件名为“Adodc1”。
3. ADODC控件的常用属性 ⑴ ConnectionString属性 ConnectionString属性是一个字符串,用来连接到数据源。可以是OLE DB文件(.UDL)、ODBC数据源(.DSN)或连接字符串,如下图所示。
为了能设置好所需的ConnectionString属性,必须知道如何去创建一个Microsoft数据连接文件(Data Link file)(.UDL),如何创建ODBC 数据源以及如何使用连接字符串。 创建Data Link文件的步骤: ①打开Windows资源管理器,本文用的是Windows XP操作系统。 ②打开存放OLE DB文件(.udl)的文件夹,例如选择“D:\”来存放。 ③在Windows资源管理器窗口右边空白处单击鼠标右键,从快捷菜单中选择“新建文本文件”,将文件名改为“myDatalink.udl”,新建一个udl文件,此时屏幕上会弹出一个对话框告之“如果改变文件扩展名,可能会导致文件不可用,确实要更改吗?”,单击“是”,确定即可。
④用鼠标双击“myDatalink.udl”文件,打开数据连接属性,如下图所示。④用鼠标双击“myDatalink.udl”文件,打开数据连接属性,如下图所示。
⑤单击“提供程序”选项卡,在OLE DB提供程序中选择“Microsoft Jet 3.51 OLE DB Provider”,如果已有的数据库是Access2000的格式,则选择“Microsoft Jet 4.0 OLE DB Provider”,如下图所示,然后单击“下一步”按钮。
⑥选择或输入数据库名称,本例题的数据库放在D:\VB\supermarket.mdb下。 ⑦单击“测试连接”按钮,如果数据连接成功,将会弹出测试连接成功对话框,如下图所示。
ODBC数据源名称(DSN),表示了将应用程序和某个数据库相连接的信息集合。ODBC数据源名称(DSN),表示了将应用程序和某个数据库相连接的信息集合。 ODBC驱动器管理程序使用该信息创建一个到数据库的连接。根据操作系统的不同,这些信息被保存在ODBC.ini文件或者是系统注册表中。用户可以使用Windows控制面板的ODBC管理工具来创建DSN。
在Windows Xp操作系统中创建DSN步骤: ①单击任务栏上的“开始”---“设置”,再单击“控制面板”,在弹出的界面中再双击“管理工具”,然后双击“数据源(ODBC)”,弹出如下图所示界面。
②单击“添加…”按钮,选择想安装的数据源的驱动程序。这里选择“Microsoft Access Driver(*.mdb)”。如下图所示。
③单击“完成”按钮将会弹出如下图所示界面,在数据源名中,给所连接的数据源起一个名称。然后单击“选择(S)…”按钮,选择具体数据库,这里选择的是D:\VB\supermarket.mdb。
单击“确定”按钮,将回到ODBC数据源管理器中,此时您将看到刚才所定义的数据源名称my-database出现在列表中,如下图所示。说明成功地创建了一个ODBC数据源单击“确定”按钮,将回到ODBC数据源管理器中,此时您将看到刚才所定义的数据源名称my-database出现在列表中,如下图所示。说明成功地创建了一个ODBC数据源 ④最后单击“确定”按钮,完成创建ODBC数据源。
下面进一步设置ConnectionString属性。在设置ConnectionString属性的对话框,选择“使用Data Link文件”选项,通过“浏览…”选择前面所建立的数据连接文件,D:\myDatalink.udl即可,如下图所示。
也可以选择“使用ODBC数据源名称”,在其下拉列表中选择前面刚建立的数据源my-database,如下图所示。如果事先没有建立好所需的ODBC数据源名称,此处也可以通过单击右边的“新建”按钮来建立。
⑵ RecordSource属性 该属性返回或设置一个记录集的查询,用于决定从数据库中查询什么信息。在Adodc1的属性窗口中单击RecordSource右侧的按钮,则显示如下图所示的属性页。
⑶ UserName属性 UserName属性是用户名称,当数据库受密码保护时,需要指定该属性。这个属性也可在设置ConnectionString属性时设置。 ⑷ Password属性 Password属性设置ADO Recordset对象创建过程中所使用的口令,当访问一个受保护的数据库时是必须的。该属性设置值是只写的,它只能在代码中提供,而不能从Password属性中读出。
利用ADODC控件连接数据库有两种方法,具体如下。利用ADODC控件连接数据库有两种方法,具体如下。 ⑴ 通过ADODC属性页实现连接 【例8-2】 本例题,没有编写代码,通过Adodc控件和DataGrid控件的绑定在窗体Form1上显示出数据表provider的内容。设计界面如下图所示。
设计步骤如下: ①新建以个工程,向窗体中添加一个Adodc1控件。 ②设置Adodc1控件的ConnectionString属性为使用Data Link文件D:\mydatalink.udl,如前面所述,这里也可以选择“使用ODBC数据源名称”或“使用连接字符串”方式。 ③设置Adodc1控件的RecordSource属性为表provider。 ④从“工程”---“部件”中把“Microsoft DataGrid Control 6.0(OLEDB)”添加到工具箱中,然后向窗体中添加一个DataGrid控件。 ⑤设置DataGrid1控件的DataSource属性为Adodc1。
⑥保存该窗体和工程,运行该窗体,即可以看到数据表provider的内容,如下图所示。⑥保存该窗体和工程,运行该窗体,即可以看到数据表provider的内容,如下图所示。
⑵ 通过代码实现数据连接 除了通过属性页的设置连接数据库之外,也可以在程序运行时动态地连接数据源。下面的例8-3是一段进行数据库连接的常用代码。 【例8-3】 本例题是一个小代码片段,功能是进行ADODC控件的数据连接。运行界面如下图所示。
设计步骤如下: ①创建一个新的工程,向窗体中添加一个Adodc1控件,一个CommandButton,并把其Caption属性改为“测试数据连接”。 ②在Command1的Click事件中输入如下的代码。 Private Sub Command1_Click() Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.ConnectionString = "Provider=Microsoft.Jet. Oledb.3.51;" & "Data Source=f:\supermarket.mdb;" cn.ConnectionTimeout = 30 cn.Open If cn.State = adStateOpen Then MsgBox "数据连接成功!" End Sub
4. ADODC控件的常用方法 ⑴ UpdateControls方法 从控件的ADO Recordset对象中获取当前行,并在绑定到此控件的控件中显示相应的数据。 ⑵ AddNew方法 与Data控件的AddNew方法相同,用于添加新记录。 ⑶ Update方法 与Data控件的Update方法相同,保存对Recordset 对象的当前记录所做的所有更改。 ⑷ Delete方法 Delete可用于Recordset或Field对象,分别用于删除字段或删除记录。 语法:Fields.Delete字段名 Recordset.Delete 记录数目
⑸ Move方法 与Data控件的Move方法相同,用于移动Recordset对象中当前记录的位置。 ⑹ Move方法群 与Data控件的Move方法群相同,通过MoveFirst、MoveLast、MoveNext和MovePrevious方法分别移动到指定Recordset对象中的第一个、最后一个、下一个或上一个记录,并使该记录成为当前记录。 ⑺ Requery方法 用于重新执行Recordset对象的查询,更新其中的数据。
4. ADODC控件的常用事件 ⑴ WillMove事件和MoveComplete事件 分别在Recordset的当前位置更改之前或之后触发。在执行了Recordset对象的Open、MoveNext、MoveLast、Move、MoveFirst、MovePrevious、Bookmark、AddNew、Delete、Requery和Resync方法时发生。 ⑵ WillChangeField事件和FieldChangeComplete事件 分别在对Recordset中的一个或多个Field对象值进行修改之前或之后触发。
⑶WillChangeRecord事件和RecordChangeComplete事件 分别在Recordset中的一个或多个记录(行)更改之前或之后触发该事件。在调用Recordset对象的Update、Delete、CancelUpdate、AddNew、UpdateBatch和CancelBatch方法时发生。 ⑷ WillChangeRecordset事件和 RecordsetChangeComplete事件 分别在Recordset更改之前或之后触发。在调用Recordset对象的Requery、Resync、Close、Open和Filter方法时发生。
8.4 ADO对象模型 前面所述的通过Adodc控件连接并访问数据库实际上是ADO的初级运用,可以说ADO体现了VB访问数据库的核心技术。要使VB访问数据库的程序设计功能进一步提高,必须要了解ADO对象模型,进而在代码中运用这些对象,就可以游刃有余地运用VB强大的数据库功能。ADO对象模型如下图所示。
Connection Command Parameters Parameter Recordset Fields Field Errors Error
一、Connection对象 Connection对象是ADO对象模型中最重要的一个对象,通过该对象建立和数据库的连接,可以说它是ADO的源头,只有创建了Connection对象之后,才可以创建和使用上图中的Command对象和Recordset对象。使用Connection对象的一般步骤如下:
(1) 创建Connection对象 在ADO对象模型中,使用一种对象时,通常是先定义然后再创建该对象的实例。创建Connection对象的代码如下: Dim cn As ADODB.Connection ‘定义一个Connection类别的对象变量 Set cn = New ADODB.Connection ‘创建一个对象实例cn 也可以将这两句代码合成为一句,下面的效果等价于执行前面的两条语句。 Dim cn As New ADODB.Connection
(2) 连接Connection对象和数据源 创建了Connection对象之后,接下来就需要指定该对象所连接的数据源。设置Connection对象连接数据源的代码如下。 CnnStr="Provider=Microsoft.Jet.Oledb.3.51;" & "Data Source=f:\supermarket.mdb;" Cn.open CnnStr (3) 打开数据表 rs.CursorLocation=adUserClient rs.Open “provider”, cn, adOpenKeyset, adLockPessimistic 在这里调用了Recordset对象的Open方法来打开数据表“provider”
(4) 关闭Connection对象 当应用程序不再需要使用数据库时,应该调用Connection对象的Close方法。 rs. Close 需要注意的是调用Close方法后,Connection对象依然存在。若是想完全释放Connection对象所占用的系统资源,必须使用如下的语句。 Set cn=Nothing 通常当用户关闭应用程序时,该应用程序所打开的数据库将会自动关闭,并自动释放Connection对象所占用的系统资源。
二、Recordset对象 Recordset 对象是一个记录集,可以来自基本表或SQL命令执行的结果。和前面在Data控件以及ADODC控件中所用到Recordset是相同性质的。 在任何时候,Recordset 对象所指的当前记录均为集合内的单个记录。Recordset对象常用的属性如下:
⑴ CursorLocation属性 游标(Cursor)类似于一个的指针,通过游标与数据库记录之间的关系,Recordset对象可以方便地定位所要存取的记录。 CursorLocation属性用于设置或返回游标引擎的位置。取值如下所示: adUseClient:使用由本地游标库提供的客户端游标。此时Recordset对象所提供的功能比设置成AdUseServer时要多。 AdUseServer:默认值。使用数据提供者或驱动程序提供的游标。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,该设置将无法使用这些功能。
(2) CursorType属性 指示在 Recordset 对象中使用的游标类型。设置或返回以下某个CursorTypeEnum值。 AdOpenForwardOnly:仅向前游标,默认值。只能在记录中向前滚动。当需要在记录集中单向移动时,可用于提高性能。 AdOpenKeyset:键集游标。尽管从用户的记录集中不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。 AdOpenDynamic:动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。 AdOpenStatic:静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。
(3) LockType 属性 指示编辑过程中对记录使用的锁定类型。设置或返回以下某个LockTypeEnum的值。 AdLockReadOnly:默认值,只读。无法更改数据。 AdLockPessimistic:保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。 AdLockOptimistic:开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用Update方法时锁定记录。
三、Command对象 Command对象的主要是用来执行SQL语句。在没有Command对象的情况下,执行SQL语句的方法有两种。 方法一:使用ADODC控件。 Adodc1.CommandType=adCmdText Adodc1.RecordSource=SQL语句 Adodc1.Refresh
方法二:使用Recordset对象的Open方法。 rs.Open SQL语句 cn, adOpenDynamic, adLockPessimistic 采用Command对象后,有第三种方法可以执行SQL语句, 即使用Command对象。 Dim cn As New ADODB.Connection‘创建一个Connection对象实例cn Dim cmd As New ADODB.Command‘创建一个Command对象实例cmd Dim rs As New ADODB.Recordset‘创建一个Recordset对象实例rs Set cmd.ActiveConnection = cn sSQL = “select * from provider”‘SQL语句 cmd.CommandText = sSQL Set rs = cmd.Execute‘执行SQL语句的结果构成一个记录集实例rs
四、Field对象 Field对象代表各字段的类型和值。每个Field对象对应于Recordset中的一列。Recordset对象含有由Field对象组成的Fields集合。使用Field对象的Value属性可设置或返回当前记录的数据。读取字段值的常用语法格式如下。 方法一:Recordset.Fields(i).Value: 存取第i个字段的内容。参见例8-4。 方法二:Recordset.Fields(字段名称).Value:根据字段名称来存取字段的内容。 如:Recordset.Fields(“供应商名称”).Value
方法三:Recordset![字段名称] 如:Recordset![供应商名称] 注意方法三中的字段名称不能用双引号括起来,而且字段名称不能用变量代替。
五、Error对象 用来检测和判断在数据库操作中出现的错误,比如连接失败等。在VB中,出现特定ADO的错误将引发On Error事件,并且该错误将出现在Error对象中。 在ADO中,有些对象名后多了一个"s",比如Errors,Fields等等。添加"s"意味着这是相应对象的集合对象,比如Errors是Error对象的集合对象。 在了解ADO对象模型中主要对象的使用方法后,对ADO对象的主要操作总结如下。
⑴ 连接到数据源。通常涉及ADO的Connection对象。 ⑵ 向数据源提交命令。通常涉及ADO的Command对象。 ⑶ 执行命令。比如执行一个SELECT语句。 ⑷ 如果提交的命令有结果返回,这些结果将存储在易于检查、操作或更改的缓存中。可以通过ADO的Recordset对象对结果进行操作。 ⑸ 提供错误检测。通常涉及ADO的Error对象。
【例8-4】 要求设置ADODC控件在程序运行时建立和数据库supermarket.mdb的连接,把表provider中的全部记录内容用List控件显示。通过InputBox函数输入要查找的供应商名称,并把结果显示在DataGrid控件中,如下图所示。
Command1 Caption为“显示供应商的全部记录” Name为CmdAll Command2 Caption为“显示您需要的供应商信息” Name为CmdQuery List1 Name为ListRecord DataGrid1 DataSource为Adodc1 设计步骤如下。 ①创建一个新的工程,向窗体中添加一个Adodc1控件,两个CommandButton按钮,一个List控件和一个DataGrid控件。每个控件的属性设置如下表所示。
注意在使用ADO对象之前,先从菜单“工程”---“引用…”中引用“”Microsoft ActiveX Data Object 2.0 Library”,这样才可以使ADO对象模型中的Connection,Recordset,Command,Fields等对象可用。 ②输入如下的程序代码。 ③保存该窗体和工程文件。