ADO连接ACCESS数据库

首先在StdAfx.h中加入

引入msado15.dll动态库

建立连接:(在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 ConnectionStringUserIDPassword, 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在异步操作期间被定期地触发,报告已读取多少记录。
FieldChangeCompleteField 对象的值更改被触发。
MoveCompleteRecordset 中的当前位置更改后被触发。
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)
或者	
itemfields = rs.Fields.Item("Name")

Properties 集合的属性

属性描述
Count

返回 properties 集合中项目的数目。以 0 起始。

例子:

countprop = rs.Properties.Count
Item(named_item/number)

返回 properties 集合中某个指定的项目。

例子:

itemprop = rs.Properties.Item(1)
或者
itemprop = rs.Properties.Item("Name")

转载于:https://www.cnblogs.com/jiangzhaowei/p/5123567.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQLdb autocommit的坑

今天写的一个小功能,里面要用MySQLdb更新数据库,语句如下 sql "update %s.account_operation set status1 where username%s" % (allResDBInfos[db], username)变量替换后,是下面的样子 update suspects.account_operation set st…

8086段寄存器

8086有四个段寄存器CS,DS,SS,ES 任意时刻CPU执行CS:IP指向的指令,CS为代码段寄存器(IP为指令指针寄存器) 任意时刻SS:SP指向栈的栈顶单元,SS为栈段寄存器 我们寻找数据需要知道数据在内存的位置用DS寻址 DS为数据段寄存器 ES为附加段寄存器可作为目的地址的段地址比如ES:DI…

用jquery给元素绑定事件,一些内部细节

按看段代码: 1 $(.test).on(click, function() { 2 console.log(hello); 3 $(this).removeClass(test); 4 }); 就算是remove掉class test,照样可以点,事件绑定的是这个对象。 转载于:https://www.cnblogs.com/lqj12138/p/4384596.html

8086数据寄存器

