㈠ C/C++ 怎麼操作ACCESS資料庫啊
C++利用ado編程,首先要引用一個庫文件
#import "c:\program files\common files\system\ado\msado15.dll"no_namespaces rename("EOF" adoEOF")
然後用AfxOleInit()初始化組件
定義一個_ConnectionPtr 指針,然後利用這個指回針打開資料庫字元串答,
你去網個看一下,很多教程的
http://hi..com/lninglove/blog/item/3f6cec22959e4ca34723e833.html
㈡ c++ mfc odbc怎麼調用access資料庫
比如在你的工程目錄中建一個 dbf\vir.mdb //Access資料庫,然後你需要做以下操作:
1.在StadAfx.h裡面添加#include <afxdb.h> //新加入頭文件,用於CDatabase類。
2.在StadAfx.h最後的#endif上添加#import "msado15.dll" no_namespace rename("EOF","rsEOF")
這時,你要把msado15.dll拷到與dbf同級的目錄,也就是工程目錄里,當然你可以該路徑
3.在你自己的工程里,比如MyProc是你建的工程,添加代碼
CMyPorcApp::CMyProcApp(){
CoInitialize(NULL);
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",\
"DSN=MyImage;DBQ=dbf\\vir.mdb;DEFAULTDIR=dbf"); //注冊本地資料庫數據源
m_db.OpenEx("DSN=MyImage;;",CDatabase::noOdbcDialog);//MyImage是數據源名稱
}
4.在前面的函數體之前創建全局變數CDatabase m_db; CRecordset m_rec(&m_db);
5.使用資料庫{
CString strSQL="select * from virdb";
BSTR bstrSQL=strSQL.AllocSysString();
m_rec.Open(CRecordset::dynaset,strSQL);
while(!m_rec.IsEOF())
{
// 使用資料庫的代碼,讀出來的數據都是字元串型的
CString MyVirable;
m_rec.GetFieldValue("欄位名",MyVirable); //將某個欄位的當前行的值讀到MyVirabl中
// ......
m_rec.MoveNext(); //將記錄移到下一行
}
}
本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.
㈢ c語言如何使用access資料庫
1、C/C++與資料庫交互,像 mssql/ mysql / oracle 等,一般都有成熟的第三方庫,這些庫裡面無非就是封裝了與資料庫通訊的方式和通訊協議搜一下要用的資料庫相關的 API 文檔,會說得很清楚任何文件都是二進制數據,關鍵是數據存儲的組織方式通用擴展名的文件,像gif/doc/jpg/wav,格式都是固定的。
2、舉個例子,連接SQL:
// 打開資料庫
strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s"), m_strUnEntryptMdbFilePath,m_strMDBPassword);
// 創建連接
HRESULT hr = m_pConnection.CreateInstance(_uuidof(Connection));
_ConnectionPtr m_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified);
// 聲明表單指針
_RecordsetPtr pBandRecordset;
pBandRecordset.CreateInstance(__uuidof(Recordset));
// 執行語句
CString strSQL(L"SELECT * FROM [Band]");
m_pConnection->Execute((LPCTSTR)strSQL,NULL,0);
// 提取某一項 例如BandInfo
int iBandInfo = wcscmp(colum, L"BandInfo");
while(!recordsetPtr->adoEOF)
{
var = recordsetPtr->GetCollect(colum);
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
recordsetPtr->MoveNext();
}
㈣ 怎樣用C++連接並使用access資料庫
使用C++編程語言,連接對Access資料庫進行操作,常用的方法有DAO和ADO兩種方式,本文將介紹採用ADO的方式方位Access資料庫。
先介紹一下ADO,ADO (ActiveX Data Objects) 是一個用於存取數據源的COM組建。它提供了編程語言和統一數據訪問方式OLE DB的一個中間層。允許開發人員編寫訪問數據的代碼而不用關心資料庫是如何實現的,而只用關心到資料庫的連接。
在程序的開始,首先導入所需要的庫:#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") ,這里重命名EOF是必要的,因為典型的VC應用都已經定義了EOF作為常數-1。
完整的程序如下,以注釋的形式來對程序進行解釋:
_ConnectionPtr m_pConnection; //連接access資料庫的鏈接對象
_RecordsetPtr m_pRecordset; //結果集對象
CoInitialize(NULL); //初始化
m_pConnection.CreateInstance(__uuidof(Connection)); //實例化對象
//連到具體某個mdb ,此處的的Provider語句因Access版本的不同而有所不同。
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyAccess.mdb","","", adModeUnknown);
}
catch(_com_error e)
{
AfxMessagebox(_T("資料庫連接失敗!"));
return;
}
m_pRecordset.CreateInstance(__uuidof(Recordset)); //實例化結果集對象
//執行sql語句
try
{
CString sql= _T("select * from Patient");
m_pRecordset->Open(sql, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
if(m_pConnection->State)
{
m_pConnection->Close();
m_pConnection= NULL;
}
return ;
}
//處理結果集
try
{
//若結果為空,結束
if(m_pRecordset->BOF)
{
AfxMessageBox_T(("表內數據為空!"));
if(m_pConnection->State)
{
m_pRecordset->Close();
m_pRecordset = NULL;
m_pConnection->Close();
m_pConnection= NULL;
}
return ;
}
//游標定位到第一條記錄
m_pRecordset->MoveFirst();
_variant_t var; //從結果集中取出的數據放到var中
char *name;
while(!m_pRecordset->adoEOF)
{
var= m_pRecordset->GetCollect("Name"); //要取欄位的名稱。
if(var.vt != VT_NULL)
{
name= _com_util::ConvertBSTRToString((_bstr_t)var); //轉換成char*類型
}
string MyName = name;
m_pRecordset->MoveNext();
}
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMssage());
}
//退出程序時的處理 ,關閉資料庫的相關操作
if(m_pConnection->State)
{
m_pRecordset->Close();
m_pRecordset = NULL;
m_pConnection->Close();
m_pConnection= NULL;
}
㈤ c++怎麼連接access資料庫
環境配置:
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 : 定義控制台應用程序的入口點。
[cpp] view plain
#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 程序若提示缺少符號集,請下載相關符號集或者在聯網狀態下動態載入
㈥ 請問各位大俠、怎麼用C語言連接access資料庫、最好能詳細點兒寫出步驟、如果可以的話,能給代碼就更好了。
你先配置資料庫
http://..com/question/209967914.html
然後舉個例子,連接SQL
我連access的給你看一下
別忘了 mfc AfxOleInit(); 或者 win32 coInitial什麼東東(初始化com的)
// 打開資料庫
strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s"), m_strUnEntryptMdbFilePath,m_strMDBPassword);
// 創建連接
HRESULT hr = m_pConnection.CreateInstance(_uuidof(Connection));
_ConnectionPtr m_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified);
// 聲明表單指針
_RecordsetPtr pBandRecordset;
pBandRecordset.CreateInstance(__uuidof(Recordset));
// 執行語句
CString strSQL(L"SELECT * FROM [Band]");
m_pConnection->Execute((LPCTSTR)strSQL,NULL,0);
// 提取某一項 例如BandInfo
int iBandInfo = wcscmp(colum, L"BandInfo");
while(!recordsetPtr->adoEOF)
{
var = recordsetPtr->GetCollect(colum);
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
recordsetPtr->MoveNext();
}
㈦ 如何在c程序中調用access資料庫
c語言不能連接資料庫,只能用文件保存數據;
我在學習的時候也曾遇到過這樣的內問題,請教老容師,老師告訴我C語言主要用來開發系統的,還有就是用來開發游戲的。一般用文件保存數據。不會用到資料庫;
要用資料庫的語言有VB,java,c#,Dephi等等
㈧ c語言可以連接access資料庫
#import "C:\program files\common files\system\ado\msado15.dll " no_namespace rename( "EOF ", "adoEOF ")
//#import "c:\program files\common files\system\ado\msado15.dll " rename ( "EOF ", "adoEOF ") no_namespace
#define CREATEiNSTANCE(sp,riid) { HRESULT _hr =sp .CreateInstance( __uuidof( riid ) ); \
if (FAILED(_hr)) _com_issue_error(_hr); }
#define RsITEM(rs,x) ((rs-> Fields-> Item[_variant_t(x)]-> Value))
class CHmbAdoDB
{
public:
BOOL m_bOpen;
_ConnectionPtr m_DbConn;
CString m_ErrMsg;
CString m_SQLState;
long mSqlCode;
public:
void Cancel();
BOOL IsOpen();
void RollbackTrans();
void CommitTrans();
long BeginTrans();
void Close();
BOOL Open(LPCSTR lpszConnect);
BOOL Execute(LPCTSTR lpSQL);
void ProviderError();
CHmbAdoDB()
{
}
virtual ~CHmbAdoDB()
{
}
};
class CHmbAdoDBRs : public CObject
{
public:
_RecordsetPtr m_Rs;
public:
CHmbAdoDBRs();
virtual ~CHmbAdoDBRs();
BOOL Open( CHmbAdoDB *pDB, LPCSTR szSource,long option=-1);
void Close();
void GetRs(_variant_t x,_bstr_t &ret);
void GetRs(_variant_t x,CString &ret);
BOOL IsEOF();
BOOL IsOpen();
BOOL MoveNext();
BOOL MovePrev();
BOOL MoveFirst();
BOOL MoveLast();
};
#endif // !defined(AFX_RfidAdoDB_H__7C539954_1C62_47B6_AB6E_1A5BB73A67E5__INCLUDED_) truct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
long mSqlCode;
BOOL CHmbAdoDB::Open(LPCSTR lpszConnect)
{
try
{
CREATEiNSTANCE(m_DbConn,Connection);
m_DbConn-> Open(lpszConnect, " ", " ", adModeUnknown );
}
catch( _com_error &e)
{
return FALSE;
}
catch(...)
{
return FALSE;
}
return TRUE;
}
void CHmbAdoDB::Close()
{
if( IsOpen() )
{
m_DbConn-> Close();
}
}
long CHmbAdoDB::BeginTrans()
{
return m_DbConn-> BeginTrans();
}
void CHmbAdoDB::CommitTrans()
{
m_DbConn-> CommitTrans();
}
void CHmbAdoDB::RollbackTrans()
{
m_DbConn-> RollbackTrans();
}
void CHmbAdoDB::Cancel()
{
m_DbConn-> Cancel();
}
BOOL CHmbAdoDB::IsOpen()
{
return ( (m_DbConn-> GetState() != 0) ? TRUE : FALSE );
}
BOOL CHmbAdoDB::Execute(LPCTSTR lpSQL)
{
if (!IsOpen())
{
AfxMessageBox( "Network error, Database do not open. ");
return FALSE;
}
CString strSQL(lpSQL);
strSQL.TrimLeft();
strSQL.TrimRight();
try
{
m_DbConn-> Execute(_bstr_t(strSQL), NULL, adExecuteNoRecords);
}
catch( _com_error &e)
{
return FALSE;
}
catch(...)
{
return FALSE;
}
return TRUE;
}
void CHmbAdoDB::ProviderError()
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection 's Error collection.
ErrorPtr pErr = NULL;
if( (m_DbConn-> Errors-> Count) > 0)
{
long nCount = m_DbConn-> Errors-> Count;
// Collection ranges from 0 to nCount -1.
for(long i = 0; i < nCount; i++)
{
pErr = m_DbConn-> Errors-> GetItem(i);
mSqlCode = pErr-> NativeError;
m_ErrMsg.Format( "SQLCODE : %ld\t%s ",mSqlCode, LPCTSTR(pErr-> Description));
m_SQLState.Format( "%s ",(char*)pErr-> SQLState);
printf( "%s // %s\n ",m_SQLState,m_ErrMsg);
}
}
m_DbConn-> Errors-> Clear();
}
CHmbAdoDBRs::CHmbAdoDBRs( )
{
}
CHmbAdoDBRs::~CHmbAdoDBRs()
{
}
BOOL CHmbAdoDBRs::Open( CHmbAdoDB *pDB, LPCSTR szSource,long option )
{
CString strSQL;
strSQL = CString(szSource);
strSQL.TrimLeft();
strSQL.TrimRight();
_variant_t vRecsAffected(0L);
// CREATEiNSTANCE( m_Rs,Recordset) ;
// m_Rs-> PutRefActiveConnection( pDB-> m_DbConn );
try
{
m_Rs = pDB-> m_DbConn-> Execute(_bstr_t(strSQL),
&vRecsAffected,
adOptionUnspecified);
m_Rs-> AddRef();
// m_Rs-> Open(szSource, vtMissing, adOpenKeyset, adLockBatchOptimistic, adOptionUnspecified);
// m_Rs-> Open(szSource, vtMissing, adOpenKeyset, adLockReadOnly, option);
// m_Rs-> Open(szSource,pDB-> m_DbConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic, adCmdText);
}
catch( _com_error &e)
{
//ErrorMessage();
m_Rs-> Close();
m_Rs-> Release();
return FALSE;
}
catch(...)
{
m_Rs-> Close();
m_Rs-> Release();
return FALSE;
}
return TRUE;
}
void CHmbAdoDBRs::Close()
{
m_Rs-> Close();
m_Rs-> Release();
}
void CHmbAdoDBRs::GetRs(_variant_t x,_bstr_t &ret)
{
ret = (m_Rs-> Fields-> Item[x]-> Value);
}
void CHmbAdoDBRs::GetRs(_variant_t x,CString &ret)
{
_bstr_t retVal;
try{
retVal = (m_Rs-> Fields-> Item[x]-> Value);
}
catch(...){
ret = " ";
return;
}
ret = CString((char*) retVal);
}
BOOL CHmbAdoDBRs::IsEOF()
{
return m_Rs-> adoEOF;
}
BOOL CHmbAdoDBRs::IsOpen()
{
return ( (m_Rs-> GetState() != 0) ? TRUE : FALSE );
}
BOOL CHmbAdoDBRs::MoveNext() { return (FAILED(m_Rs-> MoveNext()) ? FALSE : TRUE ); }
BOOL CHmbAdoDBRs::MovePrev() { return (FAILED(m_Rs-> MovePrevious()) ? FALSE : TRUE ); }
BOOL CHmbAdoDBRs::MoveFirst() { return (FAILED(m_Rs-> MoveFirst()) ? FALSE : TRUE ) ; }
BOOL CHmbAdoDBRs::MoveLast() { return (FAILED(m_Rs-> MoveLast()) ? FALSE : TRUE ) ; }
以上為一個ADO的封裝類.
c語言如何連接access資料庫
現在一般是用ADO的方法.