當前位置:首頁 » 數據倉庫 » c連接access資料庫代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c連接access資料庫代碼

發布時間: 2023-06-01 16:18:38

c語言如何連接Access資料庫

看視頻上是連接Mysql資料庫,MySQL安裝後配置比較麻煩,所以我試著用老師給的模板連接Access資料庫,Access是比較方便使用的 只要裝了office幾乎都有. 首先在網路搜索odbc 連接字元串 找到的是asp連接Access的方法,但是ODBC是通用的,所以直接拿過來也能用. 將 SQLCHAR ConnStrIn[MAXBUFLEN] = 「DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=test;CharSet=gbk;」; 部分改成 SQLCHAR ConnStrIn[MAXBUFLEN] = 「Driver={Microsoft Access Driver (*.mdb)};Dbq=//mydatabase.mdb;Uid=Admin;Pwd=;CharSet=gbk;」; Dbq指的是你的資料庫所在路勁 當然之前你應該在c:/下新建一個資料庫名為mydatabase.mdb,而且如果後面的SQL操作語句是老師寫的 result = SQLPrepare(hstmt,(SQLCHAR*)「insert into T_Person(FAge,FName) values(20,'kider')」,SQL_NTS); 那麼你也要在之前建立好一個表T_Person,和表中的兩個欄位FAge,FName.否則會出錯. 怎麼樣,已經成功鏈接到Access了吧,接下來你就可以發揚廣大了,做個管理系統之類的東東.!

㈡ c語言連接access

如果是純昌野C語鏈辯言的話需要引用頭文件。
引用iostream.h以及msado15.dll方可進行棚迅缺連接ACCESS資料庫的操作。

代碼量比較大,這里貼不出來。需要的話可以聯系我。

㈢ 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資料庫

使用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或C++語言連接ACCESS資料庫代碼是什麼

