深入探究Access OLE DB数据库引擎:技术指南 (access ole db数据库引擎)

随着信息化时代的到来,数据已经成为企业决策和运营的重要基础。而作为Microsoft Office套件中的数据库管理软件,Access能够帮助企业高效管理数据,提高信息化水平。在Access中,OLE DB数据库引擎是数据存储和访问的核心组件。本文将深入探究Access OLE DB数据库引擎,为读者提供技术指南。

1. OLE DB数据库引擎

OLE DB(Object Linking and Embedding Database),是微软公司推出的一种面向对象的数据库访问技术,它不仅可以连接传统的关系型数据库,还可以连接各种非关系型的数据源。在Access中,OLE DB数据库引擎就是通过OLE DB技术实现对各种数据源的访问。

Access OLE DB数据库引擎提供了数据连接、数据访问、数据维护等功能。它可以访问各种数据源,包括Microsoft SQL Server、Oracle、IBM DB2、MySQL等关系型数据库,以及Excel、文本文件、XML文件等非关系型数据源。

2. 数据连接

在Access中,我们可以通过OLE DB数据库引擎连接各种数据源。需要注意的是,在连接数据源之前,我们需要事先安装对应的数据驱动程序。例如,要连接Oracle数据库,我们就需要安装Oracle OLE DB提供程序;而要连接MySQL数据库,则需要安装MySQL ODBC驱动程序。

Access中连接数据源的方式有两种:一种是通过“外部数据”功能,另一种是通过Visual Basic for Applications(VBA)编程。通过“外部数据”功能连接数据源非常简单,只需按照向导一步步操作即可。而通过VBA编程连接数据源,则需要在代码中使用连接字符串来实现。

下面是一段通过VBA编程连接Oracle数据库的示例代码:

“`

Sub ConnectToOracle()

Dim conn As Object

Set conn = CreateObject(“ADODB.Connection”)

conn.ConnectionString = “Provider=OraOLEDB.Oracle;Data Source=ORCL;User ID=scott;Password=tiger”

conn.Open

MsgBox “连接成功!”

conn.Close

End Sub

“`

代码中的“ADODB.Connection”指的是ActiveX Data Objects中的Connection对象,通过其“ConnectionString”属性可以指定连接字符串。在这里,我们使用了Oracle OLE DB提供程序,并连接了名为“ORCL”的Oracle数据库。

3. 数据访问

Access OLE DB数据库引擎不仅可以连接各种数据源,还支持数据的查询、插入、更新、删除等操作。例如,我们可以通过以下代码实现从Oracle数据库读取数据:

“`

Sub QueryFromOracle()

Dim conn As Object

Dim rs As Object

Set conn = CreateObject(“ADODB.Connection”)

Set rs = CreateObject(“ADODB.Recordset”)

conn.ConnectionString = “Provider=OraOLEDB.Oracle;Data Source=ORCL;User ID=scott;Password=tiger”

conn.Open

rs.Open “SELECT * FROM employees”, conn

Do While Not rs.EOF

Debug.Print rs.Fields(“employee_id”).Value, rs.Fields(“first_name”).Value

rs.MoveNext

Loop

rs.Close

conn.Close

End Sub

“`

代码中的“ADODB.Recordset”指的是ActiveX Data Objects中的Recordset对象,通过其“Open”方法可以执行SQL语句,并将数据存储在其中。在这里,我们执行了一个查询语句,读取了Oracle数据库中“employees”表中的所有数据,并输出了“employee_id”和“first_name”两个字段的值。

除了查询数据,Access OLE DB数据库引擎还支持插入、更新、删除等操作。例如,我们可以通过以下代码向MySQL数据库插入数据:

“`

Sub InsertToMySQL()

Dim conn As Object

Set conn = CreateObject(“ADODB.Connection”)

conn.ConnectionString = “Driver={MySQL ODBC 8.0 ANSI Driver};Server=localhost;Database=test;User=root;Password=123456;Option=3;”

conn.Open

Dim strSQL As String

strSQL = “INSERT INTO employees (employee_name, employee_salary) VALUES (‘张三’, 5000)”

conn.Execute strSQL

MsgBox “插入成功!”

conn.Close

End Sub

“`

代码中的“MySQL ODBC 8.0 ANSI Driver”指的是MySQL的ODBC驱动程序,通过连接字符串中的“Driver”属性指定。在这里,我们向名为“test”的MySQL数据库的“employees”表中插入了一行数据,其中包括“employee_name”和“employee_salary”两个字段的值。

