mfc資料庫
A. 關於資料庫與Mfc的鏈接
資料庫編程的思路都是一致的:打開資料庫連接-》執行sql語句-》獲得查詢結果-》關閉資料庫連接,不同的資料庫訪問技術有不同的要求,比如用C API詰問MySql資料庫的時候還得釋放查詢結果集。
ODBC訪問資料庫得配置數據源
配置ODBC數據源:打開控制面板下的「數據源」,彈出「ODBC數據源管理器」,選擇DSN選項卡-》添加->你選擇你的SQL Server選項,單擊完成。如圖然後你再按照向導提示添加。
代碼中用ODBC訪問資料庫你得加上afxdb.h頭文件,
用CDataBase 類連接資料庫、CRecordSet類查詢記錄。
現在在VC訪問資料庫常用的是ADO訪問,你可以找一下我前面的回答有ADO訪問資料庫的步驟。
CDataBase m_cODBCDb;
用CDataBase類的OpenEx()函數打開資料庫連接。連接字元串你自己構造一下。
定義一個與上面資料庫相關的查詢對象
CRecordSet m_cODBCRec(&m_cODBCDb);
用這個查詢對象的open方法就可以執行SQL語句與資料庫交互了;
現在用VC、MFC訪問資料庫常用的技術是ADO,學學這個吧。難點、但很實用!
導入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為你連接資料庫的信息,你應該按照你的要求打開資料庫
然後你用打開的那個連接進行操作資料庫。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作資料庫的SQL語句。在這個SQL語句里你可以創建表、更新表等。
用ADO訪問的時候要求初始他COM庫和釋放COM對象
// 初始化COM環境(庫)
::CoInitialize(NULL);
//釋放COM對象
::CoUninitialize();
B. 用MFC如何創建和刪除資料庫的表
void SearchDepartment::OnBnClickedDelete()
{
// TODO: 在此添加控制項通知處理程序代碼
if(m_list.GetItemCount() == 0)
{
AfxMessageBox(_T("還沒有記錄"));
return;
}
else if(m_list.GetSelectionMark() < 0 || m_list.GetSelectionMark() > m_list.GetItemCount())
{
AfxMessageBox(_T("請先選擇記錄"));
return;
} CString temp;
tempStr2 = m_list.GetItemText(m_list.GetSelectionMark(),1);
m_list.DeleteItem(m_list.GetSelectionMark()); m_db.Open(_T("peopleDSN"));
m_rs2.m_pDatabase = &m_db;
m_rs2.Open();
m_rs2.MoveFirst();
while(!m_rs2.IsEOF()){
if(m_rs2.m_dname == tempStr2){
temp = m_rs2.m_dID;
m_rs2.Close();
m_db.Close();
break;
}
else
m_rs2.MoveNext();
} m_db.Open(_T("peopleDSN"));
m_rs.m_pDatabase = &m_db;
m_rs.Open();
m_rs.MoveFirst();
while(!m_rs.IsEOF()){
if(m_rs.m_dID == temp){
m_rs.Delete();
}
else
m_rs.MoveNext();
}
m_rs.Close();
m_db.Close(); m_db.Open(_T("peopleDSN"));
m_rs2.m_pDatabase = &m_db;
m_rs2.Open();
m_rs2.MoveFirst();
while(!m_rs2.IsEOF()){
if(m_rs2.m_dname == tempStr2){
m_rs2.Delete();
m_rs2.MoveFirst();
m_rs2.Close();
m_db.Close();
return;
}
else
m_rs2.MoveNext();
}
}
C. MFC中怎麼用SQL更新資料庫
初始化引入相關的庫+Connection對象的創建和資料庫的連接
#import "c:\\Program Files\\Common Files\\System\\ADO\\msado15.dll" rename_namespace("ADOCG") rename("EOF","adoEOF") //rename("BOF","adoBOF")
using namespace ADOCG;
//... ...
_ConnectionPtr m_pConnection;
//... ...
if(!AfxOleInit())
{
AfxMessageBox("初始化OLE DLL失敗!");
Return FALSE;
}
m_pConnection.CreateInstance("ADODB.Connection");
try
{
m_pConnection->ConnectionTimeout = 3;
//連接ACCESS2000
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/Attendence/AttendenceDB.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(e.Description() + _T("\n資料庫連接失敗"));
}
更新記錄:
strSql.Format(_T("UPDATE WorkUser SET MemberName = '%s', MemberPosition = '%s' WHERE MemberID = '%s' "),m_StringName, m_StringPosition, m_StringNumber);
try
{
(theApp.m_pConnection)->Execute(_bstr_t(strSql), 0, adCmdText);
}
catch(_com_error e)
{
MessageBox(e.Description());
return;
}
D. MFC連接資料庫的方法
你選擇了否也可以建立數據。
推薦一篇文章來入門:
http://www.vckbase.com/document/viewdoc/?id=1557
這里是目錄,裡面應該有你要找的:
http://www.vckbase.com/document/finddoc.asp?mclsid=&sclsid=&page=1&keyword=ado
E. 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;
}
F. MFC怎麼與資料庫連接,求詳細步驟!!!!!急急急!!!!!!
比如在你的工程目錄中建一個
dbf\vir.mdb
//access資料庫,然後你需要做以下操作:
1.在stadafx.h裡面添加#include
//新加入頭文件,用於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();
//將記錄移到下一行
}
}
本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.
G. 關於編程和資料庫!MFC(C++)
1、在VC上是可以不用資料庫做出一個信息管理系統的,比如說從文件讀寫或者定義數組存儲,在VC上可以連接資料庫,只要提供相應的資料庫驅動。
2、你說的資料庫軟體是專門用來放數據的,如果系統數據不多,可以用MFC獨立實現,多了就得用資料庫來存儲了。
3、不同的資料庫連接有不同的封裝體系,具體有ADO/ADO.net、JDBC、ODBC和OLE等,MFC是有對資料庫操作進行封裝。
4、如果開發沒有用到資料庫,當然不用了,如果有的話,需要提供數據源。
總結:
資料庫開發技術主要有:
1.ODBC API;
2.MFC ODBC類;
3.MFC DAO類;(數據訪問對象)
4.MFC的OLE/DB;
5.ActiveX數據對象(ADO)
6.JDBC
H. 如何使用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);
I. 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(); //將記錄移到下一行
}
}
本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.
J. MFC資料庫和STL的區別
兩個根本不是一個類型的東西啊,雖然都是庫。
MFC是微軟的基本類庫,封裝了非常多的底層API,包括窗口操作、文件操作、SOCKET等以及一些輔助類例如CString和一些模板類CList、CArray等。
同時提供了DOC/VIEW的程序框架,並構造了消息的處理線路。
以下內容來自網路:
而STL是Standard Template Library,標准模板庫。
從根本上說,STL是一些「容器」的集合,這些「容器」有list,vector,set,map等,STL也是演算法和其他一些組件的集合。這里的「容器」和演算法的集合指的是世界上很多聰明人很多年的傑作。STL的目的是標准化組件,這樣就不用重新開發,可以使用現成的組件。STL現在是C++的一部分,因此不用額外安裝什麼。
STL被內建在你的編譯系統之內。
在C++標准中,STL被組織為下面的13個頭文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。