mfcaccess数据库操作
1. mfc中access数据库调用表问题
由于access不支持触发器,要使用一句sql语句进行两张表的插入会有困难,你建一个查询然后进入sql视图,然后在里面分别写两个insert语句向两张表里增加数据就好了,使用的时候直接执行这个函数就可以实现给两张表同时增加数据了。
2. MFC 通用操作Access 数据库的驱动
MFC ODBC数据库简述
开放数据互连(Open Database Connectivity,简称ODBC)是一种数据库的互操作平台,通过经严格定义的各个级别的ODBC接口和客户系统的初始装置,能够为应用程序提供数据库类型透明性和位置透明性,让应用程序的编写者避免了与数据源相联的复杂性。MFC的数据库扩展部分封装了使用ODBC数据资源的细节,应用程序可以直接使用MFC中的数据库扩展类,来操纵ODBC驱动程序管理器,访问数据库。进行MFC ODBC数据库开发时,所需的基础工具就是MFC ODBC数据库类的使用。利用MFC ODBC开发就是利用MFC ODBC数据库类来操纵ODBC数据源。Visual C++的大多数ODBC访问是通过MFC来完成的。Visual C++的MFC类库定义了几个数据库类,在利用MFC编程时常常用到,它们是CDatabase(数据库类)、CRecordSet(记录集类)、和CRecordView(可视记录集类)。
对于MFC ODBC数据库类来说,CDatabase类对象表示一个同数据源的连接,通过它可以对数据源进行操作。而CRecordSet对象代表从数据源中选择的一组记录的集合,也就是通常所说的记录集对象。
CRecordSet对象通常用于两种形式:动态集(dynasets)和快照集(snapshots)。动态集能与其他用户所做的更改保持同步,快照集则是数据的一个静态视图。每一种形式在记录被打开时都提供一组记录,区别在于,当用户在一个动态集里滚动到一条记录时,有其他用户或是应用程序中的其他记录集所做的更改就会相应地显示出来。CRecordView类对象能以控制的形式显示数据库记录。这个视图是直接连接到一个CRecordSet对象的表视图。
一个应用实例
本实例是某项目中的一部分,目的是实现MFC ODBC数据库与Access数据表格之间的相互操作。包括用Visual C++中的MFC ODBC技术实现对Access数据表格的内容的显示、添加、修改和删除的功能。
1、 ODBC数据源的创建
笔者使用的操作系统为Windows XP,工具是Visual C++6.0。此例中建立的Access表格取名为“plc”。
在“控制面板”中双击“管理工具”图标,然后在新出现的窗口中双击“数据源(ODBC)”,在弹出的对话框中选中“用户DSN”中的“dBASE Files”,单击“添加”按钮,从弹出的对话框中选中“Microsoft Access Driver(*.mdb)”。单击“完成”后,将弹出一个新的对话框,在数据源名及说明后的编辑框中填入表格名“plc”。
在命名数据源之后,需要把它连接到一个数据库。单击“选择”,如图1所示,得到存储在数据目录中plc.mdb的拷贝文件,选中之,单击“确定”关闭此对话框。然后单击“确定”,完成数据源的创建。
3. 用MFC做成了一个软件,数据库是access,现在想做成可执行文件,直接移植到别的机器上能运行的,该怎么做
你是不是用的ODBC进行连接access进行操作的,如果是那样的话,
1. 你要在别的机器上设置一个ODBC的数据源,(就是把你的access文件加到这个数据源里面)
或者
2. 你在程序中自动增加一个数据源,使用下面语句
SQLConfigDataSourceW(NULL,ODBC_ADD_DSN,
_T("Microsoft Access Driver (*.mdb)"),
_T("DSN=LibraryInfo\0Description=这个文件是用来储存信息的\0FileType=Access\0 DBQ=..\\Library.mdb\0")
);
里面的配置自己要修正下.
4. MFC通过ADO操作Access数据库
vc 可以访问很多数据库,比如Access、SQL servel、MYSql、Orcal等数据库系统。也有很多数据库访问技术,比如ADO、ODBC、OLE DB等。每一种数据库系统都提供了一系列的API,在程序中可以通过编码的形式调用相应的API进而对数据库操作。
你学一个vc++访问ADO数据库吧,难点,但是很实用!
1、导入ADO库
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用导入的动态库的指针操作数据库.
打开数据库连接
_ConnectionPtr m_pConn; // 数据库连接指针
// 创建Conneciton对象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn为你连接数据库的信息,你应该按照你的要求打开数据库,他里面包含了你的Access数据库的路径、名称等待信息,,,是一个通用的字符串。
然后你用打开的那个连接进行操作数据库。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作数据库的SQL语句。在这个SQL语句里你可以创建表、更新表等。
用ADO访问的时候要求初始他COM库和释放COM对象
// 初始化COM环境(库)
::CoInitialize(NULL);
//释放COM对象
::CoUninitialize();
5. 如何使用MFC连接ACCESS数据库
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///
if( TRUE == SUCCEEDED(hr))
{
strDBFile = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDBFile;
hr = m_pConnection->Open((_bstr_t)strDBFile ,_bstr_t(strUser),_bstr_t(strUser),adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("%s",e.ErrorMessage());
AfxMessageBox(errormessage);
return FALSE;
}
6. MFC对话框如何读取access数据库
首先在stdafx.h中添加如下
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
上面的路径根据你自己的更改
然后在你要查询的地方写如下代码:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));
pConn->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\a.mdb";
//这里的数据库也是你的绝对路径
pConn->Open("","","",adConnectUnspecified);
pRst = pConn->Execute("Select * from ...",NULL,adCmdText);
while(!pRst->rsEOF)
{
/*
这里写你怎么把数据读取到外面,如下面是吧数据读到一个ListB0x控件中
((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("这里写属性名"));
*/
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
pCmd.Release();
CoUninitialize();
7. mfc中连接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(); //将记录移到下一行
}
}
本程序是自动注册数据源的,当然可以手动注册数据源,关于如何注册数据源并不麻烦,叙述起来不太方面,你就参考其他的吧。不过建议不用手动注册数据源,这样你地程序移植性不好.
8. MFC做的登录界面连接access数据库
刚刚写了个access的系统
.cpp中
//hxx函数主要用于打开数据库连接
void ADOConn::OnInitADOConn()
{
::CoInitialize(NULL); //why初始化OLE/COM库环境
try
{
m_pCon.CreateInstance("ADODB.Connection"); //创建Connection对象
m_pCon->ConnectionTimeout=3; //设置连接延时
//设置连接字符串why
//m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=InfoMan.mdb","","",adModeUnknown);
m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=InfoMan.mdb;Persist Security Info=False;Jet OLEDB:Database Password=1234","","",adModeUnknown); }
catch(_com_error e) //捕获异常
{
AfxMessageBox(e.Description()); //显示错误信息
}
}
.h中
#import "G:\\MY_PRO\\InfoMan\\msado15.dll"no_namespace\
rename("EOF","adoEOF")
_ConnectionPtr m_pCon; //添加一个指向Connection对象的指针
_RecordsetPtr m_pRs; //添加一个指向Recordset对象的指针
9. MFC中如何连接access数据库
比如在你的工程目录中建一个 dbfvir.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(); //将记录移到下一行
}
}
本程序是自动注册数据源的,当然可以手动注册数据源,关于如何注册数据源并不麻烦,叙述起来不太方面,你就参考其他的吧。不过建议不用手动注册数据源,这样你地程序移植性不好.