搜尋
首頁資料庫mysql教程在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

ADO是硬盘上的表现形式是 一个名为msado15.dll的动态链接库。 第一步:在VS2010 中 创建一个对话框MFC程序。 第二步:在stdafx.h 添加一句代码 (添加位置是在#include afxdisp.h // MFC 自动化类 后面) #import C:\Program Files\Common Files\System\ADO\



ADO是硬盘上的表现形式是 一个名为 msado15.dll的动态链接库。


第一步:在VS2010 中 创建一个对话框MFC程序。


第二步:在stdafx.h 添加一句代码 (添加位置是在#include        // MFC 自动化类 后面)


#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace  rename("EOF", "EndOfFile")


下面解释一个上面代码的意思。

#import 这个没啥话说 就是引入的意思,  "C:\Program Files\Common Files\System\ADO\msado15.dll"  就是说一个全路径,就是msado15.dll

这个文件在硬盘中的位置。   如果你的系统没有做过刻意的更改 ,那么这个路径应该就是他了。


no_namespace , 这是啥意思? 翻译过来就是不使用命名空间      就是不使用 ADO这个组件自己命名空间  不然你在后面使用ADO的一些 接口的时候


就需要在前面加东西(加啥? 我也不知道 ,我也是停别人这么说的)

rename("EOF", "EndOfFile") 这句话 即使重命名  EOF  ,为啥要重新命名呢?  这是因为是在MFC里面有EOF这个字眼 但是意思和ADO里面的 EOF不是


一个意思 所以需要重新命名 不然ADO这货就疯了。  你可以任意命名 这要不和已有的 名字重复就好了     这个改名字为EndOfFile(有些哥们呢 喜欢命名为ADOEOF)

#import语句实际上相当于执行了API涵数LoadTypeLib()#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。

××××××××××××××××××××××××××××××××××××转 ××××××××


好了第二步说完了 ,开始说第三步了。



第三步:如同世界上的其他组件库一样  使用前要初始化 使用后卸载(这句话是老师说的   谁能就此展开)

如何初始化呢。

在程序初始过程中需要初始化组件,一般可以用CoInitialize(NULL);实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();实现。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示:

AfxOleInit()


为了让程序更完美 建议这样写

if(!AfxOleInit())//这就是初始化COM库 

AfxMessageBox("OLE初始化出错!"); 
return FALSE; 
}


这个函数可以放置在TheApp对象的初始化函数:InitInstance()中。  

PS:如果你不知道theapp的初始化函数 请 点击网页的右上角的X号  因为这篇文章不适合你



第四步:做这么多准备工作 终于可以可以说哦那个ADO了。

首先看一看 ADO的那些东西我我们可以使用

ADO包含一些顶层的对象:
连接(Connection),代表到数据库的连接
记录集(Recordset),代表数据库记录的一个集合
命令(Command),代表一个SQL命令
记录(Record),代表数据的一个集合
流(Stream),代表数据的顺序集合
错误(Error),代表数据库访问中产生的意外
字段(Field),代表一个数据库字段
参数(Parameter),代表一个SQL参数
属性(Property),保存对象的信息


通常来说我用到了 前三个对象。其他东西我不熟。


第五步:在MFC的对话框程序创建三个对象  ,就是那三个智能指针的对象。

这个对象(其实是否可以称之为对象 我也不清楚 姑且称之吧)输入对话框类

下图是我创建的结果

在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

第六步: 刚才那三个智能指针对象 被我创建出来了。

既然创建出来了 就可以用了。在哪里用呢?既然这三个对象属于对话框类,那么在对话框类的实例化对象中 就可以使用了。

注意以下内容是核心代码。

首先说一下核心代码的整体思路。

A:链接数据库 B:打开记录集 相当于用数据库里面的表给 记录集赋值  至此 表就存在于 内存中了 

C:使用ADO的相关函数 对记录集进行增删改查           D:关掉记录集  E:断开链接 

至此完成一次轮回。  


第七步: 建立和数据库的链接

打开数据库 也可以称之为 链接数据库

由于数据的操作带有很强的不确定性,所以对数据库的操作大都有错误抓取 就是 Try Catch

 HRESULT hr;
try
{
//先创建连接实例
hr = m_pConnection.CreateInstance(__uuidof(Connection));//创建Connection对象
if (SUCCEEDED(hr))
{
m_pConnection->ConnectionTimeout=600;//  链接数据库时间限制 
m_pConnection->CommandTimeout=120;//  也许是SQL语句执行时间限制
//然后打开数据库  OPEN函数的参数是很有讲究的
//Open 方法可打开一个到数据源的连接。当连接打开时,您可以对数据源执行命令
//一个包含有关连接的信息的字符串值。该字符串由一系列被分号隔开的 parameter=value 语句组成的。
//一个字符串值,包含建立连接时要使用的用户名称。
//一个字符串值,包含建立连接时要使用的密码。
//一个 ConnectOptionEnum 值,确定应在建立连接之后(同步)还是应在建立连接之前(异步)返回本方法。
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Home.mdb","","",adModeUnknown);// 
//ConnectionString 属性有 5 个参数:
//Provider---》用于连接的提供者的名称。
//File Name---》提供者特有的文件(例如,持久保留的数据源对象)的名称,这些文件中包含预置的连接信息。
//Remote Provider--》当打开客户端连接时使用的提供者的名称。(仅限于远程数据服务。)
//Remote Server--》当打开客户端连接时使用的服务器的路径名称。(仅限于远程数据服务。)
//url---》标识资源(比如文件或目录)的绝对 URL。
//打开模式
/*
adModeUnknown = 0,
adModeRead = 1,
adModeWrite = 2,
adModeReadWrite = 3,
adModeShareDenyRead = 4,
adModeShareDenyWrite = 8,
adModeShareExclusive = 12,
adModeShareDenyNone = 16,
adModeRecursive = 4194304
*/


}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);/// 
}
AfxMessageBox("成功打开数据库");