4. 数据维护

Access OLE DB数据库引擎还支持数据维护功能,包括创建表、修改表结构、删除表等操作。例如,我们可以通过以下代码在Microsoft SQL Server中创建一个名为“employees”的表:

“`

Sub CreateTableInSQL()

Dim conn As Object

Set conn = CreateObject(“ADODB.Connection”)

conn.ConnectionString = “Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=test;User ID=sa;Password=123456;”

conn.Open

Dim strSQL As String

strSQL = “CREATE TABLE employees (employee_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50))”

conn.Execute strSQL

MsgBox “创建成功!”

conn.Close

End Sub

“`

代码中的“SQLOLEDB”指的是Microsoft SQL Server的OLE DB提供程序,通过连接字符串中的“Provider”属性指定。在这里,我们创建了一个名为“employees”的表,包括“employee_id”、“first_name”和“last_name”三个字段,其中“employee_id”为主键。

除了创建表之外,Access OLE DB数据库引擎还支持修改表结构和删除表等操作。例如,以下代码可以删除MySQL数据库中名为“employees”的表:

“`

Sub DropTableInMySQL()

Dim conn As Object

Set conn = CreateObject(“ADODB.Connection”)

conn.ConnectionString = “Driver={MySQL ODBC 8.0 ANSI Driver};Server=localhost;Database=test;User=root;Password=123456;Option=3;”

conn.Open

Dim strSQL As String

strSQL = “DROP TABLE employees”

conn.Execute strSQL

MsgBox “删除成功!”

conn.Close

End Sub

“`

从以上示例代码可以看出,Access OLE DB数据库引擎提供了非常强大的数据访问和维护功能,可以帮助企业高效管理数据,提高信息化水平。

本文深入探究了Access OLE DB数据库引擎,为读者提供了技术指南。通过本文的介绍,读者可以了解到OLE DB技术的基本原理,以及如何使用Access OLE DB数据库引擎连接、访问和维护各种数据源。同时,也需要注意到,数据管理是一个复杂的过程,需要结合企业实际情况进行分析和设计,才能取得更佳效果。

相关问题拓展阅读:

Access的特点是什么?

ACCESS 是桌面型关系数据库, 适于小型的开发和小数据量的应用,部署简单方便,就一个文件,体积也很小,但适用面不广。

如果要复杂一点,可选用团亩SQL SERVER, 是中型DBMS, 适于较大数据量和高性能要求的应用, 管理相对复杂,但是功能强大, 存储过程,触发器, 自定义函数, 定时租态JOB, MAIL通知等很多功能

Oracle是现在大型企业的主流数据库弊或源,价格相当昂贵,当然性能也非常优秀。

要是用个人自己用的话还是用MySQL吧,开源的数据库,功能不比SQL Sever和Oracle差。

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。

MS ACCESS以它自己的格式将数据存储在基于Access Jet的数据库引擎里。它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库)。

软件开发人员和数据架构师可以使用Microsoft Access开发应用软件,“高级用户”可以使用它来构建软件应用程序。

和其他办公应用程序一样,ACCESS支持Visual Basic宏语言,它是一个面向对象的编程语言,可以引用各种对象,包括DAO(数据访问对象),ActiveX数据对象,以及许多其他的ActiveX组件。可视对象用于显示表和报表,他们的方法和属性是在VBA编程环境下,VBA代码模块可以声明和调用Windows操作系统函数。

扩展资料

Microsoft Access在很多地方得到广泛使用,例汪前如小型企业,大公司的部门。

Access的用途体现在两个方面:

一、用来进行数据分析: access有强大的数余兆据处理、统计分析能力,利用access的查询功困毁清能,可以方便地进行各类汇总、平均等统计。并可灵活设置统计的条件。

比如在统计分析上万条记录、十几万条记录及以上的数据时速度快且操作方便,这一点是Excel无法与之相比的。 这一点体现在:会用access,提高了工作效率和工作能力。

二、用来开发软件: access用来开发软件,比如生产管理、销售管理、库存管理等各类企业管理软件,其更大的优点是:易学,非计算机专业的人员,也能学会。低成本地满足了那些从事企业管理工作的人员的管理需要,通过软件来规范同事、下属的行为,推行其管理思想。

这一点体现在:实现了管理人员(非计算机专业毕业)开发出软件的“梦想”,从而转型为“懂管理+会编程”的复合型人才。

