vc6.0 ADO訪問資料庫
最近做一個蛋疼的專案會用到ACCESS資料並從中讀取資料,由於之前沒搞過VC的專案,經過幾番磕磕碰碰總算搞好了,遂將解決流程記錄下來:
首先吐槽下微軟在版本相容性方面的缺陷,搞得我是蛋疼得不得了啊,若非高人相助現在已可能經吐血身亡了
廢話少說上程式碼:
以下程式碼環境:win7 32位+VC6.0
目標環境: XP 32位 無VC
新增標頭檔案:
#import "C:\program files\common files\system\ado\msado15.dll" rename_namespace("ADONameSpace") rename("EOF","adoEOF")
實現程式碼:
BOOL CTest2::fnGetTestResult(E_FAILTYPE &eGetResultError)
{
CString csFilePath ;
CString csErrorInfo;
CString csInfo;
BOOL bIsFind = FALSE;
if (" "==m_csTestReortFile)
{
return FALSE;
}
ADONameSpace::_ConnectionPtr pConnection;
ADONameSpace::_CommandPtr pCommand;
ADONameSpace::_RecordsetPtr pRecordset;
::CoInitialize(NULL); //初始化COM環境
HRESULT hr;
try
{
//hr=pConnection.CreateInstance(__uuidof(ADONameSpace::Connection)); //這兩句CreateInstance我試過都可以
hr=pConnection.CreateInstance("ADODB.Connection");
if(FAILED(hr))
{
_com_error e(hr);
AfxMessageBox(e.ErrorMessage()); //打印出錯資訊
return false;
}
csErrorInfo.Format("建立資料庫連線例項成功\r\n");
OutputText(1,csErrorInfo,RGB(1,0,0));
//m_pConnection->ConnectionString="File Name=LinkDatabase.udl";
pConnection->ConnectionTimeout=5;//等待連線的時間為5s
hr=pConnection->Open((_bstr_t)("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+m_csTestReortFile),"","",ADONameSpace::adConnectUnspecified);//m_csTestReortFile是要開啟的資料庫檔案絕對目錄
if(FAILED(hr))
{
csErrorInfo.Format("開啟檔案 \"%s\" 失敗\r\n",csFilePath);
OutputText(1,csErrorInfo,RGB(255,0,0));
return false;
}
}
hr = pRecordset.CreateInstance(__uuidof(ADONameSpace::Recordset));
pRecordset->Open("SELECT * FROM CaseTable",pConnection.GetInterfacePtr (),ADONameSpace::adOpenDynamic, \
ADONameSpace::adLockOptimistic,ADONameSpace::adCmdText);//CaseTable是ACCESS資料庫中的一個表格
while(VARIANT_FALSE == pRecordset->adoEOF)
{
CString csResult;
CString csCaseName;
_variant_t vFieldValue;
vFieldValue = pRecordset->GetCollect("LastResult");//獲取LastResult列對應的值
csResult = (char*)_bstr_t(vFieldValue);
vFieldValue = pRecordset->GetCollect("CaseName");
csCaseName = (char*)_bstr_t(vFieldValue);
if (csCaseName == m_csTestUnitText)
{
bIsFind = TRUE;
if ("RPT_BLOCK" == csResult)
{
eGetResultError = GET_RESULT_BLOCK;
break;
}
else if ("RPT_NG" == csResult )
{
eGetResultError = GET_RESULT_NG;
break;
}
else if ("RPT_OK" == csResult )
{
eGetResultError = GET_RESULT_OK;
break;
}
}
pRecordset->MoveNext(); //移到CaseTable中的下一行
}
if (FALSE == bIsFind)
{
eGetResultError = GET_RESULT_NOTFIND;
}
}
catch(_com_error e)
{
eGetResultError = GET_RESULT_OTHER;
return FALSE;
}
return TRUE;
}
程式碼在win7 32位+VC6.0中執行毫無問題,但是拿到XP上就出問題了
hr=pConnection.CreateInstance("ADODB.Connection");詞句出錯提示不支援此介面;
開始懷疑是xp上的msado15.dll檔案損壞,在網上找了點方法驗證了下:
1.在C:\Program Files\Common Files\System\ado下找到msado15.dll
在命令列輸入命令: regsvr32 C:\Program Files\Common Files\System\ado\msado15.dll (注意命令列裡面不支援空格,所以最好還是按下面方法進行)
回車後,註冊該ado模組(如果註冊失敗,可以將當前路徑先到
C:\Program Files\Common Files\System\ado目錄再進行註冊)
運用後能正常。
2.如果上述方式已然不行,那說本臺電腦的這個檔案可能有問題,
可以去找一臺沒有問題的電腦,把這個檔案拷貝過來,
然後操作1的步驟即可解決!
經過上面步驟驗證msado15.dll沒有問題,後來又檢視win7上的該檔案大小比XP上的翻了倍,所以開始懷疑是版本不匹配,
用OLE View->Type Libraries 檢視Microsoft ActiveX Data Objects *.* Library 版本從2.0到6.1的都有,
我標頭檔案裡恰好是引用的"C:\program files\common files\system\ado\msado15.dll" 這個檔案,所以我引用的是6.1版本,同樣的方法在xp上檢視只有2.8版本,再到WIN7下檢視2.8版本
再將我的標頭檔案改為
#import "C:\program files\common files\system\ado\msado28.tlb" rename_namespace("ADONameSpace") rename("EOF","adoEOF")
再次編譯到XP上執行,問題解決;
相關推薦
vc6.0 ADO訪問資料庫
最近做一個蛋疼的專案會用到ACCESS資料並從中讀取資料,由於之前沒搞過VC的專案,經過幾番磕磕碰碰總算搞好了,遂將解決流程記錄下來: 首先吐槽下微軟在版本相容性方面的缺陷,搞得我是蛋疼得不得了啊,若非高人相助現在已可能經吐血身亡了 廢話少說上程式碼: 以下程式碼環境:wi
ado訪問資料庫的最簡模型
環境:vc++ 6.0, MFC exe, 開始: 第一步: 在標頭檔案中找到 StdAfx.h,在 #endif 下面 新增 #import "c:\Program Files\Common Files\System\ado\msado15.
Windows下使用Python通過ODBC/ADO訪問資料庫
關鍵詞:Python 資料庫 ODBC ADO Python的確是一個很好的指令碼語言,簡潔而且功能很強。可惜文件資料奇缺,最近學Python,手裡唯一 的一本《Python技術參考大全》已經過時很久了。想用Pytho
VC6.0利用ado元件 向oracle資料庫插入圖片
oracle 資料庫中用Bolb儲存圖片 一、資料庫表設定 1、建立表 create table epoliceadmin.ep_image(image_id number(10) not null primary key, image blob); 2、建立序列 crea
VC6.0 通過ado連線access資料庫
我們可以使用AfxOleInit()來初始化COM庫,這項工作通常在CWinApp::InitInstance()的過載函式中完成,請看如下程式碼:: public: _ConnectionPtr m_pConnection
VC++ ado連線資料庫(可以在VC6.0使用,以access資料庫為例項)(1)
很多新手對資料庫連線迷茫了,怎麼我寫的就連線不上資料庫呢?或者有些功能就實現不了(感覺這太奇葩了吧),下面就怎麼連線資料庫進行說明。 看以下程式碼和解說步驟:(後面附帶一個完整的類給大家進行下載,便於直接進行呼叫) 1.首先新建一個類,方便下次使用,編寫了一次就不用再編寫。
《B/S模式下ADO.NET資料庫訪問技術的設計及應用》論文筆記(十七)
一、基本資訊 標題:B/S模式下ADO.NET資料庫訪問技術的設計及應用 時間:2014 來源:電子測試 關鍵詞:B/S模式; ADO.NET資料庫訪問技術; 設計; 應用; 二、研究內容 1.ADO.NET資料庫訪問技術的兩種模式: 連線模式下的資料庫訪問技術:
Ubuntu Server 18 解除安裝MySQL5.*安裝MySQL8.0,實現遠端訪問資料庫
如果你在Ubuntu18直接用 sudo apt-get install mysql-client mysql-server 系統預設會安裝MySQL會預設安裝5.7,但是MySQL5.7版本最高只適配到Ubuntu17.04,而MySQL8.0最高適配到Ubuntu18.04。
使用ADO.NET訪問資料庫 使用ADO.NET訪問資料庫
使用ADO.NET訪問資料庫 Program using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks
ADO.NET訪問資料庫
一.ADO.NET :用於連線資料庫的技術 1.ADO.NET分為兩大元件 DataSet:資料集 .NET FRAMWORK :用於連線到資料庫,傳送命令,檢索結果 2.ADO.NET四大核心物件 Connection Command DataAdapter DataReader 二.使用AD
看“高手”如何理解ADO.NET資料庫訪問技術
ADO.NET資料庫訪問技術是系統開發的一項必備技能,如何輕鬆理解它的精髓呢?其實就是3個步驟4個要點。 1、使用連線物件Connection連線資料來源 2、使用命令物件Command執行SQL語句操縱資料庫 3、使用資料讀取器物件DataReader讀取資料 4、使用資料集物件DataSet和
ADO.net資料庫訪問技術(一)
現在,幾乎所有的管理軟體都會和資料庫打交道,ADO.net是新一代的資料存取技術,是一個全新的資料庫訪問模型,支援記憶體中的離線訪問!記得之前敲過的機房收費系統,基本上每個窗體都會
VC++中ADO方式訪問資料庫datetime欄位(不帶毫秒時間與帶毫秒時間)
//取得列名 bstrColName = m_pRSet->GetFields()->Item[nCol]->GetName() ; strColname = (char*)bstrColName ; //取得當前行當前列值 varCounter.lVal =
VBA中用ADO訪問SQL SERVER資料庫:資料查詢
本程式的作用是:使用資料物件ADO訪問SQL資料庫,從而進行資料查詢,並將查詢的資料返回到EXCEL中,由於此程式需用到SQL資料庫,所以只供大家參考,不便執行,但大家可以看出其精華! Private Sub CommandButton1_Click() Dim cn As New ADODB.Co
痛苦的歷程:Ado訪問PARADOX資料庫
前面接手一個專案,需要用VC訪問已經存在的PARADOX資料庫。在接手這個專案前,對於PARADOX的理解少之又少,只知道有這麼一種資料庫,並不瞭解它的結構是什麼。真正對它進行操作的時候,才發現是如此之難。有幾次差點都放棄了,但最後一咬牙,總算堅持過來了。在這期間,我走了不少
VC6.0通過ADO呼叫SQL Server 2000的儲存過程出現引數過多的問題
今天在做畢業設計的時候遇到一個很奇怪的問題,我以前通過傳遞三個引數的儲存過程呼叫都還是很成功的,為什麼今天就不行了呢?程式碼如下: HRESULT hr; if (m_pCmd == NULL) { hr = m_pCmd.Creat
VC6.0中用ado連接數據庫出錯
連接 sta 可能 cti mod ole dll jet enable 1. 在stdafx.h中添加 #import "c:\\program files\\common files\\system\\ado\\msado15.dll" no_namespace re
VC6.0在Win10下的兼容性問題設置(可以試試)
log 可執行 ros .com 機器語言 默認安裝 program lang 軟件開發工具 Microsoft Visual C++ 6.0,簡稱VC6.0,是微軟推出的一款C++編譯器,將“高級語言”翻譯為“機器語言(低級語言)”的程 序。Visual C++是一個功能
ThinkPHP5.0---URL訪問
參數 模塊 server 設置 地址 中控 默認 gte 配置 ThinkPHP 5.0 在沒有啟用路由的情況下典型的URL訪問規則是(采用 PATH_INFO 訪問地址): http://serverName/index.php(或者其它應用入口文件)/模塊/控制器
Ado訪問sqlserver 端口號非1433時 連接串的寫法
security tro size uri hostname false info ide ado Ado訪問sqlserver 端口號非1433時 連接串的寫法 Provider=SQLOLEDB.1;Persist Security Info=False;Data So