當前位置:首頁 » 操作系統 » mfc資料庫操作

mfc資料庫操作

發布時間: 2023-01-24 23:10:38

㈠ MFC中如何連接access資料庫

比如在你的工程目錄中建一個 dbfvir.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(); //將記錄移到下一行

}

}

本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.

㈡ MFC中,如何連接sqlite3的資料庫,並對此資料庫操作

這個比較容易。按照網上提供的方法把sqlite編譯成dll和lib
將dll和lib在項目的輸入中添加好
在要操作的文件中#include 「sqlite3.h」就可以了。我做過這方面的項目,雖然是嵌入式wince使用,但是基本和windows相同。
下面是詳細的用法:
一. 編譯動態鏈接庫庫文件
1). 打開VC新建一個「Win32 Dynamic-Link Library」工程,命名為:sqlite3(也可以是其他的,注意這個就是編譯後的dll和lib的名字)
2). 在接下來的對話框中選擇"An empty DLL project",點 FINISH->OK
3). 將源碼中所有的 *.c *.h *.def 復制到工程文件夾
4). 在工程的Source File中添加你下載到的SQLite源文件中所有*.c文件,
注意這里不要添加shell.c和tclsqlite.c這兩個文件。*注意需要將tclsqlite.c和shell.c、icu.c去掉。其中tclsqlite.c用於生成基於tcl的api,如果要編譯,這需要另外下載tcl.h;shell.c用於生成命令行模式的sqlite.exe,如果是靜態庫形式則可以選擇; icu是internationalcomponents forunicode,如果需要則需另外下載相關頭文件。

5). 將 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中
6). 在Header File中添加你下載到的SQLite源文件中所有*.h文件,
7). 開始編譯,Build(F7)一下
也許到這里會遇到一個錯誤:

e:\zieckey\sqlite\sqlite3\sqlite3ext.h(22) : fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory

經檢查發現,源碼中包含sqlite3.h都是以 #include <sqlite3.h> 方式包含的,
這就是說編譯器在系統默認路徑中搜索,這樣當然搜索不到 sqlite3.h 這個頭文件啦,
這時可以改為 #include "sqlite3.h" ,讓編譯器在工程路徑中搜索,
但是如果還有其他地方也是以 #include <sqlite3.h> 方式包含的,那麼改源碼就顯得有點麻煩,
好了,我們可以這樣,在菜單欄依次選擇:Tools->Options...->Directeries
在下面的Directeries選項中輸入你的 sqlite3.h 的路徑,這里也就是你的工程目錄.
添加好後,我們在編譯一下就好了,
最後我們在工程目錄的 Debug 目錄生成了下面兩個重要文件:
動態鏈接庫文件 sqlite3.dll 和引入庫文件 sqlite3.lib

二. 使用動態鏈接庫

下面我們來編寫個程序來測試下我們的動態鏈接庫.

在VC下新建一個空的"Win32 Console Application" Win32控制台程序,工程命名為:TestSqliteOnWindows
再新建一個 test.cpp 的C++語言源程序,源代碼如下:

// name: test.cpp
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey
// data : 2006/11/28

#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_

int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;

int rc;

rc = sqlite3_open("zieckey.db", &db); //打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return (1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^ \n");

//創建一個表,如果該表存在,則不創建,並給出提示信息,存儲在 zErrMsg 中
char *sql = " CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,Time VARCHAR(12),SensorParameter REAL);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

#ifdef _DEBUG_
printf("zErrMsg = %s \n", zErrMsg);
#endif

//插入數據
sql = "INSERT INTO \"SensorData\" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

sql = "INSERT INTO \"SensorData\" VALUES(NULL , 23 , 45 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

sql = "INSERT INTO \"SensorData\" VALUES(NULL , 34 , 45 , '200605011306', 15.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

int nrow = 0, ncolumn = 0;
char **azResult; //二維數組存放結果