1、Access是 Microsoft Office 的一个组件,一个前后台结合的数据库“软件”。

也就是说Access既拥有用户界面(VB可以用来开发用户界面);也拥有逻辑、流程处理,即VBA语言(VB也可以用来做逻辑处理);又可以存储数据,即在“表”中存储数据。而所有这些都存储在一个 MDB 格式的文件中(当然,也可以是 MDE 等格式)。

回答上述问题: Access里面设计好界面,VB中必须建立ACCESS.APPLICATION才能调用,也就是说这基本是VBA编程,而不是VB编程。

2、Access不是一种存储格式,是一种软件。

请大家严格区分 Access 软件与 MDB 格式。以下的语句是错误的:“我用VB来开发MIS系统,数据存储在ACCESS中。”。VB下调用 MDB 格式(或 JET DB)只是调用一种格式的文件而已,并没有调用到 Access,其实官方说法核嫌叫 “VB 的 JET 应用”。另外,MDB 格式的文件也可以被其他开发工具,比如 DELPHI / PB / C / PHP / ASP / CGI / C# / J# / JAVA / VB.NET / C.NET.。.. 调用。但是被调用的只是 MDB 文件,很多 ACCESS 软件所具有的功能,这些开发工具是无法调用的。

也正因为如此,类似这样的问题“我的系统中没有安装 OFFICE ACCESS,是否能用 ASP 调用 ACCESS 数据库呢?”,答案是:当然可以,其实你根本没有使用 ACCESS 这个软件,只是使用了 MDB 这种数据库格式,而这种格式只要系统中有 OLE DB 引擎就可以支持。WINDOWS 98 以及以上版本的 WINDOWS 操作系统都内置支持 OLE DB 引擎。

3、Access 中的一些对象可以被 VB 调用,但是必须在调用的机器上安装 ACCESS 这个软件(COPY一个MDB文件是不够的)或者安装额外的 ActiveX 控件

4、这里指的纯 ACCESS 环境就是指没有使用任何其他软件,直接使用 ACCESS 界面以及存储格式的环境,也就是不能脱离 ACCESS 运行时的乱睁环境。上面说的 ASP + MDB / VB + MDB 等等都不是所谓的“纯 ACCESS 环境”。因此上述环境中出现的问题基本与 ACCESS 这个软件毫无关系。

5、“我不明白,MDB到底是什么”,回答上述问题:MDB 是一种文件格式,其中的数据以特定方式组织起来,而 ACCESS 这种软件的默认存储格式正好是 MDB

6、“假如说SQL是一个后台数据存储库,那ACCESS既是后台又是前台”,

回答上述问题: SQL 是“结构化查询语言”,请不要与 SQL SERVER 这种数据库软件混淆。SQL SERVER 是一种数据库软件,但是他没有“最终用户”界面,只有适合于开发者使用的界面,开发者可以使用其他编程工具来开发界面,比如用 VB VB.NET 等;而 ACCESS 这个软件本身就具有开发者使用的界面和适合于“最终用户”的界面,也就是我们通常说的前后台结合。

7、“那ACCESS既是后台又是前台,这么说,SQL和ACCESS同样都可以被调用,那为什么还要SQL呢,ACCESS不是完全可以代替SQL了吗”,

回答上述问题:请先参考回答3,ACCESS 的功能和 SQL SERVER 不同所以并不冲突,具体有什么不同请自行参考 ACCESS 的“帮助”以及 SQL SERVER 的“联机丛书”

8、“MDB 格式文件能否脱离 ACCESS 环境,在未改陪手装 ACCESS 的机器上被其他软件调用?”

回答上述问题:可以,这是因为有 JET DB 的支持,而 WINDOWS 98 以上默认就内置了 JET DB ,就像 98 以上的机器默认就可以浏览网页,而 windows 95 的机器必须安装浏览器才能浏览网页一个道理。

Access数据库不但具有dBASE、FoxBASE、FoxPro等数据库的优点,而悔禅颂且还具有其自身特点,它是对传统数据库的发展,提供了真正的关系数据库管理。Access是一个功能强大、方便灵活、适用于个人单机环境下使用的关系型数据库管理系统,它同时提供了一个完整的数据库应用开发工具,可用于开发适合于特定的数据库管理的Windows应用程序。

1.Access的对象