#include<stdio.h>
#include<string.h>
typedef struct{
char name[20];
int number;
int grade;
int class;
float mark[10];
float average;
}T;
void show(T *student,int *tp,int n) /* 把成績顯示在屏幕上 */
{
int i,j;
char a[3]=" ";
printf("***********************************************************\n");
printf(" name number grade class average order\n");
for(i=0;i<n;i++)
{
printf("-----------------------------------------------------------\n");
printf("%d:\n",i+1);
printf(" %s %d %d %d %f %d\n",student[tp[i]].name,student[tp[i]].number,student[tp[i]].grade,student[tp[i]].class,student[tp[i]].average,tp[i]+1);
printf("mark:");
for(j=0;j<2;j++)
printf("%s%d:%f",a,j+1,student[tp[i]].mark[j]);
printf("\n");
}
printf("***********************************************************\n");
printf("\n\n\n");
}
void writefile(T *student,int n) /* 把成績存在磁碟上 */
{
FILE *fp;
int i,j;
if((fp=fopen("d:\\kanwei.txt","w+"))==NULL)
{
printf("can't open file");
exit(0);
}
for(i=0;i<=n;i++)
{
fprintf(fp,"%s %d %d %d ",student[i].name,student[i].number,student[i].grade,student[i].class);
for(j=0;j<2;j++)
fprintf(fp,"%f ",student[i].mark[j]);
fprintf(fp,"%f\n",student[i].average);
}
fclose(fp);
}
void students(T *student,T *temp,int m,int n,int k) /* 實現兩個結構體的拷貝 */
{
int i;
if(k==0)
{
strcpy(student[n].name,temp[m].name);
student[n].number=temp[m].number;
student[n].grade=temp[m].grade;
student[n].class=temp[m].class;
for(i=0;i<2;i++)
student[n].mark[i]=temp[m].mark[i];
student[n].average=temp[m].average;
}
else if(k==1)
{
strcpy(temp[m].name,student[n].name);
temp[m].number=student[n].number;
temp[m].grade=student[n].grade;
temp[m].class=student[n].class;
for(i=0;i<2;i++)
temp[m].mark[i]=student[n].mark[i];
temp[m].average=student[n].average;
}
}
void addfile(T *student,int n) /* 加入新學生到文件 */
{
T temp[2];
int i,j=1;
float ave=0.0;
printf("Please input the student:\n");
printf(" name number grade class mark1 mark2\n");
printf("****************************************************\n");
scanf("%s",temp[0].name);
scanf("%d",&temp[0].number);
scanf("%d",&temp[0].grade);
scanf("%d",&temp[0].class);
for(i=0;i<2;i++)
{
scanf("%f",&temp[0].mark[i]);
ave=ave+temp[0].mark[i];
}
temp[0].average=ave=ave/2;
i=0;
while(ave<=student[i].average&&i<n)
i++;
students(student,temp,j%2,i,1); /* temp[j/2]=student[i]; */
students(student,temp,(j+1)%2,i,0); /* student[i]=stu; */
for(;i<n;i++)
{
j++;
students(student,temp,j%2,i+1,1); /* temp[(i+2)/2]=student[i+1]; */
students(student,temp,(j+1)%2,i+1,0); /* student[i+1]=temp[(i+1)/2]; */
}
writefile(student,i);
}
void showall(T *student,int n) /* 顯示文件中所有的學生 */
{
int i;
int a[30];
for(i=0;i<n;i++)
a[i]=i;
show(student,a,n);
}
int find(T *student,int n,int *tp) /* 在文件中查詢學生可以多行查詢 */
{
int k,im=0,i,m,num,gra,clas;
char na[20];
float ord;
printf("*******************************\n");
printf(" name n&g&c ave order\n");
printf(" 1 2 3 4 \n");
printf("*******************************\n");
scanf("%d",&k);
switch(k)
{
case 1:
scanf("%s",&na);
for(i=0;i<n;i++)
{
if(strcmp(student[i].name,na)==0)
{
tp[im++]=i;
}
}
break;
case 2:
scanf("%d%d%d",&num,&gra,&clas);
for(i=0;i<n;i++)
{
if(student[i].number==num&&student[i].grade==gra&&student[i].class==clas)
{
tp[im++]=i;
}
}
break;
case 3:
scanf("%f",&ord);
for(i=0;i<n;i++)
{
if(ord==student[i].average)
{
tp[im++]=i;
}
}
break;
case 4:
scanf("%d",&m);
if(m<=n)
{
tp[im++]=m-1;
}
break;
case 5:
break;
default:
printf("error operate!\n");
exit(0);
}
if(im>=1)
show(student,tp,im);
if(im==0&&k<5&&k>=1)
printf("cant find!\n");
return(im);
}
dele(T *student,int n,int *tp) /* 對某個學生進行刪除 */
{
int j;
printf("choose the student:\n");
j=find(student,n,tp);
if(j>=1)
{
if(j>1)
{
printf("Which one do you want to choose?\n");
scanf("%d",&j);
j=tp[j-1];
}
else
j=tp[0];
for(;j<n-1;j++)
students(student,student,j+1,j,0);
writefile(student,j-1);
}
}
void modify(T *student,int n,int *tp) /* 對某個學生進行修改 */
{
dele(student,n,tp);
addfile(student,n-1);
}
void readfile(int m) /* 讀取文件中的數據,程序的基礎 */
{
FILE *fp;
T student[30];
float mark[10],ave;
int i=0,j,tp[20];
if((fp=fopen("d:\\kanwei.txt","a+t"))==NULL)
{
printf("can't open file");
exit(0);
}
while(fscanf(fp,"%s%d%d%d",student[i].name,&student[i].number,&student[i].grade,&student[i].class)!=EOF)
{

for(j=0;j<2;j++)
{
fscanf(fp,"%f",&mark[j]);
student[i].mark[j]=mark[j];
}
fscanf(fp,"%f",&ave);
student[i].average=ave;
i++;
}
fclose(fp);
switch(m)
{
case 1:
find(student,i,tp);
break;
case 2:
addfile(student,i);
break;
case 3:
dele(student,i,tp);
break;
case 4:
modify(student,i,tp);
break;
case 5:
showall(student,i);
break;
default:
exit(0);
}
}
main() /* 主程序 */
{
int i=1;
while(i)
{
printf(" Choose the operate:\n");
printf("******************************************************\n");
printf(" find add delete modify showall exit\n");
printf(" 1 2 3 4 5 0\n");
printf("******************************************************\n");
scanf("%d",&i);
readfile(i);
}
}
(這是一個關於成績系統的,下面的可以參照,我也不知道是做什麼的。)

