日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC ADO连接ACCESS步骤及错误处理

發布時間:2024/1/17 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC ADO连接ACCESS步骤及错误处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

步驟1:

在StdAfx.h的#include語句之后添加

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

步驟2:

添加文件ADOConn.h

// ADOConn.h: interface for the ADOConn class. // //#if !defined(AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_) #define AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_ #include <icrsint.h> #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000class ADOConn { public:_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset; public:_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);ADOConn();virtual ~ADOConn();void OnInitADOConn();BOOL ExecuteSQL(_bstr_t bstrSQL);void ExitConnect(); };#endif // !defined(AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_)

步驟3:

添加文件ADOConn.cpp

// ADOConn.cpp: implementation of the ADOConn class. // // #include "stdafx.h" //#include "SuperMarket.h" #include "ADOConn.h"#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif// // Construction/Destruction // ADOConn::ADOConn() {}ADOConn::~ADOConn() {}void ADOConn::OnInitADOConn() {::CoInitialize(NULL);// 此句很重要,不要遺漏try{m_pConnection.CreateInstance("ADODB.Connection");CString path = AfxGetApp()->m_lpCmdLine;if (path.IsEmpty()){m_pConnection->Open(_bstr_t(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fctest.mdb;Persist Security Info=False")),"","",adOpenUnspecified);}else{int pos = path.ReverseFind('\\');path = path.Left(pos); //注:fctest.mdb是我的本地數據庫名 CString mdbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ path +"\\fctest.mdb;Persist Security Info=False";m_pConnection->Open((_bstr_t)mdbPath,"","",adOpenUnspecified);}}catch(_com_error e){ AfxMessageBox(e.Description());return;} }//執行SQL語句 BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) {try{if(m_pConnection==NULL)OnInitADOConn();m_pConnection->Execute(bstrSQL,NULL,adCmdText);return TRUE;}catch(_com_error e){ // e.Description(); AfxMessageBox(e.Description());return FALSE;} }//取消和數據庫的鏈接 void ADOConn::ExitConnect() {if(m_pRecordset != NULL)m_pRecordset->Close();m_pConnection->Close();::CoUninitialize();// 此句很重要,不要遺漏 }//讀取數據集 _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) {try{if(m_pConnection==NULL)OnInitADOConn();m_pRecordset.CreateInstance(__uuidof(Recordset));m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);}catch(_com_error e){e.Description();}return m_pRecordset; }

使用方法:

dialog中有IDC_LIST1的list。

查詢:

ADOConn ado;ado.OnInitADOConn();CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);pListCtrl->DeleteAllItems();int n = 0;CString sql;sql.Format("select * from test where id > 0");ado.m_pRecordset = ado.GetRecordSet((_bstr_t)sql);//讀取數據集while(!ado.m_pRecordset->adoEOF){CString i1,i2,i3,i4;i1 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("id");i2 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("name");i3 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("age");i4 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("zhiye");pListCtrl->InsertItem(n,i1);pListCtrl->SetItemText(n,1,i2);pListCtrl->SetItemText(n,2,i3);pListCtrl->SetItemText(n,3,i4);n++;ado.m_pRecordset->MoveNext();}ado.ExitConnect();

增加:

ADOConn ado;ado.OnInitADOConn();CString sql;sql.Format("insert into test(id,name,age,zhiye) values (%d,'%s',%d,'%s')",5,"老潘",23,"打手");ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();

刪除:

ADOConn ado;ado.OnInitADOConn();CString sql;sql.Format("delete from test where id = 5");ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();

修改:

ADOConn ado;ado.OnInitADOConn();CString sql;sql.Format("update test set name = '%s' where name = '%s' ","潘把子","老潘");ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();

常見問題:

1.win7下編譯,xp下不能使用,會報錯

解決辦法:注意到代碼里有

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")

實際上win7和win xp的msado15.dll是不一樣的,向下兼容,并且看到有人說win xp下的msado15.dll也不盡相同。如果想在win7下編譯,并且能在xp下運行,可以拷貝

win XP中C:\Program Files\Common Files\System\路徑下的ado文件夾到win7相同路徑下(注意保存原來的win7 ado文件夾),這樣在win7下編譯的程序在win xp下也可以運行。win7 及 win XP下的ado文件夾見附件。

2.初始化失敗,調試時發現_ConnectionPtr 指針為空

原因:當時沒有加::CoInitialize(NULL);及::CoUninitialize();語句。

示例源碼下載:

鏈接: https://pan.baidu.com/s/1cde7h0 密碼: 1xu8

xp ADO下載:

鏈接: https://pan.baidu.com/s/1sljv6ax 密碼: pcn9

win7 ADO下載:

鏈接: https://pan.baidu.com/s/1cbI4t4 密碼: ne39

轉載于:https://www.cnblogs.com/vipwtl/p/7771044.html

總結

以上是生活随笔為你收集整理的VC ADO连接ACCESS步骤及错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。