Access 2023支持的对象包括表、查询、报表、窗体、宏、模块及网页。

Access所提供的这些对象都存放在同一个数据库文件(.mdb文件)中,而不像其他数据库那样分别存放于不同的文件中。这样就方便了数据库文件的管理。

在Access 2023的各个对象中碧郑,表是数据库的核心基础,它存放着数据库中的全部数据信息。报表、查询和窗体都是从数据表中获得数据信息,以实现用户的某一特定需要,例如查找、计算统计、打印、编辑修改等。窗体可以为用户提供良好的操作界面,通过窗体,用户可以直接或间接地调用宏或模块,并执行查询、打印、预览、计算多呢个功能,甚至对数据表进行编辑修改。

2.Access的主要功袭滚能

(1)定义数据创建表,利用表储存相应的信息。

(2)根据需要定义各表之间的关系,从而将各个表中的相关的数据有机的结合在一起

(3)方式多样的数据处理能力。可以创建查询来检索数据;可以创建联机窗体来直接查看、输入及更改表中的数据;可以创建报表来分析数据或将数据以特定的方式打印出来

(4)创建Web页,建立对Internet和Intranet的支持

(5)开发应用程序。可以利用宏或Visual Basic将各种数据库对象连接在一起,形成一个数据库应用系统,而且用户也不需要编写复杂的代码。

与其他数据库不同的是,Access在实现上述功能的同时提供了各种向导,用户在操作时只需按照向导提供的步骤执行就可以了,使用起来非常方便。

引用于:

Access特点

Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的掘派迟,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。

正如Office方便性和易使羡局用性一样,Access 是设计中小企业所用数据库的良好工具,利用Access的动态页面能力,可以比较容易地达到用它来构判李造WWW应用环境的目标.

VC++中使用ADO操作ACCESS数据库

ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,液派备COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码。为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到这个test.mdb。程序编译运行后的效果如图一所示:

一、实现方法

万事开头难,任何一种新技术对于初学者来说最重要的还是”入门”,掌握其要点。让闹毁我们来看看ADO数据库开发的基本流程吧!它的基本步骤如下:

(1)初始化COM库,引入ADO库定义文件

(2)用Connection对象连接数据库

(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。

(4)使用完毕后关闭连接释放对象。

下面我们将详细介绍上述步骤并给出相关代码。

1、COM库的初始化

我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:

BOOL CADOTest1App::InitInstance()

{

AfxOleInit();

……

}

2、用#import指羡正令引入ADO类型库

为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:

#import “c:program filescommon filessystemadomsado15.dll”

no_namespace rename(“EOF”,”adoEOF”)

这一语句有何作用呢?其最终作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。

需要读者朋友注意的是:您的开发环境中msado15.dll不一定在这个目录下,请按实际情况修改;在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告:msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned。

3、创建Connection对象并连接数据库

为了首先我们需要添加一个指向Connection对象的指针_ConnectionPtr m_pConnection,下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉:

BOOL CADOTest1Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

HRESULT hr;

try

{

hr = m_pConnection.CreateInstance(“ADODB.Connection”);///创建Connection对象

if(SUCCEEDED(hr))

{

hr = m_pConnection-Open(“Provider=Microsoft.Jet.OLEDB.4.0;

Data Source=test.mdb”,””,””,adModeUnknown);///连接数据库

//上面一句中连接字串中的Provider是针对ACCESS2023环境的,对于ACCESS97,

//需要改为:Provider=Microsoft.Jet.OLEDB.3.51;

}

}

catch(_com_error e)///捕捉异常

{

CString errormessage;

errormessage.Format(“连接数据库失败! 错误信息:%s”,e.ErrorMessage());

AfxMessageBox(errormessage);///显示错误信息

}

在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型:

HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options );

上述函数中参数ConnectionString为连接字串;参数UserID是用户名;参数Password是登陆密码;参数Options是连接选项,用于指定Connection对象对数据的更新许可权,一般情况下Options可以是如下几个常量:

adModeUnknown:缺省。当前的许可权未设置

adModeRead:只读

adModeWrite:只写

adModeReadWrite:可以读写

adModeShareDenyRead:阻止其它Connection对象以读权限打开连接

adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接

adModeShareExclusive:阻止其它Connection对象以读写权限打开连接

adModeShareDenyNone:阻止其它Connection对象以任何权限打开连接

我们给出一些常用的连接方式供大家参考:

(1)通过JET数据库引擎对ACCESS2023数据库的连接:

