1,ADO对象模型
ADO(ActiveX Data Object)活动数据访问接口是
Microsoft处理数据库信息的最新技术。采用 OLE DB
的数据访问模式,是数据访问对象 DAO,远程数据对象 RDO和开放数据库互连 ODBC三种方式的扩展。
ADO对象模型定义了一个可编程的分层对象集合,主要由三个对象成员 Connection,Command和
Recordset对象,以及几个集合对象 Errors、
Parameters和 Fields等所组成。
6.5 ADO数据控件
6.5 ADO数据控件图 6.13 ADO对象模型
6.5 ADO数据控件
Connection对象
Errors集合 Error对象
Command对象
Parameters集合 Parameter对象
Recordset对象
Fields集合 Field对象
6.5 ADO数据控件表 6.6 ADO对象描述对象名 描 述
Connection 指定连接数据来源
Command 发出命令信息从数据源获取所需数据
Recordset 由一组记录组成的记录集
Error 访问数据源时所返回的错误信息
Parameter 与命令对象有关的参数
Field 记录集中某个字段的信息
2,使用 ADO数据控件
使用 ADO数据控件,必须先通过 "工程 | 部件 "菜单命令选项 。
6.5 ADO数据控件选择 "Microsoft ADO Data
Control 6.0(OLEDB)"
将 ADO数据控件添加到工具箱在窗体中使用 ADO
数据控件的方式与
Data控件相似,使用 ADO数据控件的基本属性,可以快速地创建与数据库的连接 。
在程序中使用 ADO对象,必须先为当前工程引用
ADO的对象库 。 引用方式是执行 "工程 "菜单的 "引用 "命令,启动引用对话框,在清单中选 取
"MicrosoftActiveX Data Objects 2.0
Library"选项 。
6.5 ADO数据控件进入
1) ADO数据控件的基本属性
ConnectionString属性
ADO控件没有 DatabaseName属性,它使用
ConnectionString属性与数据库建立连接。该属性包含了用于与数据源建立连接的相关信息。
指定打开客户端连接时使用的服务器路径名称,仅限于 Remote Data Service
RemoteServer
指定打开客户端连接时使用的提供者名称。(仅限于 Remote Data Service)
RemoteProvider
指定数据源所对应的文件名FileName
指定数据源的名称Provide
描述参数
ConnectionString属性参数
6.5 ADO数据控件
6.5 ADO数据控件默认值。 CommandText 属性中的命令类型未知
adCmdUnknown
将 CommandText作为存储过程名进行计算AdCmdStoredProc
将 CommandText 作为其列,全部由内部生成的 SQL 查询返回的表格的名称进行计算
AdCmdTable
将 CommandText作为命令或存储过程调用的文本化定义进行计算
AdCmdText
说 明Command类型
RecordSource属性
该属性确定可访问的数据,这些数据构成记录集对象
Recordset。 该属性值可以是数据库中单个表名、一个存储查询或者是使用 SQL查询语言的查询字符串。
ConnectionTimeout属性
用于数据连接的超时设置,若在指定时间内连接不成功显示超时信息 。
MaxRecords属性
定义从一个查询中最多能返回的记录数 。
6.5 ADO数据控件
2) ADO数据控件的方法和事件
ADO数据控件的方法和事件与 Data控件的方法和事件完全一样 。
3) 设置 ADO数据控件的属性
下面通过使用 ADO数据控件连接 Student.mdb数据库来说明 ADO数据控件属性的设置 。
6.5 ADO数据控件
步骤 1:在窗体上放置 ADO数据控件,控件名采用默认名 "Adodcl"。
6.5 ADO数据控件
步骤 2:在 ADO控件按鼠标右键,选择 ADO属性时,
弹出 "属性页 "对话框 。
6.5 ADO数据控件允许通过三种不同的方式连接数据源 表示通过一个连接文件来完成使用 ODBC数据资源名称 可以通过下拉式列表框,选择某个创建好的数据源名称 (DSN),作为数据来源对远程数据库进行控制通过选项设置自动产生连接字符串
步骤 3:采用 "使用连接字符串 "方式连接数据源 。
6.5 ADO数据控件单击 "生成 "按钮,打开 "数据链接属性 "对话框
步骤 3:采用 "使用连接字符串 "方式连接数据源 。
6.5 ADO数据控件在 提供程序 "选项内选择一个合适的 OLE DB
数据源,Student.mdb是 Access数据库,选择
"Microsoft Jet 3.51 OLE DB Provider"
选项 。
单击 "下 —步 "按钮
步骤 3:采用 "使用连接字符串 "方式连接数据源 。
6.5 ADO数据控件在 "连接 "选项内,
指定数据库文件,
Student.mdb
为保证连接有效,可单击 "连接 "选项卡右下方的 "测试连接 "按钮,如果测试成功则关闭数据链接属性页
步骤 4:在记录源属性页对话框。
6.5 ADO数据控件在 "命令类型 "下拉列表框中选择
"2?adCmdTable"
选项在 "表或存储过程名称 "
下拉式列表框中选择
Student.mdb数据库中的 "基本情况 "表
完成 ADO数据控件的连接工作 。 进入
3,ADO数据控件上新增绑定控件的使用
和 ADO数据控件的绑定控件属性主要包括,
DataSource,DataField,DataMember,DataFormat
DataSource和 DataField的连接功能增强了 ;
DataMember属性允许处理多个数据集,从数据供应程序提供的几个数据成员中返回或设置一个特定的数据成员 ;
DataFormat属性用于指定数据内容的显示格式 。
6.5 ADO数据控件例 6.6 使用 ADO数据控件和 DataGrid数据网格控件浏览数据库 Student.mdb,并使之具有编辑功能。
下图为具有增、删、改功能的数据网格绑定。
6.5 ADO数据控件标有?号的记录行表示允许增加新记录进入
DataGrid控件使用方法,
需通过 "工程 |部件 "菜单命令选择 DataGrid控件,
6.5 ADO数据控件将 DataGrid
控件添加到工具箱
DataGrid控件使用方法,
将 DataGrid控件放置到窗体上 。
设置 DataGrid网格控件的 DataSource属性为 Adodc1,
实现 DataGrid1绑定到数据控件 Adodc1。
6.5 ADO数据控件
DataGrid控件允许用户同时浏览或修改多个记录的数据 。
6.5 ADO数据控件
AllowAddNew(增)
AllowDelete(删)
AllowUpdate(改)
修改功能通过 DataGrid属性设置实现,可以设置的属性为:
进入
添加 DataGrid网格上显示的字段,可用鼠标右键单击 DataGrid控件,在弹出的快捷菜单中选择 "检索字段 "选项 。 Visual Basic提示是否替换现有的网格布局,单击 "是 "按钮就可将表中的字段装载到 DataGrid控件中 。
6.5 ADO数据控件
用鼠标右键单击 DataGrid控件,在弹出的快捷菜单中选择 "编辑 "选项,进入数据网格字段布局的编辑状态,此时,当鼠标指在字段名上时,鼠标指针变成黑色向下箭头 。
6.5 ADO数据控件在该窗体点击鼠标右键,选择属性选项 可修改字段标题或字段的显示宽度。
进入必须使用 ADO数据控件进行绑定的控件,
6.5 ADO数据控件
DataList控件 DataSource,DataFiled
RowSource,ListFiled
必须使用 ADO数据控件进行绑定的控件,
6.5 ADO数据控件
DataCombo控件 DataSource,DataFiled
RowSource,ListFiled
必须使用 ADO数据控件进行绑定的控件,
6.5 ADO数据控件
DataReport控件
在,工程,菜单上,
单击,添加 Data
Enviroment”向工程中添加设计器 。
如果设计器没有在 "
工程 "菜单上列出,
则单击 "部件 "。 单击 "设计器 "选项卡 。
并单击 "数据环境 "
把设计器添加到菜单上 。
6.5 ADO数据控件
DataReport控件点击鼠标右键,出现菜单,选择属性,出现
"数据链接属性 "对话框选择 "Microsoft Jet 3.51
OLE DB Provider",这是为访问 Jet 数据库选择正确的 OLE DB 提供商单击下一步
6.5 ADO数据控件
DataReport控件指定数据库测试连接
6.5 ADO数据控件
DataReport控件点击鼠标右键,出现菜单,选择 "添加子命令 ",
出现 Command属性页选择表选择 "基本情况表 "
6.5 ADO数据控件
DataReport控件选择表点击 "关联 "
选择 "学生成绩表 "
点击鼠标右键,出现菜单,选择 "添加子命令 ",
出现 Command属性页
6.5 ADO数据控件
DataReport控件父命令来自 Command1
两个表通过学号相关联
6.5 ADO数据控件
DataReport控件
在 "工程 "菜单上,单击 "添加 Data Report"
6.5 ADO数据控件
DataReport工作区 资源管理器列表
DataPeport需要绑定两个属性
6.5 ADO数据控件点击鼠标右键,选择插入文本框点击鼠标右键,选择插入标签,标签 CAPTION=学生成绩表点击鼠标右键,选择插入标签文本框两个属性绑定设置
6.5 ADO数据控件
DataReport控件
在窗体中添加一个 Command控件,并填写代码如下,
Private Sub Command1_Click()
DataReport1.Show
End Sub
点击 Command控件则可显示报表
DataReport1.Show
进入必须使用 ADO数据控件进行绑定的控件,
6.5 ADO数据控件
MSChart控件 DataSource
select 基本情况,姓名,
avg(成绩 )as 平均成绩,
min(成绩 ) as 最低成绩
from 学生成绩表,基本情况
where 学生成绩表,学号
=基本情况,学号
group by 学生成绩表,学号,
基本情况,姓名 order by
avg(成绩 ) desc
进入
4,使用数据窗体向导
数据窗体向导属于外接程序 。 在 Visual Basic
6.0集成开发环境的横向菜单中点击 "外接程序 ",
再点击子菜单的 "外接程序管理器 ",从打开的 "
外接程序管理器 "窗口选择 "VB 6数据窗体向导
" 命令,将数据窗体装入到 "外接程序 "中 。
例 6.7 使用数据窗体向导建立 Student.mdb数据库的数据访问对话框 。
6.5 ADO数据控件步骤 1,选择 "外接程序 "菜单中的 "数据窗体向导 "命令
6.5 ADO数据控件点击 "确定 ",进入 "数据窗体向导 —介绍 "对话框
6.5 ADO数据控件单击 "下 —步 "按钮,进入 "数据窗体向导 —数据库类型 "对话框可以选择任何版本的 Access数据库或任何 ODBC兼容的用于远程访问的数据库 。 本例选择 Access数据库 。
6.5 ADO数据控件步骤 3,在 "数据窗体向导 —数据库 "对话框内选择具体的数据库文件 。 本例为 Student.mdb数据库 。
6.5 ADO数据控件步骤 4:在 "数据窗体向导 —Form"对话框内设置应用窗体的工作特性 。
6.5 ADO数据控件按单条记录形式显示按数据网格形式同时显示多条记录按数据网格形式同时显示多表的多条记录按多种数据网格形式同时显示多条记录本例演示第 5种窗体布局生成方法单击下一步步骤 5:在 "数据窗体向导 —记录源 "对话框内设置应用窗体的工作特性 。
6.5 ADO数据控件记录源选择学生成绩表从可用字段栏选择要显示的字段到选定字段栏列排序按 "学号 "
步骤 6:在 "数据窗体向导 —选择图表字段 "对话框内选择所需要显示的文字 。
6.5 ADO数据控件步骤 7:进入 "数据窗体向导 —选择图表样式 "对话框,
可以将整个操作过程保存到一个向导配置文件,rwp中 。
6.5 ADO数据控件选择 3D Bar
步骤 8:进入 "数据窗体向导 —选择外观属性 "对话框,
可以将整个操作过程保存到一个向导配置文件,rwp中 。
6.5 ADO数据控件选择显示图例步骤 7:进入 "数据窗体向导 —已完成 "对话框,可以将整个操作过程保存到一个向导配置文件,rwp中 。
单击 "完成 "按钮结束数据窗体向导的交互,此时向导将自动产生数据访问对话框的画面及代码 。
6.5 ADO数据控件进入
SQL中使用 SELECT语句实现查询 。
Data控件的 RecordSource属性可以是 数据表名 ;
RecordSource属性可以是 数据表中的某些行或多个数据表中的数据组合 。 直接在 Data控件的
RecordSource属性栏中输入 SQL,或在代码中通过
SQL 语 句 将 选 择 的 记 录 集 赋 给 数 据 控 件 的
RecordSource属性 。
6.6 VB中的 SQL实现
6.6 VB中 SQL的实现
例 6.8 使用 SQL语句实现查找功能,显示某专业的学生记录 。
使用 SQL语句查询,命令按钮 Command5_Click
事件代码如下:
6.6 VB中的 SQL实现进入
6.6 VB中的 SQL实现
Private Sub Command5_Click()
Dim mzy As String
mzy = InputBox$("请输入专业 ","查找窗 ")
Data1.RecordSource = "Select * From 基本 _情况 Where 专业 = '" & mzy & "'"
Data1.Refresh
If Data1.Recordset.EOF Then
MsgBox "无此专业 !",,"提示 "
Data1.RecordSource = "基本情况 "
Data1.Refresh
End If
End Sub
短语指定数据来源;
"Where 专业 = '" & mzy & "'""
短语构成查询条件,
用于过滤表中的记录对于未查找到记录情况的处理激活 RecordSource的变化
6.6 VB中的 SQL实现
Private Sub Command5_Click()
Dim mzy As String
mzy = InputBox$("请输入专业 ","查找窗 ")
Data1.RecordSource = "Select * From 基本 _情况 Where 专业 = '" & mzy & "'"
Data1.Refresh
If Data1.Recordset.EOF Then
MsgBox "无此专业 !",,"提示 "
Data1.RecordSource = "基本情况 "
Data1.Refresh
End If
End Sub
如果使用模糊查询语句可改写如上专业 like '*" & mzy & "*'"
进入例 6.9 用 SQL语句从 Student.mdb数据库的两个数据表中选择数据构成记录集,并通过数据控件浏览记录集 。
6.6 VB中的 SQL实现进入
Data控件的属性 设置
DatabaseName属性,Student.mdb,
RecordSource属性,空缺
各文本框的属性 DataSource=Data1,DataField属性分别设置为学号,姓名,课程,成绩,而照片字段绑定图形框 。
本例要求从 两个实表中选择字段构成虚表 。
从基本情况中选择学生的学号、姓名、照片,
从学生成绩表中选择该学生的课程和成绩来构成记录集。
6.6 VB中的 SQL实现
实现方法:在 Form_ Load事件中 使用 SQL语句
6.6 VB中的 SQL实现
Private Sub Form_Load()
Data1.RecordSource = "Select 基本情况,学号,基本情况,姓名,基本情况,照片,学生成绩表,课程,学生成绩表,成绩
From 学生成绩表,基本情况
Where 学生成绩表,学号 =基本情况,学号 "
End Sub
进入例 6.10 用 SQL指令按专业统计 Student.mdb数据库中各专业的人数,并统计平均成绩前 5名的学生,要求按下图所示形式输出 。
6.6 VB中的 SQL实现进入
窗体中的控件为 Data控件 和 网格控件 MSFlexGrid1。
Data1的 DatabaseName属性,Student.mdb;
RecordSource属性,空缺
网格控件的 DataSource:Data1。
分组查询:为了统计各专业的人数,对基本情况表内的记录按专业分组 。 使用 "Group By专业 "语句,将同一专业的所有记录合为一组新记录 。
命名别名:要记录统计结果,需要构造一个新的输出字段,使用 SQL的统计函数 Count()作为输出字段,它按专业分组创建统计值 。 由于在表中没有表示该内容的字段名,可用 As短语命名一个别名
6.6 VB中的 SQL实现
"按专业统计人数 "按钮的指令代码为:
6.6 VB中的 SQL实现
Private Sub Command1_Click()
Data1.RecordSource =
"Select 专业,Count(*) As 人数
From 基本情况
Group By 专业 "
Data1.Refresh
End Sub
如需要 "按平均成绩统计前 5名 " 按钮指令代码为,
6.6 VB中的 SQL实现
Private Sub Command2_Click()
Data1.RecordSource =
"Select Top 5 学号,Avg(成绩 ) As 平均成绩
From 学生成绩表
Group By 学号
Order By Avg(成绩 ) Desc"
Data1.Refresh
End Sub
Avg(成绩 )计算该学生的平均成绩
"Order By Avg(成绩 ) Desc"按平均成绩的降序排列数据"Group By 学号 "将同一学生的各门课程的记录合并成一条记录
"Top 5"短语返回最前面的 5条记录
"恢复原表内容 "按钮的指令代码为:
6.6 VB中的 SQL实现
Private Sub Command3_Click()
Data1.RecordSource = "基本情况 "
Data1.Refresh
End Sub
进入例 6.11使用 ADO数据控件,用 SQL语句从 Student.mdb数据库的两个数据表中选择数据构成记录集 。
6.6 VB中的 SQL实现进入
使用 ADO数据控件 Adodc1;
各文本框的 Datasource=Adodc1,DataField属性分别设置为学号,姓名,课程,成绩,而字段照片绑定图形框 。
ADO数据控件的数据源采用 连接字符串 的方式连接;
属性设置为与数据源连接的相关信息,数据链接属性设置与 Student.mdb的数据连接。
6.6 VB中的 SQL实现
记录源设置如下
6.6 VB中的 SQL实现
select 学生成绩表,*,基本情况,姓名,基本情况,照片
from 学生成绩表,基本情况
where 学生成绩表,学号 =基本情况,学号进入例 6.12 设计一个窗体,计算 Student.mdb数据库内学生成绩表中每个学生的平均成绩,产生姓名,平均成绩和最低成绩三项数据,按平均成绩降序排列数据,
并用该数据作图 。
6.6 VB中的 SQL实现进入
绘制图表使用 MsChart。 MsChart控件需要通过 "工程 | 部件 "命令,将 MSChart控件添加到工具箱 。
MSChart1的 DataSource绑定,Adodc1
将 Adodcl的 RecordSource属性设置为 SQL语句:
6.6 VB中的 SQL实现
"Select 基本情况,姓名,Avg(成绩 ) As 平均成绩,Min(成绩 ) As 最低成绩
From 学生成绩表,基本情况
Where 学生成绩表,学号 =基本情况,学号
Group By 姓名
Order By Avg(成绩 ) Desc"
学生成绩表中没有平均成绩和最低成绩这两项数据,在 SELECT子句中使用统计函数 Avg ()和 Min()
产生;
学生成绩表中没有姓名字段,故需要多表查询,
通过条件 "基本情况,学号 =学生成绩表,学号 "从基本情况表获取 。
"Group By 姓名 "可将同一学生的记录合并成一条新记录 。
6.6 VB中的 SQL实现进入
在 C/ S结构中用 ODBC与数据库连接和数据操作 。
例 6.13 使用 ADO数据控件和 ODBC 技术,设计一个简单窗体,显示 Student.mdb数据库的基本情况表 。
6.7 VB中使用 ODBC
6.7 VB中使用 ODBC
进入
步骤 1:在窗体上放置 ADO数据控件,控件名采用默认名 "Adodcl"。
6.5 ADO数据控件
步骤 2:在 ADO控件按鼠标右键,选择 ADO属性时,
弹出 "属性页 "对话框 。
6.5 ADO数据控件使用 ODBC数据资源名称 可以通过下拉式列表框,选择某个创建好的数据源名称 (DSN),作为数据来源对远程数据库进行控制
步骤 3:在创建新数据源对话框,选择数据源
6.5 ADO数据控件只有创建者能访问的数据库文件登录该机器的任何用户都能访问的数据库文件所有用户均可以访问的数据库文件数据源名就是系统知道的数据库文件名。数据源名只要生成一次,此后任何应用程序都可以使用。如果系统中没有数据源名,则需生成新的数据源名
步骤 4:在创建新数据源对话框,选择驱动器
6.5 ADO数据控件选择 Microsoft Access Driver
步骤 5:在 "属性页 "对话框,选择使用 ODBC数据资源名称
6.5 ADO数据控件使用 ODBC数据资源名称 可以通过下拉式列表框,选择某个创建好的数据源名称 (DSN),作为数据来源对远程数据库进行控制
6.7 VB中使用 ODBC
步骤 6:单击,完成,按钮,生成数据源 。 指定的
Access数据库赋予新建的数据源 。 出现在 "ODBC
Microsoft Access 安装 "窗口中,操作步骤如下:
设置数据源名为 Student1
指定一个 Access数据库 Student.mdb
赋予新建的数据源 Student1
步骤 6:展开下拉清单,并选择 student1数据源 。
6.7 VB中使用 ODBC
Mystudent数据源已经注册到系统上,
不必再次生成。它会自动出现在 ADO
数据控件属性页的 "使用 ODBC数据资源名称 "下拉清单中 进入例 6.14 ADO数据控件使用自己的高级约束数据控件,
即 DataList和 DataCombo控件 。
6.7 VB中使用 ODBC
进入
DataList
DataCombo
DataCombo控件属性设置
DataSource= Adodc1,DataFiled= 出生年月
ListFiled= 出生年月
DataList控件属性设置
RowSource= Adodc1,ListField=学号 。
6.7 VB中使用 ODBC
DataList控件 vRowSource,ListFiled
DataCombo控件 DataSource,DataFiled,ListFiled
设置下拉菜单中的字段设置文本中显示的字段
DataList控件中所选的学号对约束数据控件没有影响 。 如要在 DataList清单中每次选择另一学号时,同时移动 ADO数据控件,需要加入一些代码:
6.7 VB中使用 ODBC
Private Sub DataList1_Click()
Adodc1.Recordset.Bookmark =_
DataList1.SelectedItem
End Sub
每次单击清单中的新项目时,这个项目就成为 ADO数据控件的书签。
用于自动建立 DataList控件的数据通常没有排序 。
如果 DataList控件中学号没有排序,就无法方便地找到清单中的项目 。
要使 DataList控件中学号 排序,按如下步骤修改
ADO数据控件的 RecordSource属性:
① 右键单击 Adodc1控件,并在属性页中将 "ODBC
数据源名 "设置为 student1。
② 切换到 "记录源 " 标签,指定 SQL 语句而不是表格 。 将 "命令类型 "设置为 "adCmdUnknown",并在 "命令文本 "框中输入下列 SQL语句:
Select * From 基本情况 Order By 学号
6.7 VB中使用 ODBC
进入
6.5.5 ADO对象编程
6.7.5 ADO对象编程一,ADO对象
(一 )ADO对象介绍
ADO是 ActiveX Data Obiect的缩写,是建立在
OLE DB之上的高层数据库访问技术 。 ADO被设计用来同新的数据访问层 OLE DB Provider一起协同工作,以提供通用数据访问 (Universal Data
Access)。 OLE DB是一个低层的数据访问接口,
用它可以访问各种数据源,包括传统的关系型数据库,以及电子邮件系统及自定义的商业对象,
6.5.5 ADO对象编程
(二 )ADO对象
ADO最基本的操作流程:
① 初始化 COM库,引入 ADO库定义文件:
② 用 Connection对象连接数据库;
③ 利用建立好的连接,通过 Connection,Command对象执行 SQL命令,或利用 Recordset对象取得结果记录集进行查询,处理;
④ 使用完毕后关闭连接释放对象 。
6.5.5 ADO对象编程
Set 语句
将对象引用赋给变量或属性。语法,
Set objectvar = {[New] objectexpression |
Nothing}
可选的。断绝 objectvar 与任何指定对象的关联。
Nothing
必需的。由对象名,所声明的相同对象类型的其它变量,或者返回相同对象类型的函数或方法所组成的表达式。
objectexpre
ssion
可选的。通常在声明时使用 New,以便可以隐式创建对象。如果 New 与 Set 一起使用,则将创建该类的一个新实例。
new
必需的。变量或属性的名称。objectvar
6.5.5 ADO对象编程声明对象变量
声明对象变量的方法和声明其它变量一样,要用
Dim,ReDim,Static,Private 和 Public。仅有的不同在于可选的 New 关键字和 Class 参数。
语法是:
{Dim | ReDim | Static | Private | Public}
variable As [New] class
Open 方法 (ADO Connection)
功能:打开到数据源的连接。
语法
connection.Open ConnectionString,UserID,
Password,OpenOptions
以下参数均为可选项参数
ConnectionString,包含连接信息的字符串。
UserID,包含建立连接时所使用的用户名称。
Password,字符串,包含建立连接时所用密码。
OpenOptions,ConnectOptionEnum 值。如果设置为 adConnectAsync,则异步打开连接。当连接可用时将产生 ConnectComplete事件。
6.5.5 ADO对象编程
Sub ConnectionExample()
Dim cnn as ADODB.connection
Set cnn=new ADODB.connection
'通过 ODBC DSN打开数据库
cnn.open "pubs","sa",""
'检查是否成功建立连接对象
if cnn.state=adStateOpen then
msgbox "Welcome to pubs!"
else
msgbox "Sorry,no pubs!"
end if '关闭连接对象
cnn.close
End sub
使用 Open 方法建立到数据源的物理连接,pubs是 SQL Server
安装附带的数据库,sa为 system administrator
使用 Close 方法切断其到数据源的物理连接指示对象是打开的
6.5.5 ADO对象编程
1.Connection对象
Connection对象的创建、连接以及关闭数据库的方法:
表 6-1 Connection对象属性列表建立 Connection前,用来建立到数据源的连接的信息。
ConnectionString
功 能属 性该属性的主要参数 Provider(指定数据库 OLE DB的提供者,如 SQL Server),Data Source、
User ID,Password
6.5.5 ADO对象编程表 6-1 Connection对象属性列表
ADO 实现的版本号version
描述对象的当前状态主要返回值为
adStateOpen或 adStateClosed
state
指示在一个 connection 中允许修改数据
Mode
指定一个 Connection提供者的名字provider
功能属性
CursorLocation 指定游标的位置
6.5.5 ADO对象编程表 6-2 Connection对象方法列表打开 Connection对象Open
执行 SQL语言,或者查询Execute
关闭释放 Connection对象Close
终止当前的数据库操作Cancel
取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。
RollbackTrans
开始一个新的事务处理
(Transaction)
BeginTrans
功能方法
6.5.5 ADO对象编程
2.数据集对象 ——Recordset
Recordset对象表示的是基本表或命令执行结果的记录集 。
使用 ADO时,通过 Records对象可对几乎所有数据进行操作 。
可以使用 MoveFirst,MoveLast,MoveNext 和
MovePrevious 方 法 以 及 Move 方法,和
AbsolutePosition,AbsolutePage和 Filter属性来重新确定当前记录的位置 。 当使用 Move方法访问每个记录 (或枚举 Recordset)时,可用 BOF和 EOF
属性查看移动是否已经超过了 Recordset的开始或结尾 。
6.5.5 ADO对象编程
Recordset对象可支持两类更新:立即更新和批更新。使用立即更新,一旦调用 Update方法,对数据的所有更改将被立即写入基本数据源。也可以使用 AddNew和 Update方法将值的数组作为参数传递,同时更新记录的若干字段。
如果提供者 Provider支持批更新,可以使提供者
Provider将多个记录的更改存入缓存,然后使用
UpdateBatch方法在单个调用中将它们传送给数据库。
6.5.5 ADO对象编程
3,命令对象 —— Command
Command 对象也是 ADO的特色之一 。 一般用于大量数据的操作或者是对数据库表单结构的操作 。
表 6-3 Command对象属性列表
Command对象运行状态State
指定 Command对象的名字Name
定义命令(如 SQL 语句)的可执行文本CommandText
指定正使用的 CommandText命令的类型Commandtype
指定当前命令对象属于哪个 ConnectionActiveConnection
功 能属 性
6.5.5 ADO对象编程表 6-4 Command对象方法列表执行命令并在适当的时候返回 Recordset
对象
Excute
创建参数CreateParameter
放弃操作Cancel
功能方法
6.5.5 ADO对象编程返回字段的基本特性Type、
Precision
返回给定字段中数据的实际大小ActualSize
查看或更改字段中的数据Value
返回已声明的字段大小DefineSize
返回字段名Name
功能属性表 6-5 Field对象属性列表
4.字段对象 ——Field
Recordset对象包含由 Field对象组成的 Fields集合。
每个 Field对象对应于 Recordset中的一列。
6.5.5 ADO对象编程表 6-6 Field对象方法列表返回长字符数据或二进制数据
Field对象的全部或部分内容
GetChunk
将数据追加到长字符数据、二进制数据 Field。
AppendChunk
功能属性
6.5.5 ADO对象编程
5.错误集合 ——Errors
每个 Error对象都代表特定的提供者 Provider的数据访问错误的详细信息,而不是 ADO 错误 。
任何涉及 ADO对象的操作都会生成一个或多个提供者 Provider的错误 。 每个错误出现时,一个或多个 Error对象将被放到 Connection对象的 Errors集合中 。 当另一个 ADO操作产生错误时,Errors集合将被清空,并在其中放入新的 Error对象集 。
在 Microsoft Visual Basic中,产生特定 AD0的错误将触发 On Error
6.5.5 ADO对象编程表 6-7 Error对象属性列表给定 Errorr对象的、特定提供者的错误代码
NativeError
返回 SQL 定义的错误类型的状态SQLState
标识产生错误的对象。在向数据源发出请求之后,如果 Errors集合中有多个 Error
对象,则将会用到该属性
Source
包含错误常量的长整型整数值Number
包含错误的文本Description
功能属性
6.5.5 ADO对象编程表 6-8 Error集合的方法列表根据名称或序号返回集合的特定成员Item
删除集合中的所有对象Clear
功能方法
6.5.5 ADO对象编程二,用 ADO操纵数据库
使用 ADO操作数据库的主要步骤和方法:
打开数据库 。
首先需要 创建数据库连接对象 (connection),然后调用该对象的 Open方法 即可打开数据库 。
操作数据库数据 。
在数据库打开之后,通过 Connection,Command对象执行 SQL命令,或者创建记录集 (Recordset)对象,使用该对象的各种方法就可以进行数据库数据的查询,定位以及增加,删除和修改 。
关闭数据库 。 使用上面创建的数据库连接对象的
close方法就可以进行数据库的关闭 。
6.5.5 ADO对象编程
( 一 ) AD0连接数据库
1,连接到 ODBC数据源
Microsoft ODBC Provider允许 ADO连接到任何 ODBC
的数据源 。
连接到 Microsoft ODBC Provider,连接字符串属性
(ConnectionString)的参数 "Provider="设置为默认值,MSDASQL,即
Provider=MSDASQL;
读取 Provider属性也将返回该字符串 。
Provider的 默认 参数 值 可以省略,
指定 DSN参数参见后面表要连接的数据库的名称。DATABASE
在设计时连接数据库服务器所使用的密码。
PWD 参数在 DSN 中不显示。
PWD
在设计时连接数据库服务器所使用的用户 ID。UID
服务器名称或数据库驻留的缺省目录。SERVER
数据源的名称。 DSN 参数指示了机器数据源。
FileDSN 参数指示了文件数据源。 如果在
Web 应用程序中提供了 DSN 参数,那么连接就是 DSN 连接。如果没有这个参数,连接就是非 DSN 连接。
DSN 或
FileDSN
ODBC 驱动程序的类型。DRIVER
描 述参 数
"[Provider=MSDASQL; ]
{DSN=name|FileDSN=filename};
[DATABASE=databasename; ]
UID=username;
PWD=password"
6.5.5 ADO对象编程
如果使用 DSN或 FileDSN,则须通过 "Windows控制面板 "中的 "ODBC管理器 "进行定义。
带有 DSN或 FileDSN的语法如下:
"[Provider=MSDASQL; ]
DRIVER=drivername;
SERVER=servername;
DATABASE=databasename;
UID=username;
PWD=password"
6.5.5 ADO对象编程
无 DSN(非 DSN连接 )的语法如下:
set con=new ADODB.connection
con.Open
"provider=Microsoft.Jet.OLEDB.4.0;
Data Source=c:\library.mdb;"_
&"Persist Security Info=False"
6.5.5 ADO对象编程
2.连接到 Access数据文件
可以使用指定 OLE DB提供者和连接字符串来连接
Access数据文件。
例如:
其中 c:\library.mdb为数据库的路径和名称。
Provider=Microsoft,Jet,OLEDB,4,0;
Password=sa; 'sa为系统管理员密码
User ID=rose; 'rose为用户名
DataSource= c:\library.mdb;
Persist Security Info=True
6.5.5 ADO对象编程
如果数据库有密码,则:
6.5.5 ADO对象编程
如果数据库是局域网其他计算机上的,那么这个数据库所在的位置,至少上一层目录为共享目录,
这里 "\\qyKong\ data\ library.mdb"为在网络邻居中名为 qyKong的机器上 (IP也可以 )的 data
文件夹下的名为 library的 Access数据。
Provider=Microsoft,Jet,OLEDB,4,0;
User ID=rose;
DataSource=\\qyKong\ data\ library.mdb;
Persist Security Info=False
6.5.5 ADO对象编程
3,连接到 SQL Server数据源
以下范例通过打开 3个使用不同提供者的
Connection对象演示 Provider属性,还使用
DefaultDatabase属性设置 Microsoft ODBC提供者的默认数据库 。
Private Sub Providerx()
Dim cnn1 As ADODB.Connection
Dim cnn2 As ADODB.Connection
Dim cnn3 As ADODB.Connection
6.5.5 ADO对象编程
'使用 Microsoft ODBC提供者打开数据库
Set cnn1 = New ADODB.Connection
cnn1.ConnectionString="driver={SQL Server};"_
&"server=bigsmile;uid=sa;pwd=pwd"
cnn1.Open strCnn
cnn1.DefaultDatabase = "pubs"
'显示提供者
MsgBox "cnn1 provider:" & cnn1.Provider
Open方法:打开一个到数据源的连接格式:
connection.Open ConnectionString,UserID,Password
为数据库所在服务器名数据库名
6.5.5 ADO对象编程
'使用 Microsoft Jet提供者打开数据库
Set cnn2 = New ADODB.Connection
cnn2.Provider = "Microsoft.Jet.OLEDB.3.51"
cnn2.Open "c:\samples\northwind.mdb","admin"
'显示提供者
MsgBox "cnn2 provider:" & cnn2.Provider
6.5.5 ADO对象编程
'使用 Microsoft SQL服务器提供者打开数据库
Set cnn3 = New ADODB.Connection
cnn3.Provider = "sqloledb"
'SQLServer联机服务器提供的 oledb
cnn3.Open "Data source=srv;
Initial Catalog = pubs;","sa"
'显示提供者
MsgBox "cnn3 provider:" & cnn3.Provider
cnn1.Close
cnn2.Close
cnn3.Close
End Sub
定义的数据源名
6.5.5 ADO对象编程
② ODBC-File DSN连接方法,cnn.Open "filedsn=c:\somepath\mydb.dsn;
uid=admin;
pwd=;"
方法,cnn.Open "dsn=advWorks;
uid=admin;
pwd=;"
通过以上介绍,可以总结出 ADO与不同数据库连接所使用的连接字符串如下:
ODBC连接
① ODBC-DSN连接
6.5.5 ADO对象编程方法,cnn.Open
"driver={Microsoft Access Driver (*.mdb)};"
&"dbq= c:\somepath\mydb.mdb;
'使用关键字 dbq来指定数据库文件的路径。
uid=admin;
pwd=;"
ODBC连接
③ ODBC Driver for Access
VB提供的 数据源驱动程序,
允许 ADO访问 Access数据库
6.5.5 ADO对象编程
ODBC连接
④ ODBC Driver for SQL Server
方法,cnn.Open "driver={SQL Server};
server=myServerName;"_
&"database= myDatabaseName;
uid=admin;
pwd=;"
VB提供的数据源的驱动程序,
允许 ADO访问 SQL Server数据库
6.5.5 ADO对象编程
OLE DB Provider连接
① OLE DB Provider For Microsoft Jet
方法:
con.Open
"provider=Microsoft.Jet.OLEDB.4.0;"_
&"Data Source= c:\somepath\mydb.mdb;
uid=admin;
pwd=;"
VB提供的连接字符串,允许
ADO 访问 Microsoft Jet
数据库
6.5.5 ADO对象编程
OLE DB Provider连接
② OLE DB Provider For ODBC Database
Access(Jet)方法,
cnn.Open "Provider=MSDASQL;
driver={Microsoft Access Driver (*.mdb)};"_
&"dbq=c:\somepath\mydb.mdb;
'使用关键字 dbq来指定数据库文件的路径。
uid=myUserName;
pwd=myPassWord;"
Microsoft ODBC Provider 允许 ADO
连接到任何 ODBC 的数据源,该连接字符串为 ADO 的默认 ODBC提供者
6.5.5 ADO对象编程
cnn.Open "Provider=MSDASQL;
driver={SQL Server};
server=myServerName;"_
&"database=myDatabaseName;
uid=myUserName;
pwd=myPassWord;"
OLE DB Provider连接
② OLE DB Provider For ODBC Database
SQL Server方法:
6.5.5 ADO对象编程
MS remote 连接
① MS remote for Access(Jet)
通过 ODBC DSN方法:
cnn.Open "Provider=MS remote;
Remote Server=http://myServerName;"_
&"Remote Provider=MSDASQL;
dsn=advWorks;
uid=myUserName;
pwd=myPassWord;"
与 IIS一同安装并位于 C:\InetPub \ASPSamp
\AdvWorks的数据源 AdvWorks.mdb
6.5.5 ADO对象编程
cnn.Open "Provider=MS remote;
Remote Server=http://myServerName;"&_
"Remote Provider= Microsoft.Jet.OLEDB.4.0;
database= myDatabaseName;
uid=admin;
pwd=;"
MS remote 连接
① MS remote for Access(Jet)
通过 OLE DB Provider方法:
VB提供的连接字符串,允许
ADO 访问 Microsoft Jet
数据库
6.5.5 ADO对象编程
MS remote 连接
② MS remote for SQL Server
通过 ODBC DSN方法:
cnn.Open "Provider=MS remote;
Remote Server=http://myServerName;"_
&"Remote Provider=MSDASQL;
dsn=myDataSourceName;"_
&"uid=myUserName;
pwd=myPassWord;"
Microsoft ODBC Provider 允许 ADO
连接到任何 ODBC 的数据源,该连接字符串为 ADO 的默认 ODBC提供者
6.5.5 ADO对象编程
cnn.Open"Provider=MS remote;
Remote Server=http://myServerName;"_
&"Remote Provider=SQLOLEDB;
dataSource= myServerName;"_
&"Initial Catalog=myDatabaseName;
uid=myUserName;
pwd=myPassWord;"
MS remote 连接
② MS remote for SQL Server
通过 OLE DB Provider方法:
Microsoft SQL Server OLE DB Provider
允许 ADO 访问 SQL Server,该字符串为连接到该提供者的字符串
6.5.5 ADO对象编程
(二 )用记录集 (Recordset)对象操纵数据
记录集 (Recordset)对象是 ADO操作中最常用的对象。
Open方法( ADO) Recordset
功能:打开游标
recordset.Open Source,ActiveConnection,
CursorType,LockType,Options
Open后面的参数均为可选项参数
Source,计算 Command 对象的变量名,SQL 语句,
表名,存储过程调用或持久 Recordset 文件名 。
ActiveConnection,计算有效 Connection 对象变量名;或字符串,包含 ConnectionString参数 。
打开一个静态类型 rdoResultset 对象。adOpenStatic
打开一个键集类型 rdoResultset 对象。
adOpenDynamic 打开一个动态类型 rdoResultset 对象。
adOpenKeyset
打开一个仅向前类型 rdoResultset对象。
即只可以从头到尾搜索行 (缺省值 )
adOpen
ForwardOnly
说 明常 量
CursorType,确定提供者打开 Recordset 时应该使用的游标类型 。 可为下列常量之一健相当于书签,只可根据健集的健值,添加、改变或删除基础数据库表或表的行。 获取更新行的查询结果。
不支持健,是行的动态集合,
动态添加改变或删除基础数据库表或表的行。 获取更新行的查询结果。
打开客户端 Recordset 对象时唯一允许使用的游标类型,这个游标使用的结果集合中的成员关系,顺序和值通常是固定的 。 相当于 结果集 的副本观察不到动态变化
LockType,参数指定锁定类型以支持并发,参数可为下列常量之一开放式批更新 — 用于批更新模式(与立即更新模式相对)。
adLockBatch
Optimistic
开放式锁定(逐个) — 只在调用 Update 方法时才锁定记录。
adLock
Optimistic
保守式锁定(逐个) — 为确保成功编辑记录,
在编辑时立即锁定数据源的记录。
adLock
Pessimistic
只读 — 不能改变数据。(默认值)adLock
ReadOnly
说 明常 量
Options,指示提供者如何计算 Source 参数,或从以前保存 Recordset 的文件中恢复 Recordset。可为下列常量之一指示提供者应该将 Source 视为存储的过程。
adCmdStoredProc
指示提供者应从 CommandText 命名的表中返回所有行。
adCmdTableDirect
指示 ADO 生成 SQL 查询以便从 Source
命名的表返回所有行。
adCmdTable
指示提供者应该将 Source 作为命令的文本定义来计算。
adCmdText
说 明常 量指示在提取 CacheSize 属性中指定的初始数量后,应该异步提取所有剩余的行。
adFetchAsync
指示应异步执行 Source。adExecuteAsync
指示应从 Source 命名的文件中恢复持久保存的 Recordset。
(默认值)
adCommandFile
指示 Source 参数中的命令类型为未知。
adCmdUnknown
说 明常 量
6.5.5 ADO对象编程
1.创建、打开 RecordSet对象以及浏览数据记录下面来学习一个例子:
Sub ADOopenRecords()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
'打开连接
cnn.Open"provider=Microsoft.Jet.OLEDB.4.0;
Data Source=c:\northwind.mdb;"
6.5.5 ADO对象编程
'打开方式 forward_only,read_only
rst.Open "select * from customers
'数据库 northwind中的表
where region='WA'",cnn,
adOpenForwardOnly,'游标 只能在记录中向前滚动
adLockReadOnly '只读功能
ActiveConnection这 两 行 均为默认值
6.5.5 ADO对象编程
Move,MoveNext,MoveFirst等方法,和 DAO相同。
'输出第一个记录的所有字段值
For Each fld In rst.Fields 'fld为字段
Debug.Print fld.Value & ";";
'Debug.Print在 "调试 "窗口的 "立即 "面板中输出
Next
Debug.Print
'关闭数据记录集对象
rst.Close
cnn.Close
End Sub
6.5.5 ADO对象编程
2.查询数据记录
ADO的查询数据库记录的方法和 DAO有所不同,DAO可以利用 Recordset对象的 FindFirst,FindNext、
FindLast,FindPrevious方法,依次用 Move浏览查询到的记录,并显示出来。
ADO只有 Find方法,该方法允许使用一个查找字符串,
它由单引号 (')或数码符号( #)加以封闭。双引号
(")不能使用,数码符号必须封闭数值。
如果使用 Like操作符,就可以用星号 (*)作为字符串值中的通配符。然而,星号必须是值中的最后一个字符或值中的唯一字符。
6.5.5 ADO对象编程
Find(ADO)方法的调用语法是:
RstName.Find Criteria[,SkipRecords,
SearchDirection[,Start]]
Criteria是字符串类型,包含用于搜索的指定列名、比较操作符和值的语句是 ;。
比较符仅限于 "=",">","<",">=","<="和
"LIKE";
比较只是针对于表中的单个字段。
SkipRecords是长整型值,默认值为零。它指定当前行或 start 书签的位移以开始搜索。
searchDirection 指定搜索应从当前行还是搜索方向上的下一个有效行开始 。 其值可为
adSearchForward 或 adSearchBackward。 搜索停止在记录集的开始还是末尾则取决于
searchDirection 值 。
start 变体型书签,用作搜索的开始位置 。
6.5.5 ADO对象编程
3,增,删,改数据记录
ADO用与 DAO采用相同的方法进行添加,删除操作 。
唯一不同点要先建立一个 connection对象 。
ADO还提供了一种快捷的添加方式,
Rst.AddNew
Array("CompanyName","Phone"),
Array("ABCD CO","(010)123-4567")
修改现有记录时,ADO不需要调用 Edit方法,直接对当前记录某字段属性赋值之后调用 update方法就可以实现。
6.5.5 ADO对象编程
4.构造无数据源的数据集
所述的无 "数据源 "连接,是指不需要配置注册数据源所进行的连接。
ADO是微软提供的数据库访问技术。它被设计用来同新的数据访问层 OLE DB Provider一起协同工作,以提供通用数据访问 (Universal Data
Access)能力。 OLE DB是一个底层的数据访问接口,用它可以访问各种数据源,包括传统的关系型数据库、电子邮件系定义的商业对象等。
6.5.5 ADO对象编程
构造无数据源的数据集的方法主要是在代码中对
Connection对象的 ConnectionString属性进行设置。
Dim cnn1 A1s ADODB.Connection
Set cnn1 = New ADODB.Connection
'不使用 DSN打开数据库
cnn1.ConnectionString="driver={SQL Server};"_
&"server=bigsmile;
uid=sa;
pwd=pwd;
database=pubs"
cnn1.Connectiontimeout=30
cnn1.Open
dri ={ e }
6.5.5 ADO对象编程
以上代码完成了对于名字为 bigsmile的服务器上的 SQL Server数据库 pubs的连接,其中连接的用户名为 sa,密码为 pwd。
完成了连接后,就可以进行记录集的创建以及对数据的增,删,改和查询了 。
6.5.5 ADO对象编程
(三 ) ADO运行的查询语句
使用 Connection对象的 Execute方法,执行在
CommandText属性中指定的查询,SQL 语句 或 存储过程,查询内容由该方法的参数确定 。
如果 CommandText 属性指定按行返回查询,执行所产生的任何结果都将存储在新的 Recordset
对象中 。 如果该命令不是按行返回查询,则提供者返回关闭的 Recordset 对象 。
语法,
对于不按行返回的命令字符串:
connection,Execute CommandText,
RecordsAffected,Options
6.5.5 ADO对象编程
Set recordset=connection.Execute
CommandText,RecordsAffected,Options
对于按行返回的命令字符串:
参数
CommandText:字符串,包含要执行的 SQL语句,
表名,存储过程 等 。
RecordsAffected:可选,返回操作所影响的记录数目 。
Options,可选,指 示 提 供 者 应 如 何 为
CommandText 参数赋值,可为下列值之一 。
主要常量说明,
adCmdText:指示提供者应将 CommandText 赋值为命令的文本定义 。
adCmdTable:指示 ADO 应生成 SQL 查询以便从
CommandText 命名的表中返回所有行 。
adCmdStoredProc指示提供者应将 CommandText
赋值为存储过程 。
adCmdUnknown指示 CommandText 参数中的命令类型未知 。
Execute方法 返回值,
返回 Recordset 对象引用。
如果用 New 关键字声明一个对象变量,Visual
Basic 将自动创建一个对象,并在第一次使用该变量时赋值对象引用。
例如 cnn就是数据库连接的对象引用,建立好连接后,所以的数据库操作都要通过这个对象引用 cnn
来进行。
Execute方法使用如下例:
6.5.5 ADO对象编程
Sub ExcuteX()
Dim cnn As ADODB.Connection
Dim strSQLChange As String
'定义 SQL语句作为命令文本执行
strSQLChange ="update employee set first
name ='steven'"&"where employee ID='1'"
SQL命令 Update
功能:保存对 Recordset对象的当前记录所做的更改。
语法,Update [DatabaseName1!]TableName1
SET Column_name1=eExpression1
[,Column_name2=eExpression2… ]
Where Condition1[ AND | OR Condition1… ]]
6.5.5 ADO对象编程
'打开连接
cnn.Open "provider=Microsoft.Jet.OLEDB.4.0;
Data Source=.\northwind.mdb;"
'执行查询命令
cnn.Execute strSQLChange
cnn.Close
End Sub
6.5.5 ADO对象编程
(四 ) ADO控件及对象编程举例例 1,使用 ADO控件的属性和方法进行编程。使用绑定控件增加、删除、修改书籍( Titles)信息。
进入
6.5.5 ADO对象编程表 6.9 主要控件对象的属性
2
Adodc1
作者
Index
Datasource
DataField
Text1(2)
1
Adodc1
所属主题
Index
Datasource
DataField
Text1(1)
0
Adodc1
书籍编号
Index
Datasource
DataField
Text1(0)
数据浏览captionAdodc1
值属性控件
6.5.5 ADO对象编程
5
Adodc1
数量
Index
Datasource
DataField
Text1(5)
4
Adodc1
价格
Index
Datasource
DataField
Text1(4)
3
Adodc1
书籍名称
Index
Datasource
DataField
Text1(3)
6.5.5 ADO对象编程代码如下:
Private Sub Form_Load() '窗体加载
Adodc1.ConnectionString =
"provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & App.Path & "\library.mdb;
Persist Security Info=False"
Adodc1.RecordSource = "select * from Titles"
Adodc1.Refresh
6.5.5 ADO对象编程
For i = 0 To 5
Text1(i).Enabled = False
Next i
cmdsave.Enabled = False '添加记录按钮
cmdcancel.Enabled = False '删除记录按钮
End Sub
6.5.5 ADO对象编程
Private Sub cmdadd_Click() '添加记录
Adodc1.Recordset.AddNew
For i = 0 To 5
Text1(i).Enabled = True
Text1(i).Text = ""
Next i
Text1(0).SetFocus
6.5.5 ADO对象编程
cmdadd.Enabled = False
cmddelete.Enabled = False
cmdedit.Enabled = False
cmdsave.Enabled = True
cmdcancel.Enabled = True
cmdmove(0).Enabled = False
cmdmove(1).Enabled = False
cmdmove(2).Enabled = False
cmdmove(3).Enabled = False
End Sub
6.5.5 ADO对象编程
Private Sub cmddelete_Click() '删除记录
Dim myval As String
myval = MsgBox("是否要删除该记录? ",vbYesNo)
If myval = vbYes Then
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
If Adodc1.Recordset.EOF
Then Adodc1.Recordset.MoveLast
For i = 0 To 5
Text1(i).Enabled = False
Next i
End If
End Sub
6.5.5 ADO对象编程
Private Sub cmdedit_Click() '修改记录
If Adodc1.Recordset.RecordCount <> 0 Then
For i = 0 To 5
Text1(i).Enabled = True
Next i
cmdsave.Enabled = True
cmdcancel.Enabled = True
cmdadd.Enabled = False
cmdedit.Enabled = False
cmddelete.Enabled = False
6.5.5 ADO对象编程
cmdmove(0).Enabled = False
cmdmove(1).Enabled = False
cmdmove(2).Enabled = False
cmdmove(3).Enabled = False
Else
MsgBox ("没有要修改的记录! ")
End If
End Sub
6.5.5 ADO对象编程
Private Sub cmdsave_Click() '保存记录
If Text1(0).Text = "" Then
MsgBox "书籍编号不能为空! "
Text1(0).SetFocus
Exit Sub
End If
Adodc1.Recordset.Update
For i = 0 To 5
Text1(i).Enabled = False
Next i
6.5.5 ADO对象编程
cmdsave.Enabled = False
cmdcancel.Enabled = False
cmdadd.Enabled = True
cmdedit.Enabled = True
cmddelete.Enabled = True
cmdmove(0).Enabled = True
cmdmove(1).Enabled = True
cmdmove(2).Enabled = True
cmdmove(3).Enabled = True
End Sub
6.5.5 ADO对象编程
Private Sub cmdcancel_Click() '放弃修改
Adodc1.Recordset.CancelUpdate
For i = 0 To 5
Text1(i).Enabled = False
Next i
cmdsave.Enabled = False
cmdcancel.Enabled = False
cmdadd.Enabled = True
cmdedit.Enabled = True
cmddelete.Enabled = True
6.5.5 ADO对象编程
cmdmove(0).Enabled = True
cmdmove(1).Enabled = True
cmdmove(2).Enabled = True
cmdmove(3).Enabled = True
End Sub
6.5.5 ADO对象编程
Private Sub cmdmove_Click(Index As Integer)
'移动记录指针
Select Case Index
Case 0
Adodc1.Recordset.MoveFirst
Case 1
Adodc1.Recordset.MovePrevious
If Adodc1.Recordset.BOF
Then Adodc1.Recordset.MoveFirst
Case 2
Adodc1.Recordset.MoveNext
If Adodc1.Recordset.EOF
Then Adodc1.Recordset.MoveLast
6.5.5 ADO对象编程
Case 3
Adodc1.Recordset.MoveLast
End Select
End Sub
Private Sub cmdExit_Click() '退出
Unload Me
End Sub
进入
6.5.5 ADO对象编程例 2,使用 ADO对象进行编程,增加、删除、修改书籍( Titles)信息。控件不需要绑定,即 text控件不需设置 Datasource和 DataField属性。
ADO对象编程
注意:为了使用 ADO对象编程,必须在程序中引入 ADO对象 。 引入 ADO对象的方法是选择菜单
"工程 "→" 引用 ",在清单中选择 "Microsoft
ActiveX Data Objects 2.0 Library"。
进入
6.5.5 ADO对象编程代码如下:
Dim rs As New ADODB.Recordset
'声明数据库连接对象
Dim cnn As ADODB.Connection '声明记录集对象
Private Sub Form_Load() '窗体加载
Set cnn = New ADODB.Connection
cnn.Open "provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & App.Path & "\library.mdb;
Persist Security Info=False"
Set rs = New ADODB.Recordset
rs.Open "select * from titles",cnn,_
adOpenDynamic,adLockOptimistic
'打开动态类型游标,开放式锁定 updata时才 锁定
6.5.5 ADO对象编程
If rs.BOF And rs.EOF Then
MsgBox "表中无记录! "
Else
rs.MoveFirst
Call viewdata
End If
For i = 0 To 5
Text1(i).Enabled = False
Next i
cmdsave.Enabled = False
cmdcancel.Enabled = False
End Sub
6.5.5 ADO对象编程
Private Sub viewdata() '浏览数据
On Error Resume Next
Text1(0).Text = rs.Fields("书籍编号 ")
Text1(1).Text = rs.Fields("所属主题 ")
Text1(2).Text = rs.Fields("作者 ")
Text1(3).Text = rs.Fields("书籍名称 ")
Text1(4).Text = rs.Fields("价格 ")
Text1(5).Text = rs.Fields("数量 ")
End Sub
6.5.5 ADO对象编程
Private Sub cmdadd_Click() '增加记录
rs.AddNew
For i = 0 To 5
Text1(i).Enabled = True
Text1(i).Text = ""
Next i
Text1(0).SetFocus
6.5.5 ADO对象编程
cmdadd.Enabled = False
cmddelete.Enabled = False
cmdedit.Enabled = False
cmdsave.Enabled = True
cmdcancel.Enabled = True
cmdmove(0).Enabled = False
cmdmove(1).Enabled = False
cmdmove(2).Enabled = False
cmdmove(3).Enabled = False
End Sub
6.5.5 ADO对象编程
Private Sub cmddelete_Click() '删除记录
Dim myval As String
myval = MsgBox("是否要删除该记录? ",vbYesNo)
If myval = vbYes Then
rs.Delete
rs.MoveNext
If rs.EOF Then rs.MoveLast
Call viewdata
For i = 0 To 5
Text1(i).Enabled = False
Next i
End If
End Sub
6.5.5 ADO对象编程
Private Sub cmdedit_Click() '编辑记录
If rs.RecordCount <> 0 Then
For i = 0 To 5
Text1(i).Enabled = True
Next i
cmdsave.Enabled = True
cmdcancel.Enabled = True
cmdadd.Enabled = False
cmdedit.Enabled = False
cmddelete.Enabled = False
指示 Recordset对象中记录的当前数目
6.5.5 ADO对象编程
cmdmove(0).Enabled = False
cmdmove(1).Enabled = False
cmdmove(2).Enabled = False
cmdmove(3).Enabled = False
Else
MsgBox ("没有要修改的记录! ")
End If
End Sub
6.5.5 ADO对象编程
Private Sub cmdsave_Click() '保存记录
If Text1(0).Text = "" Then
MsgBox "书籍编号不能为空! "
Text1(0).SetFocus
Exit Sub
End If
rs.Fields("书籍编号 ") = Text1(0).Text
rs.Fields("所属主题 ") = Text1(1).Text
rs.Fields("作者 ") = Text1(2).Text
6.5.5 ADO对象编程
rs.Fields("书籍名称 ") =
Text1(3).Text
rs.Fields("价格 ") = Text1(4).Text
rs.Fields("数量 ") = Text1(5).Text
rs.Update
For i = 0 To 5
Text1(i).Enabled = False
Next i
cmdsave.Enabled = False
cmdcancel.Enabled = False
6.5.5 ADO对象编程
cmdadd.Enabled = True
cmdedit.Enabled = True
cmddelete.Enabled = True
cmdmove(0).Enabled = True
cmdmove(1).Enabled = True
cmdmove(2).Enabled = True
cmdmove(3).Enabled = True
End Sub
6.5.5 ADO对象编程
Private Sub cmdcancel_Click() '放弃修改
rs.CancelUpdate
rs.MoveFirst
Call viewdata
For i = 0 To 5
Text1(i).Enabled = False
Next i
cmdsave.Enabled = False
cmdcancel.Enabled = False
6.5.5 ADO对象编程
cmdadd.Enabled = True
cmdedit.Enabled = True
cmddelete.Enabled = True
cmdmove(0).Enabled = True
cmdmove(1).Enabled = True
cmdmove(2).Enabled = True
cmdmove(3).Enabled = True
End Sub
6.5.5 ADO对象编程
Private Sub cmdmove_Click(Index As Integer)
'移动记录指针
Select Case Index
Case 0
rs.MoveFirst
Case 1
rs.MovePrevious
If rs.BOF Then rs.MoveFirst
Case 2
rs.MoveNext
If rs.EOF Then rs.MoveLast
6.5.5 ADO对象编程
Case 3
rs.MoveLast
End Select
Call viewdata
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
进入
6.5.5 ADO对象编程
3.SQL与 ADO对象联合编程例 6-3,SQL与 ADO对象联合编程,增加、删除、修改书籍( Titles)信息。
进入
6.5.5 ADO对象编程
Dim sql As String
Dim mysql As String
Dim myval As String
Dim editf As Integer
Dim rs As New ADODB.Recordset
'声明数据库连接对象
Dim cnn As ADODB.Connection '声明记录集对象
Private Sub Form_Load() '窗体加载
Set cnn = New ADODB.Connection
cnn.Open "provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & App.Path & "\library.mdb;
代码如下,
6.5.5 ADO对象编程
Persist Security Info=False“
Set rs = New ADODB.Recordset
rs.Open "select * from titles",cnn,
adOpenDynamic,adLockOptimistic
If rs.BOF And rs.EOF Then
MsgBox "表中无记录! "
Else
rs.MoveFirst
Call viewdata
End If
cmdsave.Enabled = False
cmdcancel.Enabled = False
End Sub
6.5.5 ADO对象编程
Private Sub viewdata() '浏览数据
On Error Resume Next
Text1(0).Text = rs.Fields("书籍编号 ")
Text1(1).Text = rs.Fields("所属主题 ")
Text1(2).Text = rs.Fields("作者 ")
Text1(3).Text = rs.Fields("书籍名称 ")
Text1(4).Text = rs.Fields("价格 ")
Text1(5).Text = rs.Fields("数量 ")
End Sub
6.5.5 ADO对象编程
Private Sub cmdadd_Click()?添加记录
For i = 0 To 5
Text1(i).Text = ""
Next i
Text1(0).SetFocus
cmdadd.Enabled = False
cmddelete.Enabled = False
cmdedit.Enabled = False
6.5.5 ADO对象编程
cmdsave.Enabled = True
cmdcancel.Enabled = True
cmdmove(0).Enabled = False
cmdmove(1).Enabled = False
cmdmove(2).Enabled = False
cmdmove(3).Enabled = False
edirf = 0 '设置添加标志
End Sub
6.5.5 ADO对象编程
Private Sub cmddelete_Click() '删除记录
myval = MsgBox("是否要删除该记录? ",
vbYesNo)
If myval = vbYes Then
mysql = "delete from Titles where 书籍编号 ='"
mysql = mysql + Text1(0).Text + "'"
cnn.Execute mysql
rs.Close
sql = "select * from Titles"
rs.Open sql,cnn,adOpenDynamic,_
adLockOptimistic
'打开动态类型游标,开放式锁定
6.5.5 ADO对象编程
If rs.BOF And rs.EOF Then
MsgBox "表中无记录! "
Else
rs.MoveFirst
Call viewdata
End If
End If
End Sub
6.5.5 ADO对象编程
Private Sub cmdedit_Click() '修改记录
If rs.RecordCount <> 0 Then
For i = 0 To 5
Text1(i).Enabled = True
Next i
cmdsave.Enabled = True
cmdcancel.Enabled = True
cmdadd.Enabled = False
cmdedit.Enabled = False
cmddelete.Enabled = False
6.5.5 ADO对象编程
cmdmove(0).Enabled = False
cmdmove(1).Enabled = False
cmdmove(2).Enabled = False
cmdmove(3).Enabled = False
Else
MsgBox (“没有要修改的记录!,)
End If
editf = 1 '设置修改标志
End Sub
6.5.5 ADO对象编程
Private Sub cmdsave_Click() '保存记录
Select Case editf
Case 0
If Text1(0).Text = "" Then
MsgBox "书籍编号不能为空! "
Text1(0).SetFocus
Exit Sub
End If
Dim rstemp As New ADODB.Recordset
Dim strtemp As String
strtemp = "select * from Titles where 书籍编号 ='" & Trim(Text1(0).Text) & "';"
rstemp.Open strtemp,cnn,adOpenDynamic,
adLockPessimistic
If Not rstemp.EOF Then
MsgBox "书籍编号不唯一,重新输入! "
Text1(0).Text = ""
Text1(0).SetFocus
rstemp.Close
Exit Sub
End If
rstemp.Close
mysql = "insert into titles (书籍编号,所属主题,作者,书籍名称,价格,数量 ) values ('"
mysql = mysql + Text1(0).Text + "','"
mysql = mysql + Text1(1).Text + "','"
mysql = mysql + Text1(2).Text + "','"
mysql = mysql + Text1(3).Text + "','"
mysql = mysql + Text1(4).Text + "','"
mysql = mysql + Text1(5).Text + "')"
cnn.Execute mysql
MsgBox "保存成功!,
6.5.5 ADO对象编程
Case 1
Text1(0).Locked = True '书籍编号是主键,不能改
mysql = "update Titles set 所属主题 ='" +
Text1(1).Text + "',作者 ='"
mysql = mysql + Text1(2).Text + "',书籍名称 ='"
mysql = mysql + Text1(3).Text + "',价格 ='"
mysql = mysql + Text1(4).Text + "',数量 ='"
mysql = mysql + Text1(5).Text + "'where 书籍编号 ='" + Text1(0).Text + "'“
MsgBox "修改完毕! "
Text1(0).Locked = False
edirf = 0
End Select
6.5.5 ADO对象编程
For i = 0 To 5
Text1(i).Enabled = False
Next i
cmdsave.Enabled = False
cmdcancel.Enabled = False
cmdadd.Enabled = True
cmdedit.Enabled = True
cmddelete.Enabled = True
cmdmove(0).Enabled = True
cmdmove(1).Enabled = True
cmdmove(2).Enabled = True
cmdmove(3).Enabled = True
End Sub
6.5.5 ADO对象编程
Private Sub cmdmove_Click(Index As Integer)
'记录指针移动
On Error Resume Next
Select Case Index
Case 0
rs.MoveFirst
Case 1
rs.MovePrevious
If rs.BOF Then rs.MoveFirst
Case 2
rs.MoveNext
If rs.EOF Then rs.MoveLast
6.5.5 ADO对象编程
Case 3
rs.MoveLast
End Select
Call viewdata
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
进入
问题提出:
① 在计算机网络下集中式数据库系统表现出它的不足,因为。数据按实际需要已在网络上分布存储,再采用集中式处理,势必造成通信开销大;
② 应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。
6.8 网络数据库设计
6.8 网络数据库设计
1,C/S工作模式
6.8 网络数据库设计
6.8.1 客户机 /服务器 (C/S)数据库客户机的任务 服务器的任务管理用户界面 接收客户机的数据库请求接受用户数据 处理对数据库的请求处理应用逻辑 格式化结果并传给客户机生成数据库请求 进行完整性检查发送数据库请求 维护数据字典,索引从服务器接收结果 处理数据恢复格式化结果 优化查询/更新处理
2,C/ S模式的体系结构
C / S模式的基础结构图 6.27 C/ S模式的体系结构
6.8 网络数据库设计用户 用户 用户客户机 客户机 客户机文件服务 打印服务 数据库服务打印机文件 DB
客户机中间件服务器
6.8 网络数据库设计
6.8.2 VB中网络数据库设计
三种不同的数据库编程方式
迄今,Microsoft已经为 VB编程人员提供了三种不同的数据库编程方式:
( 1)数据访问对象( Data Access Object,DAO) 方式
DAO是允许程序员操作 Microsoft Jet数据库引擎的第一个面向对象的接口。 Jet数据库引擎是一种用来访问 Microsoft Access和其他数据源的记录和字段的技术。它对于单一系统的数据库应用程序非常有效。
( 2) 远程数据对象 ( Remote Data Object,RDO) 方式
RDO提供给开放数据库互连 ( ODBC) 数据源的面向对象的接口 。 RDO是开发 Microsoft SQL Server、
Oracle 和其他大型关系数据库应用程序的绝大多数数据库开发者使用的对象模型 。
( 3) ActiveX数据对象 (Active Data Object,ADO)
方式
ADO是 DAO和 RDO方式的继承者,其编程模型是
Microsoft的一种新技术 。
6.8 网络数据库设计
该技术使用 Microsoft最新和最强大的数据访问技术 OLE DB,是一个简单的应用程序层接口 。 该技术的客户端应用程序能够通过任何 OLE DB 提供者来访问和操作数据库服务器的数据 。
OLE DB是新的底层接口,它能够处理任何类型的数据,而不需考虑它们的格式和存储方法,是一种通用的数据访问范例 。 这就意味着可以访问
Excel电子数据表,文本文件甚至邮件服务器 。
由于 OLE DB接口比较复杂,不能在 VB中直接访问,
ADO封装并且实现了 OLE DB的所有功能,从而可以通过 ADO调用 OLE DB。
6.8 网络数据库设计如果要对数据库进行查询操作,既可以使用 Execute
方法,也可以使用 Command对象 。
用 Connection 对象的 Execute 方法,可以发出结构化查询语言 (SQL) 查询数据库源并检索结果。使用 Execute方法比较简便。
6.8 网络数据库设计通过 ADO Command 对象,可以象用 Connection
对象和 Recordset 对象那样执行查询,唯一的不同在于用 Command 对象可以在数据库源上准备、
编译你的查询并且反复使用一组不同的值来发出查询。这种方式的编译查询的优点是可以最大程度地减少向现有查询重复发出修改的请求所需的时间。另外,还可以在执行之前通过查询可变部分的选项使 SQL 查询保持局部未定义。
Command对象可以保存命令的信息,以便多次查询 。
6.8 网络数据库设计