在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
#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的对话框程序创建三个对象 ,就是那三个智能指针的对象。
这个对象(其实是否可以称之为对象 我也不清楚 姑且称之吧)输入对话框类
下图是我创建的结果
第六步: 刚才那三个智能指针对象 被我创建出来了。
既然创建出来了 就可以用了。在哪里用呢?既然这三个对象属于对话框类,那么在对话框类的实例化对象中 就可以使用了。
注意以下内容是核心代码。
首先说一下核心代码的整体思路。
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("增加数据库成功");
未完待续

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Apache에서 Zend를 구성하는 방법은 무엇입니까? Apache 웹 서버에서 Zend 프레임 워크를 구성하는 단계는 다음과 같습니다. Zend 프레임 워크를 설치하고 웹 서버 디렉토리로 추출하십시오. .htaccess 파일을 만듭니다. Zend 응용 프로그램 디렉토리를 작성하고 Index.php 파일을 추가하십시오. Zend 응용 프로그램 (application.ini)을 구성하십시오. Apache 웹 서버를 다시 시작하십시오.

Oracle은 데이터베이스 회사 일뿐 만 아니라 클라우드 컴퓨팅 및 ERP 시스템의 리더이기도합니다. 1. Oracle은 데이터베이스에서 클라우드 서비스 및 ERP 시스템에 이르기까지 포괄적 인 솔루션을 제공합니다. 2. OracleCloud는 AWS와 Azure에 도전하여 IAA, PAAS 및 SAAS 서비스를 제공합니다. 3. E-BusinessSuite 및 FusionApplications와 같은 Oracle의 ERP 시스템은 기업이 운영을 최적화하는 데 도움이됩니다.

MySQL은 웹 응용 프로그램 및 컨텐츠 관리 시스템에 적합하며 오픈 소스, 고성능 및 사용 편의성에 인기가 있습니다. 1) PostgreSQL과 비교하여 MySQL은 간단한 쿼리 및 높은 동시 읽기 작업에서 더 잘 수행합니다. 2) Oracle과 비교할 때 MySQL은 오픈 소스와 저렴한 비용으로 인해 중소 기업에서 더 인기가 있습니다. 3) Microsoft SQL Server와 비교하여 MySQL은 크로스 플랫폼 응용 프로그램에 더 적합합니다. 4) MongoDB와 달리 MySQL은 구조화 된 데이터 및 트랜잭션 처리에 더 적합합니다.

vprocesserazrabotkiveb-enclosed, мнепришлостольносться악 · 뇨 зейейерациигоглапи혁 맥발 추배. LeavallysumballancefriAblancefaumdoMatification, čtookazalovnetakprosto, Kakaožidal.posenesko

Apache Server는 브라우저와 웹 사이트 서버 간의 브리지 역할을하는 강력한 웹 서버 소프트웨어입니다. 1. HTTP 요청을 처리하고 요청에 따라 웹 페이지 컨텐츠를 반환합니다. 2. 모듈 식 디자인은 SSL 암호화 지원 및 동적 웹 페이지와 같은 확장 된 기능을 허용합니다. 3. 보안 취약점을 피하고 고성능 웹 애플리케이션을 구축하기 위해 보안 취약점을 피하고 스레드 카운트 및 타임 아웃 시간과 같은 성능 매개 변수를 최적화하기 위해 구성 파일 (예 : 가상 호스트 구성)을 신중하게 설정해야합니다.

NGINX 성능 모니터링 및 문제 해결은 주로 다음 단계를 통해 수행됩니다. 1. NGINX-V를 사용하여 버전 정보를보고 STUB_STATUS 모듈을 활성화하여 활성 연결 수, 요청 및 캐시 적중률을 모니터링합니다. 2. 상위 명령을 사용하여 시스템 리소스 점유, Iostat 및 VMSTAT 모니터 디스크 I/O 및 메모리 사용을 모니터링합니다. 3. TCPDUMP를 사용하여 패킷을 캡처하여 네트워크 트래픽을 분석하고 네트워크 연결 문제를 해결합니다. 4. 동시 처리 기능이 충분하지 않거나 과도한 프로세스 컨텍스트 오버 헤드를 피하기 위해 작업자 프로세스 수를 올바르게 구성합니다. 5. 부적절한 캐시 크기 설정을 피하기 위해 Nginx 캐시를 올바르게 구성하십시오. 6. awk 및 grep 명령 또는 elk 사용과 같은 nginx 로그를 분석하여

MySQL은 테이블 구조 및 SQL 쿼리를 통해 구조화 된 데이터를 효율적으로 관리하고 외래 키를 통해 테이블 간 관계를 구현합니다. 1. 테이블을 만들 때 데이터 형식을 정의하고 입력하십시오. 2. 외래 키를 사용하여 테이블 간의 관계를 설정하십시오. 3. 인덱싱 및 쿼리 최적화를 통해 성능을 향상시킵니다. 4. 데이터 보안 및 성능 최적화를 보장하기 위해 데이터베이스를 정기적으로 백업 및 모니터링합니다.

악의적 인 웹 사이트 액세스에 대한 효과적인 모니터링 및 방어는 데비안 시스템의 Apache 서버에 중요합니다. Apache Access Logs는 이러한 위협을 식별하기위한 주요 정보 소스입니다. 이 기사에서는 로그를 분석하고 방어 조치를 취하는 방법을 안내합니다. 악의적 인 액세스 동작을 식별하는 Apache Access Log는 일반적으로 /var/log/apache2/access.log에 있습니다. 로그 파일 위치 확인 : 먼저 시스템 구성에 따라 약간 다를 수있는 Apache 액세스 로그의 정확한 위치를 확인하십시오. 명령 줄 도구 분석 : GREP 명령을 사용하여 GREP "404"와 같은 특정 패턴을 검색하십시오.
