ADO连接ACCESS数据库
首先在StdAfx.h中加入

建立连接:(在xxApp文件中)
1 声明变量

2 建立连接

(1) AfxOleInit
初始化 OLE 为应用程序的支持。
BOOL AFXAPI AfxOleInit( );
非零,如果成功;0,如果初始化失败,可能,因为安装该 OLE 系统 DLL 的错误版本。
调用此函数初始化 OLE 为 MFC 应用程序的支持。 当调用该函数时时,将发生以下操作:
初始化调用应用程序的当前单元 COM 库。 有关更多信息,请参见 OleInitialize。
创建消息筛选器对象, IMessageFilter 实现接口。 此消息筛选器可捕获与调用AfxOleGetMessageFilter。
|
如果 AfxOleInit 从 MFC DLL 调用,则调用将失败。 该失败,因为该函数,假设,则为; 如果从 DLL 调用,该 OLE 系统由调用应用程序之前初始化。 |
|
必须初始化 MFC 应用程序设置为单线程单元。 (STA) 如果对您的 InitInstance 重写的 CoInitializeEx ,请指定 COINIT_APARTMENTTHREADED (而不是 COINIT_MULTITHREADED)。 |
AfxOleInit()与CoInitialize(NULL)的区别
OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:
(1)Clipboard;
(2)Drag and drop;
(3)Object linking and embedding(现在的OLE,已不再仅仅是Object linking and embedding的概念);
(4)In-place activation;
与AfxOleInit()对应的是,AfxOleTerm()。
CoInitialize和CoUninitialize必须成对使用,后者不必。
AfxOleInit()和AfxOleTerm()其实也是需要成对的,但是,在你的程序中,AfxOleTerm()可以不出现,这是因为,MFC已经帮你做好了(有兴趣的话,你可以仔细研究一下CWinThread::m_lpfnOleTermOrFreeLib,而CWinApp是从CWinThread继承的)。
(2)CreateInstance
_uuidof: 取得和某个标示符相关联的GUID(全球唯一标识符)
(3)Open 方法 (ADO Connection)
打开到数据源的连接。
语法
connection.Open ConnectionString, UserID, Password, Options
参数
ConnectionString 可选,字符串,包含连接信息。参阅ConnectionString 属性可获得有效设置的详细信息。
UserID 可选,字符串,包含建立连接时所使用用户名。
Password 可选,字符串,包含建立连接时所使用密码。
Options 可选,ConnectOptionEnum 值。决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回。可以是如下某个常量:
| 常量 | 说明 |
| adConnectUnspecified | (默认)同步打开连接。 |
| adAsyncConnect | 异步打开连接。ConnectComplete 事件可以用于决定连接何时可用。 |
说明
使用 Connection 对象的 Open 方法可建立到数据源的物理连接。在该方法成功完成后连接是活跃的,可以对它发出命令并且处理结果。
使用可选的 ConnectionString 参数指定连接字符串,它包含由分号分隔的一系列 argument = value 语句。ConnectionString属性自动继承用于ConnectionString 参数的值,因此可在打开之前设置 Connection 对象的 ConnectionString 属性,或在 Open 方法调用时使用 ConnectionString 参数设置或覆盖当前连接参数。
如果在 ConnectionString 参数和可选的 UserID 及 Password 参数中传送用户和密码信息,那么UserID 和Password 参数将覆盖 ConnectionString 中指定的值。
在对打开的 Connection 的操作结束后,可使用 Close 方法释放所有关联的系统资源。关闭对象并非将它从内存中删除;可以更改它的属性设置并在以后再次使用 Open 方法打开它。要将对象完全从内存中删除,可将对象变量设置为Nothing。
远程数据服务用法 当在客户端的 Connection 对象上使用 Open 方法时,在 Connection 对象上打开Recordset 之前 Open 方法其实并未建立到服务器的连接。
adModeUnknown 表示目前用ado连接数据库的方式还不知道ad--ADO Mode-方式模式 Unknown-不知道,这种方式以后可以在程序中以表、视图、查询、SQL、过程等方式提取数据。
创建记录集(在XXDlg中)
1 声明变量 _RecordsetPtr m_pRecordset
2 添加记录 (在OnInitDialog中)

