mfc 鏈接 access 2007 數據庫
神馬也不說了,直接給出源代碼和project
原理這個東西 Google 下。都出來了。自己就說下作為新手 ,
1 應該打印出,鏈接錯誤原因
2 應該將數據庫放到project以下,特別註意這點
給出部分源代碼。也能夠去看我上傳的project
stdafx.h
// stdafx.h : 標準系統包括文件的包括文件, // 或是常常使用但不常更改的 // 特定於項目的包括文件 #pragma once #ifndef _SECURE_ATL #define _SECURE_ATL 1 #endif #ifndef VC_EXTRALEAN #define VC_EXTRALEAN // 從 Windows 頭中排除極少使用的資料 #endif #include "targetver.h" #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 構造函數將是顯式的 // 關閉 MFC 對某些常見但常常可放心忽略的警告消息的隱藏 #define _AFX_ALL_WARNINGS #include <afxwin.h> // MFC 核心組件和標準組件 #include <afxext.h> // MFC 擴展 #include <afxdisp.h> // MFC 自己主動化類 #ifndef _AFX_NO_OLE_SUPPORT #include <afxdtctl.h> // MFC 對 Internet Explorer 4 公共控件的支持 #endif #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // MFC 對 Windows 公共控件的支持 #endif // _AFX_NO_AFXCMN_SUPPORT #include <afxcontrolbars.h> // 功能區和控件條的 MFC 支持 #include <afxdb.h> #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘x86‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘amd64‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"") #else #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘*‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"") /* #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF") using namespace ADODB; */ #endif #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") //using namespace ADODB; #endif
鏈接代碼.cpp
// mfcLinkAccess.cpp : 定義應用程序的類行為。 // #include "stdafx.h" #include "mfcLinkAccess.h" #include "mfcLinkAccessDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CmfcLinkAccessApp BEGIN_MESSAGE_MAP(CmfcLinkAccessApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP() // CmfcLinkAccessApp 構造 CmfcLinkAccessApp::CmfcLinkAccessApp() { // 支持又一次啟動管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO: 在此處加入構造代碼, // 將全部重要的初始化放置在 InitInstance 中 } // 唯一的一個 CmfcLinkAccessApp 對象 CmfcLinkAccessApp theApp; // CmfcLinkAccessApp 初始化 BOOL CmfcLinkAccessApp::InitInstance() { // 假設一個執行在 Windows XP 上的應用程序清單指定要 // 使用 ComCtl32.dll 版本號 6 或更高版本號來啟用可視化方式, //則須要 InitCommonControlsEx()。否則,將無法創建窗體。AfxEnableControlContainer();//加入的初始化OLE/COM環境代碼 if(!AfxOleInit()) { AfxMessageBox(_T("初始化OLE DLL失敗!")); return FALSE; } HRESULT hr = ::CoInitialize(NULL); if (!SUCCEEDED(hr)) { AfxMessageBox(_T("初始換COM失敗"));///顯示錯誤信息 } _ConnectionPtr m_pConnection; //_bstr_t strConnect(strConnction); try { hr = m_pConnection.CreateInstance(__uuidof(Connection));///創建Connection對象 ; if (SUCCEEDED(hr)) { hr = m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=demo.mdb;Persist Security Info=False","","",adModeUnknown);///連接數據庫 //上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97, //須要改為:Provider=Microsoft.Jet.OLEDB.3.51; //AfxMessageBox(_T("鏈接成功!")); } } catch (_com_error e) { CString errormessage; errormessage.Format(_T("連接數據庫失敗!\r\n錯誤信息:%s"), e.ErrorMessage()); AfxMessageBox(errormessage);///顯示錯誤信息 AfxMessageBox(e.Description());///顯示錯誤信息 return -1; } INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 將它設置為包括全部要在應用程序中使用的 // 公共控件類。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); AfxEnableControlContainer(); // 創建 shell 管理器,以防對話框包括 // 不論什麽 shell 樹視圖控件或 shell 列表視圖控件。 CShellManager *pShellManager = new CShellManager; // 標準初始化 // 假設未使用這些功能並希望減小 // 終於可執行文件的大小,則應移除下列 // 不須要的特定初始化例程 // 更改用於存儲設置的註冊表項 // TODO: 應適當改動該字符串, // 比如改動為公司或組織名 SetRegistryKey(_T("應用程序向導生成的本地應用程序")); CmfcLinkAccessDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: 在此放置處理何時用 // “確定”來關閉對話框的代碼 } else if (nResponse == IDCANCEL) { // TODO: 在此放置處理何時用 // “取消”來關閉對話框的代碼 } // 刪除上面創建的 shell 管理器。 if (pShellManager != NULL) { delete pShellManager; } // 因為對話框已關閉,所以將返回 FALSE 以便退出應用程序, // 而不是啟動應用程序的消息泵。 return FALSE; }
mfc 鏈接 access 2007 數據庫