1. 程式人生 > >詳細配置C++藉助ADO連線Access資料庫

詳細配置C++藉助ADO連線Access資料庫

這是寫給你的。----2016-7-18
(本篇不會介紹連線原理,只介紹操作步驟入門)
 
1.     環境配置(Win8-Win10,64位)
2.     連線與測試程式碼
3.     意外情況解決方案
 
環境配置:
1.     先安裝你的Access資料庫(微軟Office 2016中含有或者單獨下載,下載地址:http://msdn.itellyou.cn/ 左側選擇應用程式一欄,注意選擇下載64位,即標有X64的)
特殊情況檢視意外解決方案 (A)
2.     安裝Microsoft Access database engine 2007,他的作用暫時可理解為我們所寫的程式與Access之間的溝通橋樑--“傳話人”。
Microsoft Access database engine 2010(可以安裝,但後面的程式碼是2007的,所以暫時建議使用2007)
下載地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=13255
Microsoft Access database engine 2007
下載地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=23734
特殊情況檢視意外解決方案 (C)


連線與測試程式碼:
本例程式碼使用VS2010以上版本測試
建議去文末下載寫好的含註釋的測試程式碼看。


1.     新建你的資料庫表
開啟Access
選擇空白資料庫,為你的資料庫中表項起一個名字 如 Test
設計你的儲存表格
本例附有測試表格database1.accdb
2.
在你程式的stdafx.h標頭檔案中加入
#import"C:/ProgramFiles/CommonFiles/System/ADO/msado15.dll"
rename("EOF","adoEOF"), rename("BOF","adoBOF")
(如果載入失敗的話,去c:\program files\common files\system\ado檢視是否有msado15.dll)
3.測試程式碼介紹
// LinkDBForHX.cpp : 定義控制檯應用程式的入口點。

#include "stdafx.h"
#include<iostream>//atlstr
#include<atlstr.h>
using namespace ADODB;
using namespace std;



class AdoAccess {
public:
	_ConnectionPtr   HX_pConnection; // 資料庫指標
	_RecordsetPtr    HX_pRecordset; // 命令指標
	_CommandPtr      HX_pCommand; // 記錄指標
	void OnInitADOConn() {
		::CoInitialize(NULL);
		try
		{
			HX_pConnection.CreateInstance(__uuidof(Connection));//等價於 //HX_pConnection.CreateInstance("ADODB.Connection");
			//此句包含定位你資料庫的所需的訪問資訊
			_bstr_t strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database1.accdb;Persist Security Info=False ";
			//測試//_bstr_t strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database1.accdb;Persist Security Info=False";//此句包含定位你資料庫的所需的訪問資訊
			//測試//_bstr_t strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Driver = { Microsoft Access Driver(*.mdb, *.accdb) }; DBQ =Database1.accdb;Persist Security Info=False ";
			//此句包含定位你資料庫的所需的訪問資訊
			//連線master資料庫,無密碼。
			HX_pConnection->Open(strConnect,"","",adModeUnknown);	//連線資料庫

			cout << "連線成功,並獲得智慧指標" << endl;
		}
		catch (_com_error e)
		{
			cout <<e.Description() << endl;
		}
	
	}
	void ExitConnect() {
		if (HX_pRecordset != NULL)
			HX_pRecordset->Close();
		HX_pConnection->Close();
		::CoUninitialize();
	}
};

int main()
{
	AdoAccess dataBase;

	//初始化
	dataBase.OnInitADOConn();
	dataBase.HX_pRecordset.CreateInstance("ADODB.Recordset");


	//選擇名為Test的表格
	dataBase.HX_pRecordset->Open("select *  from Test",
		dataBase.HX_pConnection.GetInterfacePtr(),
		adOpenDynamic,
		adLockOptimistic,
		adCmdText);

	int i = 0;
	//讀取其中的name欄位所有資料,並顯示
	while (!dataBase.HX_pRecordset->adoEOF)
	{
		
		_variant_t var;
		string strValue;
		var = dataBase.HX_pRecordset->GetCollect("name");
		//其他類似,都是通過HX_pRecordset傳遞SQL語句執行查詢、新增、刪除等命令

		if (var.vt != VT_NULL)
			strValue = _com_util::ConvertBSTRToString((_bstr_t)var);

		++i;
		cout << "name " << i << "  " << strValue << endl;;

		dataBase.HX_pRecordset->MoveNext();
	}


	//解除安裝com元件
	dataBase.ExitConnect();
	int xxxx = 0;
	cout << "輸入數字結束\n";
	cin >> xxxx;
    return 0;
}

意外情況解決方案

A 描述:未在本地計算機上註冊“microsoft.ACE.oledb.12.0”提供程式。

  請正確安裝環境配置中的第一步

B  若A無法解決問題。

選擇 該應用程式的 應用程式池 ------>選擇高階設定--------->啟用32位應用程式 ------->true  

操作如下:

按下win + R

在彈出的對話方塊中輸入inetmgr,然後按回車鍵

選擇最左側


點選應用程式池

再點選下圖的DefaultAPPPool 


選擇高階設定


選擇啟用32位應用程式 ---置為True.

最後選擇確認儲存

C 重新安裝 Microsoft Access databaseengine 2007

D 程式若提示缺少符號集,請下載相關符號集或者在聯網狀態下動態載入

E問

示例專案下載地址:

http://download.csdn.net/detail/hffhjh111/9866831