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的方便操作,但是如果写一个小程序对数据库方面没有什么大的要求的话,将来在数据库方面就可以 ...
随机推荐
- GoLang激活码
虽然行为不太好,但是购买的话实在是比较贵. 进入软件,Help-Register,选择License Server,输入 http://idea.youbbs.org 激活即可.
- DATASTAGE中ODBC连接的配置
修改2个配置文件: cat /mistel/IBM/InformationServer/Server/DSEngine/.odbc.ini cat /mistel/IBM/InformationSer ...
- Android QRCodeReaderView 和Camera API冲突
开发一款小功能,核心功能是二维码扫描,然后发送到远端服务器.App结构分为两个Activity,Activity A 负责二维码扫描,然后将参数存到本地,再启动Activity B,在Activity ...
- rhel yum报错
用yum报错 http://mirrors.aliyun.com/centos/%24releasever/addons/x86_64/repodata/repomd.xml: [Errno 12] ...
- javascript页面打印
打印本身比较简单,但要考虑到具体的需求.比如 1. 多浏览器: if (isIE()) { //打印预览 WebBrowser1.execWB(7, 1); } else { window.print ...
- 智课雅思词汇---二十三、动词性后缀-ate-fy-ish-ize
智课雅思词汇---二十三.动词性后缀-ate-fy-ish-ize 一.总结 一句话总结: 1.-ate(differentiate,maturate)? 后缀:-ate ①[动词后缀] 表示做.造成 ...
- Educational Codeforces Round 38
http://codeforces.com/contest/938 A:sb题 //#pragma comment(linker, "/stack:200000000") //#p ...
- Map类集合
集合类 Key Value ...
- 一般处理程序ashx中用session存储数据
如果要使用session的话,在handler的代码中添加System.Web.SessionState的引用,并让这个handler继承IRequiresSessionState接口,一定要继承这个 ...
- iOS调试技巧(debug)
说到debug,可以说到的东西就太多了,一个程序员,即使逻辑非常出色,也会出现bug问题,那么debug是每个程序员必备的技巧,尤其是Xcode开发, 苹果公司的开发的Xcode真的是十分强大 ...