用ODBC吧,不過還是要用到MFC..知道創建數據源嗎? 首先創建一個名為rsgl(舉例而已,自己取個)的數據源連接資料庫,然後寫如下代碼通過數據源訪問資料庫:

C/C++ code

#include "afxdb.h"

//---------------------------------------------------------------
// Create and open a database object;
// do not load the cursor library
CDatabase db;
//db.OpenEx( NULL, CDatabase::forceOdbcDialog );
db.OpenEx( "DSN=[color=#FF0000]rsgl[/color];UID=;PWD=", CDatabase::noOdbcDialog );

// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs( &db );
rs.Open( CRecordset::forwardOnly,
_T( "SELECT * FROM system_table" ) );

// Create a CDBVariant object to
// store field data
CDBVariant varValue;

// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );
// do something with varValue
AfxMessageBox(*varValue.m_pstring);
}
rs.MoveNext( );
}

rs.Close( );
db.Close( );

(不知道有沒有用,我其他地方找的。)

㈥ C#winform程序連接ACCESS資料庫字元串.

1.採用獨占方式進行連接:
"Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\App1\你的資料庫名.mdb; Exclusive=1; Uid=你的用戶名; Pwd=你的密碼;"
MS ACCESS OLEDB & OleDbConnection (.NET下的OleDb介面)進行鏈接
2.普通方式(最常用)連接ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb; User Id=admin; Password="
3.使用工作組方式(系統資料庫)連接ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb; Jet OLEDB:System Database=c:\App1\你的系統資料庫名.mdw"
4.連接到帶有密碼的ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb; Jet OLEDB:Database Password=你的密碼"
5.連接到處於區域網主機上的ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\Server_Name\Share_Name\Share_Path\你的資料庫名.mdb"
6.連接到處於遠程伺服器上的ACCESS資料庫:
"Provider=MS Remote; Remote Server=http://遠程伺服器IP; Remote Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb"
MS ACCESS ODBC開放式介面連接字元串
7.標准鏈接:
"Driver= {MicrosoftAccessDriver(*.mdb)};DBQ=C:\App1\你的資料庫名.mdb;Uid=你的用戶名;Pwd=你的密碼;"
如果ACCESS資料庫未設置用戶名和密碼,請留空。下同。
8.WorkGroup方式(工作組方式)連接:
"Driver={Microsoft Access Driver (*.mdb)}; Dbq=C:\App1\你的資料庫名.mdb; SystemDB=C:\App1\你的資料庫名.mdw;"
9.採用獨占方式進行連接:
"Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\App1\你的資料庫名.mdb; Exclusive=1; Uid=你的用戶名; Pwd=你的密碼;"
MS ACCESS OLEDB & OleDbConnection (.NET下的OleDb介面)進行鏈接
10.普通方式(最常用)連接ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb; User Id=admin; Password="
11.使用工作組方式(系統資料庫)連接ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb; Jet OLEDB:System Database=c:\App1\你的系統資料庫名.mdw"
12.連接到帶有密碼的ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb; Jet OLEDB:Database Password=你的密碼"
13.連接到處於區域網主機上的ACCESS資料庫:
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\Server_Name\Share_Name\Share_Path\你的資料庫名.mdb"
14.連接到處於遠程伺服器上的ACCESS資料庫:
"Provider=MS Remote; Remote Server=http://遠程伺服器IP; Remote Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\你的資料庫名.mdb"

㈦ 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();
}