您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页数据库开发入门:VB+ADO

数据库开发入门:VB+ADO

来源:华佗小知识
数据库访问控件ADO

9.1 ADO控件

Visual Basic中可用的数据访问接口有三种:ActiveX数据对象(ActiveX Data Objects,ADO)、远程数据对象(RDO)和数据访问对象(DAO)。这三种接口的每一种都分别代表了数据访问技术的不同发展阶段。最新的是ADO,它是比RDO和DAO更加简单,然而更加灵活的对象模型。目前,通常使用ADO作为数据访问接口。

图9-1 ADO数据存取控件

ActiveX 数据对象拥有与其对应的可视化控件ADO Data控件(ADODC)。可视化的ADODC具有“向前”和“向后”等按钮,因此易于使用。ADO数据控件并非VB的标准控件,使用之前先要将ADODC加入工具箱

图9-2 添加新部件

右键单击工具箱空白处,选择“部件(O)…”命令。系统弹出“部件”窗口,从“控件”选项卡中找到“Microsoft ADO Data Control 6.0 (OLEDB)”,选中并单击“确定”按钮。于是,工具箱中将出现ADO控件图标

第 1 页

图9-3 添加ADO控件

9.2 使用ADO控件创建一个简单的前端数据库应用程序

实例CH9-1 浏览联系人

使用ADODC创建浏览联系人的界面,后台数据库使用ACCESS 2003“联系人示例数据库”Contact.mdb。

第1步: 窗体上放置一个 ADO Data 控件,命名为ADODC1。 第2步: 在设计界面选定ADODC1,然后按F4键显示“属性”窗口。 第3步: 在“属性”窗口中,单击“ConnectionString”显示属性设置对话框。

第 2 页

选中“使用连接字符串”,单击按钮,

选择“Microsoft Jet 4.0 OLE DB Provider”,单击

,在“连接”选项

卡中选择数据库文件名。如果数据库文件与当前的应用程序在同一个路径下,则可以省略路径名。

第 3 页

单击,如果数据库文件路径和格式正确,系统提示“测试连接成功。”

第4步: 在“属性”窗口中,将“CommandType”(命令类型)属性设置为“2 - AdCmdTable” 第5步: 在“属性”窗口中,打开“RecordSource”(记录源)属性设置对话框,“表或存

储过程名称”选择“联系人”表

第6步: 在窗体上放置三个“文本框”控件,用来显示数据库信息。在“属性”窗口中,

将三个文本框的“数据源”属性设为 ADO Data 控件的名称 (ADODC1)。这样就可将这个文本框和ADO Data控件绑定在一起。三个文本框控件的“DataField”(数据字段)属性分别设置为“姓氏”、“名字”和“办公电话”。由于三个文本框分别与数据库中的字段绑定在一起,为了防止用户意外修改记录,通常将文本框的Locked属性设为True。

第7步: 运行该应用程序。用户可以在 ADO Data 控件使用四个箭头按钮浏览所有记录。

需要说明的是,“RecordSource”(记录源)属性也可以使用“命令文本”,即SQL语句。为此,只要将以上“第4步”和“第5步”应换成如下过程即可。 第4步: 第5步:

在“属性”窗口中,将“CommandType”(命令类型)属性设置为“2 - AdCmdText”。 在“属性”窗口中,打开“RecordSource”(记录源)属性设置对话框,“命令

第 4 页

文本(SQL)”中填入如下SQL语句“select * from联系人”

9.3 操作数据表中的记录

实例CH9-2 添加系统用户

使用ADODC控件向数据库文件mydb.mdb中的sysuser表添加新记录。 第1步:

界面设计如下,

第2步: 第3步:

ADODC控件命名为ADODC1,参照实例CH9-1中的第3步至第5步连接到数四个文本框的Locked属性设置为True,然后绑定数据源,即DataSource属性

据库mydb.mdb并以sysuser表作为数据源(使用SQL语句或表均可)。

设为ADODC1,DataField属性分别设为字段名sysuser的secondname、firstname、pid和power。 第4步:

“添加新用户”按钮代码如下,

第 5 页

Private Sub cmdAddUser_Click() Dim s As String Dim fOK As Boolean fOK = True '标记操作过程是否有错误发生 Adodc1.Recordset.AddNew s = InputBox(\"请输入姓氏\") Adodc1.Recordset.Fields(\"secondname\") = s s = InputBox(\"请输入名字\") Adodc1.Recordset.Fields(\"firstname\") = s s = InputBox(\"请输入用户名\") Adodc1.Recordset.Fields(\"pid\") = s s = InputBox(\"请输入用户的权限\" + vbLf + \"1 - 超级用户 2 - 普通用户 3 - 来宾用户\") If Val(s) = 1 Then Adodc1.Recordset.Fields(\"power\") = \"超级用户 \" ElseIf Val(s) = 2 Then Adodc1.Recordset.Fields(\"power\") = \"普通用户 \" ElseIf Val(s) = 3 Then Adodc1.Recordset.Fields(\"power\") = \"来宾用户 \" Else MsgBox \"无效的用户权限,操作将被取消\" Adodc1.Recordset.Cancel '撤销新增记录 fOK = False End If If bOK Then Adodc1.Recordset.Update '更新记录 End If End Sub

