您的位置:首页 >> 编程开发 >> Visual C++ >> MFC或CPP >> 正文
RSS
 

结合ADO、ADOX和MFC的文档/视图/框架架构创建和打开Access数据库

http://www.rdxx.com 05年07月27日 21:56 CSDN 我要投稿

关键词: 架构 , 打开 , 框架 , 视图 , 文档 , MFC , 创建 , ADOX , ADO , Access数据库 , CE , 数据

预备阅读
在阅读本文之前,建议先对COM,数据库和MFC的文档/视图/框架有一个基本的了解。推荐阅读下列文章

MFC技术文章

TN025: Document, View, and Frame Creation
微软知识库文章

Q183606 ActiveX Data Objects (ADO) Frequently Asked Questions
Q169496 INFO: Using ActiveX Data Objects (ADO) via #import in VC++
Q317881 HOW TO: Create an Access Database Using ADOX and Visual C# .NET
Q252908 HOWTO: Create a Table with Primary Key Through ADOX
Q201826 PRB: Error 3265 When You Access Properties Collection
Office VBA参考

Creating and Modifying Access Tables
步骤
在计算机上安装MDAC2.5以上版本
打开VC。首先,我们使用MFC应用程序向导创建一个标准的MDI程序,这里我为这个工程起名为Passport,然后在stdafx.h中导入ADOX
#include <shlwapi.h>
#import "c:\Program Files\Common Files\system\ado\Msado15.dll"  rename("EOF","adoEOF") rename("DataTypeEnum","adoDataTypeEnum")
#import "c:\Program Files\Common Files\System\ADO\Msadox.dll"  rename("EOF", "adoXEOF") rename("DataTypeEnum","adoXDataTypeEnum")
#import "c:\PROGRAM FILES\COMMON FILES\System\ado\MSJRO.DLL"

根据你的计算机上ADO的安装路径,这里的路径可能有所不同。
在文档类中声明数据库连接 ADODB::_ConnectionPtr m_pConn;和记录集 ADODB::_RecordsetPtr m_pSet;,并且重载文档类的DeleteContents() 、OnNewDocument()和OnOpenDocument()函数,用于断开数据库连接,创建数据库和表,以及打开现有的数据库。
(作者的抱怨:CSDN文章中心该改改了,代码排版这么麻烦)
void CPassportDoc::DeleteContents()
{
 try
 {
  if(m_pSet){
   ESRecordsetClose(m_pSet);
  }
  if(m_pConn)
   if(m_pConn->State&ADODB::adStateOpen)
    m_pConn->Close();
  m_pConn=NULL;
 }
 catch(_com_error &e){
  ESErrPrintProviderError(m_pConn);
  ESErrPrintComError(e);
 }
 CDocument::DeleteContents();
}BOOL CPassportDoc::OnNewDocument()
{
 if (!CDocument::OnNewDocument())
  return FALSE;
 CFileDialog dlgFile(FALSE, _T(".mdb"), NULL, OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, _T("Access 数据库 (*.mdb)|*.mdb|全部文件(*.*)|*.*||"));
 if (dlgFile.DoModal() != IDOK)
  return FALSE;
 CString strDBPath=dlgFile.GetPathName();
 if(!CreateDB(strDBPath))return FALSE;
 //create
 CString strConnect;
 
 strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"),strDBPath);
 COleVariant Connect(strConnect);
 // TODO: add reinitialization code here
 // (SDI documents will reuse this document)
 try{
  m_pConn.CreateInstance(_T("ADODB.Connection"));
  m_pSet.CreateInstance(_T("ADODB.Recordset"));
  m_pConn->PutCommandTimeout(30);
  m_pConn->PutConnectionTimeout(30);
  m_pConn->put_CursorLocation(ADODB::adUseClient);
  m_pConn->Open(_bstr_t(strConnect),_bstr_t(),_bstr_t(),ADODB::adConnectUnspecified);
  ::ESRecordsetOpen(_T("Passport"),m_pConn,m_pSet);
  SetPathName(strDBPath);
  return TRUE;
 }
 catch(_com_error &e){
  ESErrPrintProviderError(m_pConn);
  ESErrPrintComError(e);

上一页 下一页

 
 
标签: 架构 , 打开 , 框架 , 视图 , 文档 , MFC , 创建 , ADOX , ADO , Access数据库 , CE , 数据 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站