当前位置:首页 » 数据仓库 » mfc使用access数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

mfc使用access数据库

发布时间: 2022-12-14 02:26:52

A. 在MFC中使用ADO连接ACCESS数据库

在StdAfx.h中导入ADO动态链接库
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace \
rename("EOF","adoEOF")rename("BOF","adoBOF")
是不是没有初始化COM啊?
if (CoInitialize(NULL)!=0)
{
AfxMessageBox("初始化COM支持库失败!");
exit(1);
}
try
{
m_pConn.CreateInstance("ADODB.Connection");
m_pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=***.mdb","","",adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}

m_pRs.CreateInstance(__uuidof(Recordset));

B. MFC用ODBC连接ACCESS数据库问题

1 。把连接数据库 这个步骤放在视图/文档创建时里,添加消息WM_CREATE。在里面_ConnectionPtr m_con; _bstr_t strcon = "Provider = Microsoft.Jet.OLEDB.4.0;Data source=UserTable.mdb;"; m_con->Open(strcon,"","",adModeUnknown);2 。用文档的话 要手动态创建创建按钮或者用菜单来做。在消息或者命令响应里 实现增删改。

C. c++ mfc odbc怎么调用access数据库

比如在你的工程目录中建一个 dbf\vir.mdb //Access数据库,然后你需要做以下操作:
1.在StadAfx.h里面添加#include <afxdb.h> //新加入头文件,用于CDatabase类。
2.在StadAfx.h最后的#endif上添加#import "msado15.dll" no_namespace rename("EOF","rsEOF")
这时,你要把msado15.dll拷到与dbf同级的目录,也就是工程目录里,当然你可以该路径
3.在你自己的工程里,比如MyProc是你建的工程,添加代码
CMyPorcApp::CMyProcApp(){
CoInitialize(NULL);
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",\
"DSN=MyImage;DBQ=dbf\\vir.mdb;DEFAULTDIR=dbf"); //注册本地数据库数据源
m_db.OpenEx("DSN=MyImage;;",CDatabase::noOdbcDialog);//MyImage是数据源名称
}
4.在前面的函数体之前创建全局变量CDatabase m_db; CRecordset m_rec(&m_db);
5.使用数据库{
CString strSQL="select * from virdb";
BSTR bstrSQL=strSQL.AllocSysString();
m_rec.Open(CRecordset::dynaset,strSQL);
while(!m_rec.IsEOF())
{
// 使用数据库的代码,读出来的数据都是字符串型的
CString MyVirable;
m_rec.GetFieldValue("字段名",MyVirable); //将某个字段的当前行的值读到MyVirabl中
// ......
m_rec.MoveNext(); //将记录移到下一行
}
}

本程序是自动注册数据源的,当然可以手动注册数据源,关于如何注册数据源并不麻烦,叙述起来不太方面,你就参考其他的吧。不过建议不用手动注册数据源,这样你地程序移植性不好.

D. MFC中使用ADO连接access数据库,但是总在打开记录集这里报错中断,代码附上,求大神指导

1、记录集的CreateInstance和Open也需要放到try...catch...里面,于是发生异常的时候可以通过e.Description()得知具体异常信息;


2、AfxMessageBox出来之后,这里需要退出该函数,否则连接都没打开,下面的代码继续执行毫无意义;


3、别的没看出什么问题,但是我打开记录集一般都用这种方式:

_RecordsetPtrrs=m_pConnection1->Execute("select*fromemployeeswheresex='男'",NULL,adCmdText);
if(rs!=NULL&&!(rs->BOF&&rs->ADOEOF))
{
rs->MoveFirst();
}

E. 对于MFC连接ACCESS数据库并在对话框中显示出来

cdatabase::open;
virtual
bool
open
(
lpctstr
lpszdsn,
bool
bexclusive
=
false,
bool
breadonly
=
false,
lpctstr
lpszconnect
=
“odbc;”,
bool
busecursorlib
=
true
);
throw(
cdbexception,
cmemoryexception
);
参数含义:
lpszdsn指定了数据源名,在lpszconnect参数中也可包括数据源名,此时lpszdsn必需为null,若在函数中未提供数据源名且使lpszdsn为null,则会显示一个数据源对话框,用户可以在该对话框中选择一个数据源.
bexclusive说明是否独占数据源,由于目前版本的类库还不支持独占方式,故该参数的值应该是false,这说明数据源是被共享的.
breadonly若为true则对数据源的连接是只读的.
lpszconnect指定了一个连接字符串,连接字符串中可以包括数据源名、用户帐号(id)和口令等信息,字符串中的"odbc"表示要连接到一个odbc数据源上.
busecursorlib若为true,则会装载光标库,否则不装载,快照需要光标库,动态集不需要光标库.
参考代码:
#include
"afxdb.h"
cdatabase
database;
cstring
sdriver
=
"microsoft
access
driver
(*.mdb)";
cstring
sdsn;
cstring
sfile
=
"c://works//readdb//test.mdb";//change
path
here
//
create
odbc
connection
dinamically
sdsn.format("odbc;driver={%s};dsn='';dbq=%s",sdriver,sfile);
//
open
the
database
database.open(null,false,false,sdsn);