m_pConnection-Open(“Provider=Microsoft.Jet.OLEDB.4.0;

Data Source=C:est.mdb”,””,””,adModeUnknown);

(2)通过DSN数据源对任何支持ODBC的数据库进行连接:

m_pConnection-Open(“Data Source=adotest;UID=sa;PWD=;”,””,””,adModeUnknown);

(3)不通过DSN对SQL SERVER数据库进行连接:

m_pConnection-Open(“driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;

UID=sa;PWD=139″,””,””,adModeUnknown);

其中Server是SQL服务器的名称,DATABASE是库的名称。

Connection对象除Open()方法外还有许多方法,我们先介绍Connection对象中两个有用的属性ConnectionTimeOut与State。ConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如:

m_pConnection-ConnectionTimeout = 5;///设置超时时间为5秒

m_pConnection-Open(“Data Source=adotest;”,””,””,adModeUnknown);

State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:

if(m_pConnection-State)

m_pConnection-Close(); ///如果已经打开了连接则关闭它

4、执行SQL命令并取得结果记录集

为了取得结果记录集,我们定义一个指向Recordset对象的指针:_RecordsetPtr m_pRecordset;

并为其创建Recordset对象的实例: m_pRecordset.CreateInstance(“ADODB.Recordset”),SQL命令的执行可以采用多种形式,下面我们一一进行阐述。

(1)利用Connection对象的Execute方法执行SQL命令

Execute()方法的原型如下所示:

_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )

其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options可以取如下值之一:adCmdText表明CommandText是文本命令;adCmdTable表明CommandText是一个表名;adCmdProc表明CommandText是一个存储过程;adCmdUnknown表明CommandText内容未知。Execute()函数执行完后返回一个指向记录集的指针,下面我们给出具体代码并作说明:

_variant_t RecordsAffected;

///执行SQL命令:CREATE TABLE创建表格users,users包含四个字段:整形ID,字符串username,整形old,日期型birthday

m_pConnection-Execute(“CREATE TABLE users(ID INTEGER,username

TEXT,old INTEGER,birthday DATETIME)”,RecordsAffected,adCmdText);

///往表格里面添加记录

m_pConnection-Execute(“INSERT INTO users(ID,username,old,birthday)

VALUES (1, ‘Washington’,25,’1970/1/1′)”,RecordsAffected,adCmdText);

///将所有记录old字段的值加一

m_pConnection-Execute(“UPDATE users SET old = old+1”,RecordsAffected,adCmdText);

///执行SQL统计命令得到包含记录条数的记录集

m_pRecordset = m_pConnection-Execute(“SELECT COUNT(*) FROM

users”,RecordsAffected,adCmdText);

_variant_t vIndex = (long)0;

_variant_t vCount = m_pRecordset-GetCollect(vIndex);///取得之一个字段的值放入vCount变量

m_pRecordset-Close();///关闭记录集

CString message;

message.Format(“共有%d条记录”,vCount.lVal);

AfxMessageBox(message);///显示当前记录条数(2)利用Command对象来执行SQL命令

_CommandPtr m_pCommand;

m_pCommand.CreateInstance(“ADODB.Command”);

_variant_t vNULL;

vNULL.vt = VT_ERROR;

vNULL.scode = DISP_E_PARAMNOTFOUND;///定义为无参数

m_pCommand-ActiveConnection = m_pConnection;///非常关键的一句,将建立的连接赋值给它

m_pCommand-CommandText = “SELECT * FROM users”;///命令字串

m_pRecordset = m_pCommand-Execute(vNULL,vNULL,adCmdText);

//执行命令取得记录集

在这段代码中我们只是用Command对象来执行了SELECT查询语句,Command对象在进行存储过程的调用中能真正体现它的作用。下次我们将详细介绍。

(3)直接用Recordset对象进行查询取得记录集,例如:

m_pRecordset-Open(“SELECT * FROM users”,_variant_t((IDispatch *)m_pConnection,true),

adOpenStatic,adLockOptimistic,adCmdText);

Open()方法的原型如下:

HRESULT Recordset15::Open ( const _variant_t

Source, const _variant_t

ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )

上述函数中参数Source是数据查询字符串;参数ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象);参数CursorType光标类型,它可以是以下值之一;请看这个枚举结构:

enum CursorTypeEnum