实例CH9-3 删除系统用户

使用ADODC控件删除数据库文件mydb.mdb的sysuser表中已经存在的用户。 第1步:

在实例CH9-2的基础上添加一个“删除老用户”按钮,界面设计如下,

第 6 页

第2步: “删除老用户”按钮的代码如下,

Private Sub cmdDelUser_Click() Adodc1.Recordset.Delete '删除当前记录 Adodc1.Recordset.Requery '刷新数据 End Sub

实例CH9-4 设置用户密码

使用ADODC控件修改数据库文件mydb.mdb的sysuser表中用户的信息。 第1步:

在实例CH9-3的基础上添加一个“设置密码”的按钮,界面设计如下,

第2步:

“设置密码”按钮的代码如下,

Private Sub cmdSetPwd_Click() Dim s As String s = InputBox(\"请输入新密码\") If s = InputBox(\"请再输入一次新密码\") Then Adodc1.Recordset.Fields(\"pwd\") = s MsgBox \"密码修改成功\" Else MsgBox \"两次输入的密码不一致\" End If End Sub

7.4 执行查询

实例CH9-5 查询联系人

使用ADODC查询联系人,数据库使用ACCESS 2003“联系人示例数据库”Contact.mdb。 第1步:

在实例CH9-1中新增“按姓氏查询”和“按名字查询”两个按钮,分别命名为

第 7 页

cmdFindSecondName和cmdFindFirstName界面设计如下,

第2步:

这两个按钮的单击事件填写如下代码,

Private Sub cmdFindSecondName_Click() Dim s As String s = Trim(InputBox(\"请输入联系人的姓氏\")) If Len(s) > 0 Then Adodc1.Recordset.Find \"姓氏='\" + s + \"'\" '按姓氏精确查询 End If End Sub Private Sub cmdFindFirstName_Click() Dim s As String s = Trim(InputBox(\"请输入联系人的名字\")) If Len(s) > 0 Then Adodc1.Recordset.Find \"名字 like *\" + s + \"*\" '按名字模糊查询 End If End Sub

9.5 综合实例

实例CH9-6 查询客户订单

数据库使用ACCESS2003的示例数据库“罗斯文数据库(Northwind.mdb)”,界面设计如下,

第 8 页

该数据库结构如下图所示:

核心代码如下:

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) Adodc1.Caption = \"第\" & Adodc1.Recordset.AbsolutePosition & _ \"条记录 共\" & Adodc1.Recordset.RecordCount & \"条记录\" End Sub

Private Sub Combo1_Click()

Adodc1.RecordSource = \"SELECT 产品.产品名称, 订单明细.单价, 订单明细.数量, 订单明细.折扣, \" + _ \" [订单明细]![单价]*[订单明细]![数量]*(1-[订单明细]![折扣]) AS 金额, 客户.公司名称\" + _ \" FROM 客户 INNER JOIN (订单 INNER JOIN\" + _

\" (产品 INNER JOIN 订单明细 ON 产品.产品ID = 订单明细.产品ID)\" + _ \" ON 订单.订单ID = 订单明细.订单ID) ON 客户.客户ID = 订单.客户ID\" + _ \" WHERE 客户.公司名称 = '\" + Combo1.Text + \"'\" Adodc1.Recordset.Requery Adodc1.Refresh End Sub

Private Sub Form_Load()

Adodc1.RecordSource = \"select * from 客户\" Adodc1.Recordset.Requery Adodc1.Refresh Combo1.Clear

Adodc1.Recordset.MoveFirst

Do While Not Adodc1.Recordset.EOF

第 9 页

Combo1.AddItem Adodc1.Recordset.Fields(\"公司名称\") Adodc1.Recordset.MoveNext Loop

Combo1.ListIndex = 0

Adodc1.RecordSource = \"SELECT 产品.产品名称, 订单明细.单价, 订单明细.数量, 订单明细.折扣, \" + _ \" [订单明细]![单价]*[订单明细]![数量]*(1-[订单明细]![折扣]) AS 金额, 客户.公司名称\" + _ \" FROM 客户 INNER JOIN (订单 INNER JOIN\" + _

\" (产品 INNER JOIN 订单明细 ON 产品.产品ID = 订单明细.产品ID)\" + _ \" ON 订单.订单ID = 订单明细.订单ID) ON 客户.客户ID = 订单.客户ID\" + _ \" WHERE 客户.公司名称 = '\" + Combo1.Text + \"'\" Adodc1.Recordset.Requery Adodc1.Refresh End Sub

第 10 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务