ホームページ データベース mysql チュートリアル 在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

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

Jun 07, 2016 pm 03:37 PM
access mfc 使用 マイクロソフト データベース アクセス

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Microsoft、Win11 8月累積アップデートをリリース:セキュリティの向上、ロック画面の最適化など。 Microsoft、Win11 8月累積アップデートをリリース:セキュリティの向上、ロック画面の最適化など。 Aug 14, 2024 am 10:39 AM

8 月 14 日のこのサイトのニュースによると、今日の 8 月のパッチ火曜日イベント日に、Microsoft は 22H2 および 23H2 用の KB5041585 更新プログラム、および 21H2 用の KB5041592 更新プログラムを含む、Windows 11 システム用の累積的な更新プログラムをリリースしました。 8 月の累積更新プログラムで上記の機器がインストールされた後、このサイトに添付されるバージョン番号の変更は次のとおりです。 21H2 機器のインストール後、機器のインストール後、バージョン番号は Build22000.314722H2 に増加しました。バージョン番号は Build22621.403723H2 に増加しました。 装置のインストール後、バージョン番号は Build22631.4037 に増加しました。 Windows 1121H2 の更新プログラムの主な内容は次のとおりです。 改善: 改善されました。

DeepSeek PDFを変換する方法 DeepSeek PDFを変換する方法 Feb 19, 2025 pm 05:24 PM

DeepSeekはファイルを直接PDFに変換できません。ファイルの種類に応じて、異なる方法を使用できます。一般的なドキュメント(Word、Excel、PowerPoint):Microsoft Office、Libreoffice、その他のソフトウェアを使用してPDFとしてエクスポートします。画像:画像ビューアまたは画像処理ソフトウェアを使用してPDFとして保存します。 Webページ:ブラウザの「Print into PDF」関数を使用するか、PDFツールに専用のWebページを使用します。 UNCOMMONフォーマット:適切なコンバーターを見つけて、PDFに変換します。適切なツールを選択し、実際の状況に基づいて計画を作成することが重要です。

サムスンはマイクロソフトの MR ヘッドセットにディスプレイを提供する予定で、デバイスはより軽量でより鮮明なディスプレイを備えていることが期待されています サムスンはマイクロソフトの MR ヘッドセットにディスプレイを提供する予定で、デバイスはより軽量でより鮮明なディスプレイを備えていることが期待されています Aug 10, 2024 pm 09:45 PM

最近、Samsung Display と Microsoft は重要な協力協定を締結しました。合意によると、Samsung Displayは、ゲームや映画などのマルチメディアコンテンツ向けのMRデバイスを開発しているMicrosoftに、数十万枚の複合現実(MR)ヘッドマウントデバイス用のOLEDoSパネルを開発、供給する予定だ。 OLEDoSの仕様決定後に発売され、主に商用分野向けに提供され、早ければ2026年にも提供される予定だ。 OLEDoS (OLED on Silicon) 技術 OLEDoS は、シリコン基板上に OLED を蒸着する新しいディスプレイ技術であり、従来のガラス基板と比較して、より薄く、より高い画素数を実現します。 OLEDOS表示と通常表示

Microsoft Azureは10月から必須の多要素認証を導入する Microsoft Azureは10月から必須の多要素認証を導入する Aug 17, 2024 am 07:40 AM

8月16日の当サイトのニュースによると、Microsoftは昨日発表を行い、アカウントハッキングの可能性を減らすために10月から多要素認証(MFA)機能を施行すると発表した。 Microsoftは、MFAはこのようなアカウント侵害攻撃を99.2%以上防ぐことができるため、この対策は必須であると述べている。報道によると、このプロセスは 2 つのフェーズに分けて段階的に実装される予定で、このサイトでは次のように要約されています。 フェーズ 1: 10 月から、Azure portal、Microsoft Entra Management Center、および Intune Management Center へのログインに MFA が必要になります。他の Azure クライアントには影響しません。フェーズ 2: 2025 年初めから、MFA 要件は Azure などの他の Azure クライアントにも徐々に拡大されます。

Microsoft Edge ブラウザーがバージョン 127.0.2651.105 に更新され、ドキュメントのアップロード時のクラッシュ問題が修正されました Microsoft Edge ブラウザーがバージョン 127.0.2651.105 に更新され、ドキュメントのアップロード時のクラッシュ問題が修正されました Aug 16, 2024 pm 08:03 PM

8 月 16 日のこのサイトのニュースによると、Microsoft は Microsoft Edge ブラウザーのバージョン アップデート 127.0.2651.105 を安定版チャネルにリリースしました。このアップデートには主に 2 つの重要な変更が含まれています。 1 つ目は、一部の Web サイトにドキュメントをアップロードするときにブラウザーがクラッシュする問題を修正することです (ブラウザーにエラー コード STATUS_BREAKPOINT が表示されます)。2 つ目は、CVE-2024-43472 に基づく Microsoft Edge 固有の脆弱性を修正することです。 Microsoft Security Response Center Web サイトは現在エラー 404 ステータスにあるため、このサイトには CVE-2024-43472 に関する詳細情報がまだ見つかりません。 Statcounter からの最新データは、Microsoft Edge がデスクトップ上にあることを示しています

Microsoft は、Blizzard IP に基づいた小規模な「AA」ゲームを開発するための新しいチームを設立 Microsoft は、Blizzard IP に基づいた小規模な「AA」ゲームを開発するための新しいチームを設立 Aug 05, 2024 pm 02:25 PM

8月2日の当サイトのニュースによると、マイクロソフトのゲーム部門は今年1月、社長のマイク・イバラ氏を含む多数のブリザード従業員が辞任すると発表した。しかし、その後、会社は別の未発表のゲームに取り組むための新しい人材の採用を開始しました。 WindowsCentralは本日、Microsoftが小規模な「AA」ゲームを開発するためにBlizzardと新しいチームを結成したと報じた。新チームは元キングチームのメンバーを中心に構成されているとのことで、このスモールゲームは主に「オーバーウォッチ」や「ウォークラフト」、「スタークラフト」などBlizzardの既存ゲームIPをベースにしたものとなっているとのこと。この新しいチームは主に元 King の開発者で構成されているため、Windows

node.js環境で403を返すサードパーティインターフェイスの問題を解決する方法は? node.js環境で403を返すサードパーティインターフェイスの問題を解決する方法は? Mar 31, 2025 pm 11:27 PM

node.js環境で403を返すサードパーティインターフェイスの問題を解決します。 node.jsを使用してサードパーティのインターフェイスを呼び出すと、403を返すインターフェイスから403のエラーが発生することがあります...

Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Apr 01, 2025 am 07:45 AM

Laravel FrameworkでRedis接続の共有の影響とLaravelフレームワークとRedisを使用する際のメソッドを選択すると、開発者は問題に遭遇する可能性があります。

See all articles