{

adOpenUnspecified = -1,///不作特别指定

adOpenForwardOnly = 0,///前滚静态光标。这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这种方式可以提高浏览速度。但诸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用

adOpenKeyset = 1,///采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的操作对你是可见的。

adOpenDynamic = 2,///动态光标。所有数据库的操作都会立即在各用户记录集上反应出来。

adOpenStatic = 3///静态光标。它为你的记录集产生一个静态备份,但其它用户的新增、删除、更新操作对你的记录集来说是不可见的。

};

参数LockType表示数据库的锁定类型,它可以是以下值之一,请看如下枚举结构:

enum LockTypeEnum

{

adLockUnspecified = -1,///未指定

adLockReadOnly = 1,///只读记录集

adLockPessimistic = 2,悲观锁定方式。数据在更新时锁定其它所有动作,这是最安全的锁定机制

adLockOptimistic = 3,乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数据的更新、插入、删除等动作

adLockBatchOptimistic = 4,乐观分批更新。编辑时记录不会锁定,更改、插入及删除是在批处理模式下完成。

};

参数Options的含义请参考本文中对Connection对象的Execute()方法的介绍。

5、记录集的遍历、更新

根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday

以下的代码实现:打开记录集,遍历所有记录,删除之一条记录,添加三条记录,移动光标到第二条记录,更改其年龄数据,保存到数据库。

_variant_t vUsername,vBirthday,vID,vOld;

_RecordsetPtr m_pRecordset;

m_pRecordset.CreateInstance(“ADODB.Recordset”);

m_pRecordset-Open(“SELECT * FROM users”,_variant_t((IDispatch*)m_pConnection,true),

adOpenStatic,adLockOptimistic,adCmdText);

while(!m_pRecordset-adoEOF)

///这里为什么是adoEOF而不是EOF呢?还记得rename(“EOF”,”adoEOF”)这一句吗?

{

vID = m_pRecordset-GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,你也可以直接给出列的名称;

vUsername = m_pRecordset-GetCollect(“username”);///取得username字段的值

vOld = m_pRecordset-GetCollect(“old”);

vBirthday = m_pRecordset-GetCollect(“birthday”);

///在DEBUG方式下的OUTPUT窗口输出记录集中的记录

if(vID.vt != VT_NULL

vUsername.vt != VT_NULL

vOld.vt != VT_NULL

vBirthday.vt != VT_NULL)

TRACE(“id:%d,姓名:%s,年龄:%d,生日:%s “,vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);

m_pRecordset-MoveNext();///移到下一条记录

}

m_pRecordset-MoveFirst();///移到首条记录

m_pRecordset-Delete(adAffectCurrent);///删除当前记录

///添加三条新记录并赋值

for(int i=0;i3;i++)

{

m_pRecordset-AddNew();///添加新记录

m_pRecordset-PutCollect(“ID”,_variant_t((long)(i+10)));

m_pRecordset-PutCollect(“username”,_variant_t(“叶利钦”));

m_pRecordset-PutCollect(“old”,_variant_t((long)71));

m_pRecordset-PutCollect(“birthday”,_variant_t(“”));

}

m_pRecordset-Move(1,_variant_t((long)adBookmarkFirst));///从之一条记录往下移动一条记录,即移动到第二条记录处

m_pRecordset-PutCollect(_variant_t(“old”),_variant_t((long)45));///修改其年龄

m_pRecordset-Update();///保存到库中

6、关闭记录集与连接

记录集或连接都可以用Close()方法来关闭:

m_pRecordset-Close();///关闭记录集

m_pConnection-Close();///关闭连接

至此,我想读者朋友已经熟悉了ADO操作数据库的大致流程,也许您已经胸有成竹,也许您还有点胡涂,不要紧!建议你尝试写几个例子,这样会更好地熟悉ADO,最后我给大家写了一个小例子,例子实现的功能是读出所有记录并放到列表控件中,同时可以添加、删除、修改记录。

二、编程步骤

1、 启动Visual C++6.0,生成一个基于对话框的应用程序,将该程序命名为ADOTest1;

2、 在对话框界面上放置显示记录列表控件和添加、删除记录用的的编辑、按钮控件,具体设置参加代码中的对话框资源部分;

3、 使用Class Wizard为添加、修改数据库记录的按钮添加消息响应函数;

4、 添加成程序代码,编译运行程序。

关于access ole db数据库引擎的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 深入探究Access OLE DB数据库引擎:技术指南 (access ole db数据库引擎)