Recordset.open
Recordset 对象的 Open 方法 允许用户向数据库发出请求,通过是运行一个 SQL
命令、启动一个指定的数据表或调用一个指定的 Stored Procedure
格式:
Recordset.Open Source,ActiveConnection,CursorType,LockType,Options
1、Source 参数可以是一个 Command 名称,一个 SQL 命令、一个指定的数据表
名称或一个指定的 Stored Procedure。Recordset 对象可通过 Source 属性连接
Command 对象。
2、ActiveConnection 参数可以是一个 Connction 对象名称或是包含“数据库连
接信息( ConnectionString )”的字符串信息。Recordset 对象可通过
ActiveConnection 属性连接 Connection 对象。
3、CursorType 参数表示启动数据的游标类型。
常数值说明:
AdOpenForwardOnly 0 启动只能向前( Forward-only )的游标,缺省值
AdOpenKeyset 1 启动 Keyset 类型的游标
AdOpenDynamic 2 启动 Dynamic 类型的游标
AdOpenStatic 3 启动 Static 类型的游标
4、LockType 参数表示采用的 Lock 类型。
常数值说明:
AdLockReadOnly 1 以只读方式启动,无法运行 AddNew、Update、Delete
等方法,缺省值
AdLockPessimistic 2 当数据正在更新时,系统会暂时锁定其它用户的动作
,以确保数据一致性
AdLockOptimistic 3 当数据正在更新时,系统不会暂时锁定其它用户的动
作
AdLockBatchOptimistic 4 当数据正在更新时,其它用户必须将 CursorLocation
属性设为 adUseBatch ,才能对数据库操作
5、Options 参数表示对数据库请求的类型。
常数值说明 :
AdCmdUnknown -1 所指定的 CommandText 参数类型无法确定,缺省值
AdCmdText 1 所指定的 CommandText 参数是一般的命令类型
AdCmdTable 2 所指定的 CommandText 参数是一个存在的表名称
AdCmdStoredProc 3 所指定的 CommandText 参数是 Stored Procedure 表名称
ADO Recordset
对象用于容纳一个来自数据库表的记录集。一个 Recordset 对象由记录和列(字段)组成。在 ADO 中,此对象是最重要且最常用于对数据库的数据进行操作的对象。
ProgID
set objRecordset=Server.CreateObject("ADODB.recordset")
当您首次打开一个 Recordset 时,当前记录指针将指向第一个记录,同时 BOF 和 EOF 属性为 False。如果没有记录,BOF 和 EOF 属性为 True。
Recordset 对象能够支持两种更新类型:立即更新 - 一旦调用 Update 方法,所有更改被立即写入数据库。批更新 - provider 将缓存多个更改,然后使用 UpdateBatch 方法把这些更改传送到数据库。
在 ADO,定义了 4 中不同的游标(指针)类型
- 动态游标 - 允许您查看其他用户所作的添加、更改和删除
- 键集游标 - 类似动态游标,不同的是您无法查看有其他用户所做的添加,并且它会防止您访问其他用户已删除的记录。其他用户所做的数据更改仍然是可见的。
- 静态游标 - 提供记录集的静态副本,可用来查找数据或生成报告。此外,由其他用户所做的添加、更改和删除将是不可见的。当您打开一个客户端 Recordset 对象时,这是唯一被允许的游标类型。
- 仅向前游标 - 只允许在 Recordset 中向前滚动。此外,由其他用户所做的添加、更改和删除将是不可见的。
可通过 CursorType 属性或 Open 方法中的 CursorType 参数来设置游标的类型。
注释:并非所有的提供者(providers)支持 Recordset 对象的所有方法和属性。
属性
属性描述
| AbsolutePage | 设置或返回一个可指定 Recordset 对象中页码的值。 |
| AbsolutePosition | 设置或返回一个值,此值可指定 Recordset 对象中当前记录的顺序位置(序号位置)。 |
| ActiveCommand | 返回与 Recordset 对象相关联的 Command 对象。 |
| ActiveConnection | 如果连接被关闭,设置或返回连接的定义,如果连接打开,设置或返回当前的 Connection 对象。 |
| BOF | 如果当前的记录位置在第一条记录之前,则返回 true,否则返回 fasle。 |
| Bookmark | 设置或返回一个书签。此书签保存当前记录的位置。 |
| CacheSize | 设置或返回能够被缓存的记录的数目。 |
| CursorLocation | 设置或返回游标服务的位置。 |
| CursorType | 设置或返回一个 Recordset 对象的游标类型。 |
| DataMember | 设置或返回要从 DataSource 属性所引用的对象中检索的数据成员的名称。 |
| DataSource | 指定一个包含要被表示为 Recordset 对象的数据的对象。 |
| EditMode | 返回当前记录的编辑状态。 |
| EOF | 如果当前记录的位置在最后的记录之后,则返回 true,否则返回 fasle。 |
| Filter | 返回一个针对 Recordset 对象中数据的过滤器。 |
| Index | 设置或返回 Recordset 对象的当前索引的名称。 |
| LockType | 设置或返回当编辑 Recordset 中的一条记录时,可指定锁定类型的值。 |
| MarshalOptions | 设置或返回一个值,此值指定哪些记录被返回服务器。 |
| MaxRecords | 设置或返回从一个查询返回 Recordset 对象的的最大记录数目。 |
| PageCount | 返回一个 Recordset 对象中的数据页数。 |
| PageSize | 设置或返回 Recordset 对象的一个单一页面上所允许的最大记录数。 |
| RecordCount | 返回一个 Recordset 对象中的记录数目。 |
| Sort | 设置或返回一个或多个作为 Recordset 排序基准的字段名。 |
| Source | 设置一个字符串值,或一个 Command 对象引用,或返回一个字符串值,此值可指示 Recordset 对象的数据源。 |
| State | 返回一个值,此值可描述是否 Recordset 对象是打开、关闭、正在连接、正在执行或正在取回数据。 |
| Status | 返回有关批更新或其他大量操作的当前记录的状态。 |
| StayInSync | 设置或返回当父记录位置改变时对子记录的引用是否改变。 |
方法
方法描述
| AddNew | 创建一条新记录。 |
| Cancel | 撤销一次执行。 |
| CancelBatch | 撤销一次批更新。 |
| CancelUpdate | 撤销对 Recordset 对象的一条记录所做的更改。 |
| Clone | 创建一个已有 Recordset 的副本。 |
| Close | 关闭一个 Recordset。 |
| CompareBookmarks | 比较两个书签。 |
| Delete | 删除一条记录或一组记录。 |
| Find | 搜索一个 Recordset 中满足指定某个条件的一条记录。 |
| GetRows | 把多条记录从一个 Recordset 对象中拷贝到一个二维数组中。 |
| GetString | 将 Recordset 作为字符串返回。 |
| Move | 在 Recordset 对象中移动记录指针。 |
| MoveFirst | 把记录指针移动到第一条记录。 |
| MoveLast | 把记录指针移动到最后一条记录。 |
| MoveNext | 把记录指针移动到下一条记录。 |
| MovePrevious | 把记录指针移动到上一条记录。 |
| NextRecordset | 通过执行一系列命令清除当前 Recordset 对象并返回下一个 Recordset。 |
| Open | 打开一个数据库元素,此元素可提供对表的记录、查询的结果或保存的 Recordset 的访问。 |
| Requery | 通过重新执行对象所基于的查询来更新 Recordset 对象中的数据。 |
| Resync | 从原始数据库刷新当前 Recordset 中的数据。 |
| Save | 把 Recordset 对象保存到 file 或 Stream 对象中。 |
| Seek | 搜索 Recordset 的索引以快速定位与指定的值相匹配的行,并使其成为当前行。 |
| Supports | 返回一个布尔值,此值可定义 Recordset 对象是否支持特定类型的功能。 |
| Update | 保存所有对 Recordset 对象中的一条单一记录所做的更改。 |
| UpdateBatch | 把所有 Recordset 中的更改存入数据库。请在批更新模式中使用。 |
事件
Note: You cannot handle events using VBScript or JScript (only Visual Basic, Visual C++, and Visual J++ languages can handle events).
事件描述
| EndOfRecordset | 当试图移动到超过 Recordset 结尾的行时被触发。 |
| FetchComplete | 当异步操作中的所有记录均被读取后被触发。 |
| FetchProgress | 在异步操作期间被定期地触发,报告已读取多少记录。 |
| FieldChangeComplete | Field 对象的值更改被触发。 |
| MoveComplete | Recordset 中的当前位置更改后被触发。 |
| RecordChangeComplete | 一条记录更改之后被触发。 |
| RecordsetChangeComplete | 在 Recordset 更改之后被触发。 |
| WillChangeField | 在 Field 对象的值更改之前被触发 |
| WillChangeRecord | 在一条记录更改之前被触发。 |
| WillChangeRecordset | 在 Recordset 更改之前被触发。 |
| WillMove | 在 Recordset 中的当前位置更改之前被触发。 |
集合
集合描述
| Fields | 指示在此 Recordset 对象中 Field 对象的数目。 |
| Properties | 包含所有 Recordset 对象中的 Property 对象。 |
Fields 集合的属性
属性描述
| Count |
返回 fields 集合中项目的数目。以 0 起始。 例子: countfields = rs.Fields.Count |
| Item(named_item/number) |
返回 fields 集合中的某个指定的项目。 例子: itemfields = rs.Fields.Item(1) |
Properties 集合的属性
属性描述
| Count |
返回 properties 集合中项目的数目。以 0 起始。 例子: countprop = rs.Properties.Count |
| Item(named_item/number) |
返回 properties 集合中某个指定的项目。 例子: itemprop = rs.Properties.Item(1) |
ADO连接ACCESS数据库的更多相关文章
- c# ADO连接Access 执行Open后程序自动退出
今天利用ADO连接Access数据库的时候遇到了前所未见的问题,Access数据库连接串,OleDbConnection,open的时候,系统就会自动关闭所有调试. 我就很纠结了,这个AccessHe ...
- php连接Access数据库错误及解决方法
<?php $connstr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("data.m ...
- ADO访问Access数据库错误解决心得随笔
最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下. 环境 win7 x86系统: VS2012编译器: Office2010: Access2000~ ...
- php连接Access数据库的三种方法
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/1115/3524.html 虽然不是一个类但先放这儿吧 最近想把一个asp的网站改成 ...
- 具体解释VB中连接access数据库的几种方法
在VB中,连接ACCESS数据库的方法主要有以下三种 使用ADO对象,通过编写代码訪问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件高速创建数据库连接 有三种连接方法 ...
- java远程连接access数据库
本文转载自http://www.voidcn.com/article/p-tlrtkqlp-k.html 1 rmijdbc远程连接access数据库 正常情况下,常用的数据库sql server, ...
- x64 win64编译环境下ADO链接Access数据库的问题解决
原文链接地址:https://blog.csdn.net/HW140701/article/details/71077579 Win32编译环境下,用ADO数据库连接Access数据库一般都不会报错, ...
- 【.net 深呼吸】连接Access数据库应注意的几点
本地数据库可以有Y种选择,比如Sqlite.SQL Server Express.SQL Local DB.SQL Server CE.Access等,本文老周选用比较著名的Access本地数据库,在 ...
- C#连接Access数据库(详解)
做一个用VS2012的C#连接Access数据库的备忘, SQL数据库固然强大,有大微软的强力技术支持,LINQ的方便操作,但是如果写一个小程序对数据库方面没有什么大的要求的话,将来在数据库方面就可以 ...
随机推荐
- windows拒绝远程登陆
- SQL中比较好的For xml 用法实例
--包裹单号 入库时间 交易号 商品分类 商品名称 实付款SELECT a.DeliveryCode AS '包裹单号',a.DomesticWarehouseInTime AS '入库时间',a.T ...
- 使用Executor管理Thread对象详解
java SE5的java.util.concurrent包中的执行器(Executor)是管理Thread对象的优选方法.使用Executor管理Thread对象可以简化并发编程. Executor ...
- jmeter-Foreach控制器与正则表达式
使用正则表达式提取器匹配的id值有17个(参考上一篇) 如果我想对每个id值进行请求,这个时候就可以用到foreach控制器 添加 由于我正则表达式取值命名为orderid,这里就将orderid设置 ...
- 图片qq浏览器不显示,微信显示问题原因
1.qq浏览器关闭云加速就可以了
- C++(十八) — 内存模式、堆和栈
1.内存模式 一个程序执行时,先复制到内存,然后CPU逐句读取指令执行. 每个存储单元存放一个字节(8bit)数据,每个有一个唯一的地址,地址是顺序编码的.比如:一台计算机256MB内存,则有256* ...
- 解决:actual_tessdata_num_entries_ <= TESSDATA_NUM_ENTRIES:Error:Assert failed:in file ..\..\ccutil\tessdatamanager.cp p, line 50
在玩tesseract时,发现如下报错: 这个是因为Tesseract-OCR的版本和chi_sim.traindata字库版本不匹配,由于我的Tesseract-OCR是3.02.02,去googl ...
- [MYSQL]时间毫秒数转换
java中常用bigint字段保存时间,通常将时间保存为一大串数字,每次取出需要在程序里转换,有时候程序里不方便,可以使用MYSQL自带的函数FROM_UNIXTIME(unix_timestamp, ...
- 探索Asp.net mvc 的文件上传
(转自:http://www.cnblogs.com/n-pei/archive/2010/10/15/1852635.html) 最近因为TeamVideo需要用到视频和图片上传功能,所以试着Goo ...
- idea远程debug调试设置
1.idea设置 1.1 加入Tomcat Server选择Remote 1.2:设置对应的參数 xxx.xxx.152.67:8080为远程Tomcatserver的IP地址和port,这里能够设置 ...