8086CPU有四个16位数据寄存器可分成8个8位寄存器 AX(AH,AL)|BX(BH,BL)|CX(CH,CL)|DX(DH,DL) 数据寄存器主要用来保存操作数和保存运算结果等 AX 常用作累加器(accumulator)用来保存临时数据比如MOV AX,DATA将数据段地址送入AX ;MUL BL,DIV BX用来保存乘除法的结果 BX 基(Ba…

使用搜索栏过滤collectionView(按照首字母)

1.解析json数据NSDictionary *citiesDic [CoreJSONSerialization coreJSONSerialization:"cities"];NSDictionary *infor [citiesDic objectForKey:"infor"];NSArray *listItems [infor objectForKey:"listItems"]; 2.存储数据 for (NSDicti…

《哪来的天才?练习中的平凡与伟大》

这是一本堪称论述所有伟大成就来源的书中最让我觉得激动人心、非常棒的一本书。 什么成就了一个那些所谓的天才?刻意练习!伟大的成就不是因为所谓天生的基因,也不是所谓简单的埋头苦干。而是需要长时间有针对性的刻意提高自己某个方面能力的艰…

8086变址和指针寄存器

SI和DI称为变址寄存器,在字符串操作中SI作为源指针,DI作为目的指针(ES:DI<--DS:SI) ;用作存储器指针时可用于寻址 DS:[SI],DS:[BXDI]BP和SP称为指针寄存器,BP称为基址针,SP为堆栈指针 ;BP也可作为存储器指针DS:[bpsi],如果没有段前缀那么BP最为堆栈基址[BP]寻址的是堆栈内存…

R软件中 文本分析安装包 Rjava 和 Rwordseg 傻瓜式安装方法四部曲

这两天&#xff0c;由于要做一个文本分析的内容&#xff0c;所以搜索了一天R语言中的可以做文本分析的加载包&#xff0c;但是在安装包的过程&#xff0c;真是被虐千百遍&#xff0c;总是安装不成功。特此专门写一篇博文&#xff0c;把整个心塞史畅快的释放一下。 ------------…

省赛之路第一天

今天是清明假期第一天&#xff0c;原定的到洛阳玩也成为了虚无缥缈的东东了吧&#xff0c;cb这位还有说的太对了&#xff0c;no game&#xff0c;no girlfriend&#xff0c;no holiday&#xff0c;only maching&#xff01;这都不是什么大事&#xff0c;毕竟自认为还是个肯吃苦…

8086标志寄存器FLAG

8086CPU提供一个特殊的寄存器称为标志寄存器,里面包含9个标志,用来反映处理器的状态和运算结果的某些特征。FLAG是按位起作用的

Windows下安装Python数据库模块--MySQLdb

## 1、下载MySQLdb [去官网](http://pypi.python.org/pypi/MySQL-python/) 下载对应的编译好的版本&#xff08;现在官网最新版本为1.2.5&#xff09;&#xff1a; MySQL-python-1.2.5.win32-py2.7.exe 得到1MB的安装文件 MySQL-python-1.2.5.win32-py2.7.exe ## 2、安装 以…

MSSQL-字符串分离与列记录合并成一行混合使用

一般我们在数据库的表字段存储字典Id&#xff0c;如果有多个的话一般是用,或分隔符分隔(12,14),列表显示的时候是显示字典名,那如果要在数据库将字典Id转成用户看得懂的字典名&#xff0c;该怎么办呢&#xff1f; 我们这时候可以结合之前说到的 字符串分离(Split函数) 和 列记录…

逻辑运算 或,与,非

逻辑变量之间的运算称为逻辑运算。二进制数1和0在逻辑上可以代表“真”与“假”、“是”与“否”、“有”与“无”。这种具有逻辑属性的变量就称为逻辑变量。 计算机的逻辑运算的算术运算的主要区别是&#xff1a;逻辑运算是按位进行的&#xff0c;位与位之间不像加减运算…

Java 理解CPU缓存(CPU Cache)

从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态 众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢…

测试指令TEST

测试指令TESTTEST OPRD1,OPRD2 ;按位与操作,但不保存结果,仅影响标志寄存器,根据影响的标志位得到结果 该指令通常用于检测某些位是否为1,但不改变原操作值.根据ZF得知判断结果 mov al,01100011B;检测位6是否为1,如果为1那么ZF0,如果为0那么ZF1 TEST AL,01000000B ;AL010000…

Homebrew OS X 不可或缺的套件管理器

Homebrew OS X 不可或缺的套件管理器,可以说Homebrew就是mac下的apt-get、yum. 1.安装homebrew brew的安装很简单&#xff0c;使用一条ruby命令即可&#xff0c;Mac系统上已经默认安装了ruby。 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install…

【BZOJ】【1003】【ZJOI2006】物流运输trans

最短路/DP 这题数据规模并不大&#xff01;&#xff01;这是重点……… 所以直接暴力DP就好了&#xff1a;f[i]表示前 i 天的最小花费&#xff0c;则有$f[i]min\{f[j]cost[j1][i]k\} (0\leq j \leq i-1)$其中cost数组表示第L天到第R天只用一种运输方案连续运$R-L1$天的最小代价…

与操作指令AND

逻辑”与”操作指令AND(逻辑乘法) 0*000*101*001*11 只当参与运算的逻辑变量都同时取值为1时&#xff0c;其逻辑乘积才等于1。 MOV AL,01100011BAND AL,11111110B ;按位根据乘法表计算;结果AL01100010B另一种说法是用”0”来把相应位设置成0MOV AL,01100011B ;把AL的高4位设置成…

SVN-钩子

先说说钩子是干什么的吧&#xff0c;&#xff0c;简单的说&#xff0c;svn钩子就是在提交svn时前后所要触发的事件&#xff0c;于是我们可以用钩子做一些提交时的限制&#xff0c;及提交后的操作。最常用的一般有两个&#xff0c;pre-commit,post-commit。下面分别简单说下概念…

数据库---T-SQL语句(一)

一、T-SQL语句 1.创建表:create table Name(Code varchar(50),) 主键&#xff1a;primary key 自增长&#xff1a;auto_increment 外键关系&#xff1a;references 非空&#xff1a;not null 2.删除表&#xff1a;drop table family 3.创建数据库&#xff1a;creat database…