//查詢數據
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( "row:%d column=%d \n" , nrow , ncolumn );
printf( "\nThe result of querying is : \n" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s\n", i , azResult[i] );

//刪除數據
sql = "DELETE FROM SensorData WHERE SensorID = 1 ;" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
#ifdef _DEBUG_
printf("zErrMsg = %s \n", zErrMsg);
#endif
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
printf( "\n\n\n\nrow:%d column=%d " , nrow , ncolumn );
printf( "\nAfter deleting , the result of querying is : \n" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s\n", i , azResult[i] );

//釋放掉 azResult 的內存空間
sqlite3_free_table( azResult );

#ifdef _DEBUG_
printf("zErrMsg = %s \n", zErrMsg);
#endif

sqlite3_close(db); //關閉資料庫
return 0;
}

另外,將sqlite3.h sqlite3.lib sqlite3.dll文件復制到我們的工程目錄.
最後 Project->Settings 在Link選項卡找到Object/library moles : 在最後填入sqlite3.lib 。
如果原來就有鏈接,請使用空格分隔。
現在可以編譯了.
運行結果如下:
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:3 column=5

The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 18.9
azResult[10] = 2
azResult[11] = 23
azResult[12] = 45
azResult[13] = 200605011306
azResult[14] = 16.4
azResult[15] = 3
azResult[16] = 34
azResult[17] = 45
azResult[18] = 200605011306
azResult[19] = 15.4
zErrMsg = (null)

row:2 column=5
After deleting , the result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 2
azResult[6] = 23
azResult[7] = 45
azResult[8] = 200605011306
azResult[9] = 16.4
azResult[10] = 3
azResult[11] = 34
azResult[12] = 45
azResult[13] = 200605011306
azResult[14] = 15.4
zErrMsg = (null)
Press any key to continue
在上面的第五步
5). 將 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中
是必須的, sqlite3.def 這個文件的加入會生成 *.lib引入庫文件,這個對於*.dll文件是很重要的.否則你光有*.dll文件在程序調用的時候就不是那麼方便了,因為這樣你只能通過動態載入dll的方式調用dll庫中函數

這個程序,我們先創建一個資料庫,然後新建一個表,然後插入一些數據,
再查詢看看插入的數據是否正確,然後又刪除一些數據,刪除後我們再查詢了一下,
發現我們的刪除操作也是成功的.
這個程序簡單的調用 sqlite 的函數介面來實現對資料庫的管理,
包括創建資料庫、創建表格、插入數據、查詢數據、刪除數據等。

㈢ MFC如何用資料庫

你首先安裝Mysql,然後使用下面代碼
在MyProc類中增加MySqlConnect方法,strUSR,strPWD分別為用戶名和密碼,登陸資料庫需要
BOOL MyPorc::MySqlConnect(CString strUSR,CString strPWD)
{
unsigned short Port = 3306; //埠
CString IPAddress ="127.0.0.1"; //本地資料庫
CString UserName = strUSR;
CString Password = strPWD;

ssock=(MYSQL *)malloc(sizeof(MYSQL));
mysql_init(ssock);
if(ssock == NULL)
{
AfxMessageBox("連接失敗,請稍後在試! ");
return FALSE;
}

ssock = mysql_real_connect(ssock, IPAddress, UserName, Password, NULL, Port, NULL, 0);
if(!ssock)
{
unsigned int mtint = mysql_errno(ssock);
AfxMessageBox("登陸失敗! ");
return FALSE;
}
return TRUE;
}

㈣ MFC通過ADO操作Access資料庫

vc 可以訪問很多資料庫,比如Access、SQL servel、MYSql、Orcal等資料庫系統。也有很多資料庫訪問技術,比如ADO、ODBC、OLE DB等。每一種資料庫系統都提供了一系列的API,在程序中可以通過編碼的形式調用相應的API進而對資料庫操作。
你學一個vc++訪問ADO資料庫吧,難點,但是很實用!
1、導入ADO庫
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用導入的動態庫的指針操作資料庫.
打開資料庫連接
_ConnectionPtr m_pConn; // 資料庫連接指針
// 創建Conneciton對象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn為你連接資料庫的信息,你應該按照你的要求打開資料庫,他裡麵包含了你的Access資料庫的路徑、名稱等待信息,,,是一個通用的字元串。