第八步:创建记录集


m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset->CursorLocation = adUseClient;  //需要把数据传输给本地,应用举例是断开数据库进行Recordset操作,即内存中操作
//而不是写入远端数据库。相反的有 adUseServer 是指直接在数据库中操作。
m_pRecordset->Open("SELECT * FROM Jianghu",//SQL 语句  
m_pConnection.GetInterfacePtr(), 
adOpenDynamic,//游标类型
adLockOptimistic,//乐观锁
adCmdText);//命令类型
/*
当您首次打开一个 Recordset 时,当前记录指针将指向第一个记录,同时 BOF 和 EOF 属性为 False。如果没有记录,BOF 和 EOF 属性为 True


*/
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());

m_MyDataGrid.putref_DataSource(m_pRecordset);//将对象和DataGrid控件链接在一起的函数。 在VC6 是 SetRefDataSource
AfxMessageBox("成功打开记录集");

第九步:给表增加行

// 数据库操作之:增  
//特别需要游标的位置 和 数据库主键不可以重复 不然报错
//第一步:定义四个字符串 用于获取 Edit控件中数据
CString ID ="2";
CString Name ="风清";
CString XingBie ="男";
CString ZhaoShu ="独孤九剑";
m_CEdit_ID.GetWindowTextA(ID);//获取编辑框文本,记录在szText变量中
m_CEdit_Name.GetWindowTextA(Name);
m_CEdit_Xingbie.GetWindowTextA(XingBie);
m_CEdit_ZhaoShu.GetWindowTextA(ZhaoShu);
 


//第二步:正是开始库的操作
try
{

//A :选择游标位置
m_pRecordset->MoveFirst();//新建的数据会添加到DataGrid的最后一条 但在数据库里面是第一条。
//B:提醒系统我要增肌数据了
m_pRecordset->AddNew();
//C: 调用函数PutCollect 修改数据
m_pRecordset->PutCollect("ID",_variant_t(ID));
m_pRecordset->PutCollect("NameGsz",_variant_t(Name));
m_pRecordset->PutCollect("XinBie",_variant_t(XingBie));
m_pRecordset->PutCollect("ZhaoShu",_variant_t(ZhaoShu));
//D: 更新数据库 也可以理解为写入数据库
m_pRecordset->Update();
}
catch (_com_error e)
{
AfxMessageBox("增加数据库失败!");///显示错误信息
}
AfxMessageBox("增加数据库成功");




未完待续


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您什麼時候應該使用複合索引與多個單列索引?您什麼時候應該使用複合索引與多個單列索引?Apr 11, 2025 am 12:06 AM

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)Apr 10, 2025 am 09:36 AM

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL:開發人員的基本技能MySQL和SQL:開發人員的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

描述MySQL異步主奴隸複製過程。描述MySQL異步主奴隸複製過程。Apr 10, 2025 am 09:30 AM

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

mysql:簡單的概念,用於輕鬆學習mysql:簡單的概念,用於輕鬆學習Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL:數據庫的用戶友好介紹MySQL:數據庫的用戶友好介紹Apr 10, 2025 am 09:27 AM

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDB緩衝池如何工作,為什麼對性能至關重要?InnoDB緩衝池如何工作,為什麼對性能至關重要?Apr 09, 2025 am 12:12 AM

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL:初學者的數據管理易用性MySQL:初學者的數據管理易用性Apr 09, 2025 am 12:07 AM

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能