然後你用打開的那個連接進行操作資料庫。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作資料庫的SQL語句。在這個SQL語句里你可以創建表、更新表等。

用ADO訪問的時候要求初始他COM庫和釋放COM對象
// 初始化COM環境(庫)
::CoInitialize(NULL);
//釋放COM對象
::CoUninitialize();

㈤ mfc中連接access資料庫的詳細步驟都是什麼

比如在你的工程目錄中建一個 dbf\vir.mdb //Access資料庫,然後你需要做以下操作:x0dx0a1.在StadAfx.h裡面添加#include //新加入頭文件,用於CDatabase類。x0dx0a2.在StadAfx.h最後的#endif上添加#import "msado15.dll" no_namespace rename("EOF","rsEOF")x0dx0a這時,你要把msado15.dll拷到與dbf同級的目錄,也就是工程目錄里,當然你可以該路徑x0dx0a3.在你自己的工程里,比如MyProc是你建的工程,添加代碼x0dx0aCMyPorcApp::CMyProcApp(){x0dx0aCoInitialize(NULL);x0dx0aSQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",\x0dx0a "DSN=MyImage;DBQ=dbf\\vir.mdb;DEFAULTDIR=dbf"); //注冊本地資料庫數據源x0dx0am_db.OpenEx("DSN=MyImage;;",CDatabase::noOdbcDialog);//MyImage是數據源名稱x0dx0a}x0dx0a4.在前面的函數體之前創建全局變數CDatabase m_db; CRecordset m_rec(&m_db);x0dx0a5.使用資料庫{x0dx0a CString strSQL="select * from virdb"; x0dx0a BSTR bstrSQL=strSQL.AllocSysString();x0dx0a m_rec.Open(CRecordset::dynaset,strSQL);x0dx0a while(!m_rec.IsEOF()) x0dx0a{x0dx0a // 使用資料庫的代碼,讀出來的數據都是字元串型的x0dx0a CString MyVirable;x0dx0a m_rec.GetFieldValue("欄位名",MyVirable); //將某個欄位的當前行的值讀到MyVirabl中x0dx0a // ......x0dx0a m_rec.MoveNext(); //將記錄移到下一行x0dx0a }x0dx0a}x0dx0ax0dx0a本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.

㈥ 如何使用MFC進行資料庫查詢

問題很簡單我給你看看一段代碼你就知道了
try
{
CDatabase db;
db.Open(NULL,false,false,"ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};DBQ=手機進銷存管理資料庫.mdb");
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly,"select * from Input;",CRecordset::readOnly);
CString s;
rs.GetFieldValue("廠商",s);
MessageBox(s);
}
catch (CDBException e)
{
MessageBox(e.m_strError);

熱點內容
黎明我的世界伺服器 發布:2024-05-19 17:17:34 瀏覽:538
雷神g50如何設置安卓原生模式 發布:2024-05-19 16:50:04 瀏覽:120
c語言小數四捨五入 發布:2024-05-19 16:23:28 瀏覽:525
資料庫被注入攻擊 發布:2024-05-19 16:21:31 瀏覽:835
微信忘記密碼從哪裡看 發布:2024-05-19 16:06:37 瀏覽:33
寶馬x4貸款買哪個配置好 發布:2024-05-19 15:56:03 瀏覽:23
微控pid演算法 發布:2024-05-19 15:46:31 瀏覽:136
雲盤視頻解壓密碼 發布:2024-05-19 15:23:17 瀏覽:848
和平精英怎麼改地區位置安卓 發布:2024-05-19 15:19:05 瀏覽:286
酒店的路由器如何配置 發布:2024-05-19 15:10:44 瀏覽:502