虚心求教:(给100分啊) 虚心求教:(给100分啊)我有一定的vc基础,很想学VC结合access数据库编程,请老大帮忙推荐一本VC结合access数据库编程最经典的教程,最好有下载的网址,万分感谢!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.vckbase.com/document/viewdoc.asp?id=496http://www.vckbase.com/document/viewdoc.asp?id=431http://www.vckbase.com/article/mfc_database/0133111033.htm http://www.vckbase.com/document/listdoc.asp?mclsid=11&sclsid=1101http://www.vckbase.com/document/viewdoc/?id=438 就是CSDN的文档中心就有不少啊! http://dev.csdn.net/develop/article/24/24269.shtmhttp://dev.csdn.net/develop/article/16/16163.shtmhttp://dev.csdn.net/develop/article/25/25857.shtm http://dev.csdn.net/develop/article/27/27337.shtmhttp://dev.csdn.net/develop/article/0/330.shtmhttp://www.pcvc.net/category/content.asp?sendid=226 zhang_zhibin(阿笨猫),你说的“学数据库不建议用VC”,我想知道你的理由,谢谢!!! 呵呵!vc的数据库在某些方面确实不怎么样!vb就比vc的数据库功能好!如果你只想学数据库的东西!确实如此! 学习一下ADO就可以了阿,VC++ +ADO +Access找个例子就行了,很方便的 ado啊,dao啊,搞的恩头大,学好一个就行了,最好别什么都用。数据库最好别用vc做,用vb或者delphi做好外调吧,真的觉得得不偿失 学会ADO就可以了,无论始vb vc还是dephil都是通用得!!vc作ado有什么不好,挺直观得,效率还可以,若要追求全面和高速,还得用vc tangshiping(苇舞)你好,我vb还比较熟一点,现在刚转学vc,你说的"用vb或者delphi做好外调吧",能不能告诉我一下:在vc中怎样将vb的数据库外调啊?能不能告诉我具体的操作步骤啊??? // DefineDlg.cpp : implementation file//#include "stdafx.h"#include "DbCom.h"#include "DefineDlg.h"#include "atlconv.h"#include "TableStructDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CDefineDlg dialogCDefineDlg::CDefineDlg(CWnd* pParent /*=NULL*/) : CDialog(CDefineDlg::IDD, pParent){ //{{AFX_DATA_INIT(CDefineDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT}void CDefineDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDefineDlg) DDX_Control(pDX, IDC_TABLENAME, m_TableName); DDX_Control(pDX, IDC_LIST, m_List); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CDefineDlg, CDialog) //{{AFX_MSG_MAP(CDefineDlg) ON_BN_CLICKED(IDC_INITDB, OnInitDb) ON_WM_SIZE() ON_WM_DESTROY() ON_CBN_SELCHANGE(IDC_TABLENAME, OnSelChangeTableName) ON_BN_CLICKED(IDC_CREATEDB, OnCreateDb) ON_BN_CLICKED(IDC_CREATETABLE, OnCreateTable) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CDefineDlg message handlersBOOL CDefineDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void CDefineDlg::OnInitDb() { // TODO: Add your control notification handler code here CFileDialog m_FileDlg(TRUE,"mdb","",OFN_OVERWRITEPROMPT,"Microsoft Access 应用程序(*.mdb)|*.mdb|所有文件(*.*)|*.*||",this); if(m_FileDlg.DoModal()==IDOK) { char* pDSN; pDSN=new char[255]; int iLen; sprintf(pDSN,"DSN=DSN_DbCom?DBQ=%s?",m_FileDlg.GetFileName()); iLen=strlen(pDSN); for(int iIndex=0;iIndex<iLen;iIndex++) { if(pDSN[iIndex]=='?') { pDSN[iIndex]='\0'; } } SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)pDSN); try { if(m_DaoDb.IsOpen()) { m_DaoDb.Close(); } m_DaoDb.Open(m_FileDlg.GetFileName()); int iTableDefCount=m_DaoDb.GetTableDefCount(); for(int kIndex=0;kIndex<iTableDefCount;kIndex++) { m_DaoDb.GetTableDefInfo(kIndex,m_DaoTableDefInfo); if(m_DaoTableDefInfo.m_lAttributes&dbSystemObject) continue; m_TableName.AddString(m_DaoTableDefInfo.m_strName); } } catch(CDaoException* e) { //AfxMessageBox(e->m_pErrorInfo->m_strDescription,MB_ICONINFORMATION); AfxMessageBox("DAO不可识别的数据库格式,转换数据库到早期ACCESS数据库版本.",MB_ICONINFORMATION); e->Delete(); } if(m_Db.IsOpen()) { m_Db.Close(); } m_Db.Open(_T("DSN_DbCom")); }}void CDefineDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: Add your message handler code here CRect m_Rect; GetClientRect(m_Rect); m_List.MoveWindow(m_Rect.left+20,m_Rect.top+50,m_Rect.right-40,m_Rect.bottom-70,TRUE); }void CDefineDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here m_Db.Close(); m_DaoDb.Close();}void CDefineDlg::OnSelChangeTableName() { // TODO: Add your control notification handler code here pIcon=new CImageList(); pIcon->Create(16,16,ILC_COLOR16,3,0); pIcon->Add(AfxGetApp()->LoadIcon(IDI_ABOUTDLL)); m_List.SetImageList(pIcon,LVSIL_SMALL); CString strSQL; CString strTableName; m_TableName.GetLBText(m_TableName.GetCurSel(),strTableName); if(!strTableName.IsEmpty()) { strSQL.Format("select * from %s",strTableName); if(m_Rs.IsOpen()) { m_Rs.Close(); } m_Rs.m_pDatabase=&m_Db; m_Rs.Open(CRecordset::forwardOnly,strSQL); CDBVariant varValue; CODBCFieldInfo varInfo; for(short kIndex=0;kIndex<m_Rs.GetODBCFieldCount();kIndex++) { m_Rs.GetODBCFieldInfo(kIndex,varInfo); m_List.InsertColumn(kIndex,varInfo.m_strName,LVCFMT_LEFT,100,kIndex); } CString strResult; while(!m_Rs.IsEOF()) { for(short iIndex=0;iIndex<m_Rs.GetODBCFieldCount();iIndex++) { strResult=""; m_Rs.GetFieldValue(iIndex,varValue); switch(varValue.m_dwType) { case DBVT_NULL: { strResult=""; break; } case DBVT_BOOL: { strResult=""; break; } case DBVT_UCHAR: { strResult=""; break; } case DBVT_SHORT: { strResult=""; break; } case DBVT_LONG: { strResult.Format("%d",varValue.m_lVal); break; } case DBVT_SINGLE: { strResult=""; break; } case DBVT_DOUBLE: { strResult=""; break; } case DBVT_DATE: { strResult=""; break; } case DBVT_STRING: { strResult=*varValue.m_pstring; break; } case DBVT_BINARY: { strResult=""; break; } default: { strResult=""; break; } } if(iIndex==0) { m_List.InsertItem(0,strResult); } else { m_List.SetItemText(0,iIndex,strResult); } } m_Rs.MoveNext(); } m_Rs.Close(); }}void CDefineDlg::OnCreateDb() { // TODO: Add your control notification handler code here CFileDialog m_FileDlg(FALSE,"mdb","",OFN_OVERWRITEPROMPT,"Microsoft Access 应用程序(*.mdb)|*.mdb|所有文件(*.*)|*.*||",this); if(m_FileDlg.DoModal()==IDOK) { try { m_DaoDb.Create(m_FileDlg.GetFileName()); m_DaoDb.Close(); } catch(CDaoException* e) { //AfxMessageBox(e->m_pErrorInfo->m_strDescription,MB_ICONINFORMATION); AfxMessageBox("DAO不可识别的数据库格式,转换数据库到早期ACCESS数据库版本.",MB_ICONINFORMATION); e->Delete(); } }}void CDefineDlg::OnCreateTable() { // TODO: Add your control notification handler code here CFileDialog m_FileDlg(TRUE,"mdb","",OFN_OVERWRITEPROMPT,"Microsoft Access 应用程序(*.mdb)|*.mdb|所有文件(*.*)|*.*||",this); if(m_FileDlg.DoModal()==IDOK) { try { m_DaoDb.Open(m_FileDlg.GetFileName()); CDaoTableDef m_DaoTableDef(&m_DaoDb); //创建表 CTableStructDlg m_Dlg; if(m_Dlg.DoModal()==IDOK) { AfxMessageBox("列结构",MB_ICONINFORMATION); char* pBuf=new char[100]; sprintf(pBuf,"列表行数:%d:",m_Dlg.m_TableColumnList.GetItemCount()); AfxMessageBox(pBuf,MB_ICONINFORMATION); for(int iIndex=0;iIndex<m_Dlg.m_TableColumnList.GetItemCount();iIndex++) { m_Dlg.m_TableColumnList.GetItemText(iIndex,0,pBuf,100); AfxMessageBox(pBuf,MB_ICONINFORMATION); } } m_DaoTableDef.Create("User"); m_DaoTableDef.CreateField("ID",dbLong,dbAutoIncrField); m_DaoTableDef.CreateField("Name",dbText,50,dbVariableField); m_DaoTableDef.CreateField("Re",dbMemo,0); m_DaoTableDef.Append(); // m_DaoDb.Close(); } catch(CDaoException* e) { //AfxMessageBox(e->m_pErrorInfo->m_strDescription,MB_ICONINFORMATION); AfxMessageBox("DAO不可识别的数据库格式,转换数据库到早期ACCESS数据库版本.",MB_ICONINFORMATION); e->Delete(); } }} 同意 laiyiling(最熟悉的陌生人) 所言 <<vc技术内幕》上面就将了,还有例子呢 跪求,用VC读取MIT-BIH中的.dat文件并显示 如何使用DirectDraw 显示图象序列? 哪位大侠帮我解决一下udp连接的问题 冬至为什么要吃饺子? 关于存储过程参数返回值的问题,高手请入 100分求一正则表达式.急.在线等. XP的拖拽问题,奇怪中!!! ADO操作dbf数据库的问题! 一个想偷懒的人,大侠勿怪:)高喊一声:谁有OICQ的本地数据库结构 请问大家要在内存中保存65536*256个对象的值,应该如何保存? 100分求DLL注册问题(在线等) 请教高手...
http://www.vckbase.com/document/viewdoc.asp?id=431
http://www.vckbase.com/article/mfc_database/0133111033.htm
http://www.vckbase.com/document/viewdoc/?id=438
找个例子就行了,很方便的
vc作ado有什么不好,挺直观得,效率还可以,
若要追求全面和高速,还得用vc
//#include "stdafx.h"
#include "DbCom.h"
#include "DefineDlg.h"
#include "atlconv.h"#include "TableStructDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CDefineDlg dialog
CDefineDlg::CDefineDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDefineDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDefineDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CDefineDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDefineDlg)
DDX_Control(pDX, IDC_TABLENAME, m_TableName);
DDX_Control(pDX, IDC_LIST, m_List);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDefineDlg, CDialog)
//{{AFX_MSG_MAP(CDefineDlg)
ON_BN_CLICKED(IDC_INITDB, OnInitDb)
ON_WM_SIZE()
ON_WM_DESTROY()
ON_CBN_SELCHANGE(IDC_TABLENAME, OnSelChangeTableName)
ON_BN_CLICKED(IDC_CREATEDB, OnCreateDb)
ON_BN_CLICKED(IDC_CREATETABLE, OnCreateTable)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CDefineDlg message handlersBOOL CDefineDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}void CDefineDlg::OnInitDb()
{
// TODO: Add your control notification handler code here
CFileDialog m_FileDlg(TRUE,"mdb","",OFN_OVERWRITEPROMPT,"Microsoft Access 应用程序(*.mdb)|*.mdb|所有文件(*.*)|*.*||",this);
if(m_FileDlg.DoModal()==IDOK)
{
char* pDSN;
pDSN=new char[255];
int iLen;
sprintf(pDSN,"DSN=DSN_DbCom?DBQ=%s?",m_FileDlg.GetFileName());
iLen=strlen(pDSN);
for(int iIndex=0;iIndex<iLen;iIndex++)
{
if(pDSN[iIndex]=='?')
{
pDSN[iIndex]='\0';
}
}
SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)pDSN);
try
{
if(m_DaoDb.IsOpen())
{
m_DaoDb.Close();
}
m_DaoDb.Open(m_FileDlg.GetFileName());
int iTableDefCount=m_DaoDb.GetTableDefCount();
for(int kIndex=0;kIndex<iTableDefCount;kIndex++)
{
m_DaoDb.GetTableDefInfo(kIndex,m_DaoTableDefInfo);
if(m_DaoTableDefInfo.m_lAttributes&dbSystemObject)
continue;
m_TableName.AddString(m_DaoTableDefInfo.m_strName);
}
}
catch(CDaoException* e)
{
//AfxMessageBox(e->m_pErrorInfo->m_strDescription,MB_ICONINFORMATION);
AfxMessageBox("DAO不可识别的数据库格式,转换数据库到早期ACCESS数据库版本.",MB_ICONINFORMATION);
e->Delete();
}
if(m_Db.IsOpen())
{
m_Db.Close();
}
m_Db.Open(_T("DSN_DbCom"));
}
}void CDefineDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect m_Rect;
GetClientRect(m_Rect);
m_List.MoveWindow(m_Rect.left+20,m_Rect.top+50,m_Rect.right-40,m_Rect.bottom-70,TRUE);
}void CDefineDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
m_Db.Close();
m_DaoDb.Close();
}void CDefineDlg::OnSelChangeTableName()
{
// TODO: Add your control notification handler code here
pIcon=new CImageList();
pIcon->Create(16,16,ILC_COLOR16,3,0);
pIcon->Add(AfxGetApp()->LoadIcon(IDI_ABOUTDLL));
m_List.SetImageList(pIcon,LVSIL_SMALL);
CString strSQL;
CString strTableName;
m_TableName.GetLBText(m_TableName.GetCurSel(),strTableName);
if(!strTableName.IsEmpty())
{
strSQL.Format("select * from %s",strTableName);
if(m_Rs.IsOpen())
{
m_Rs.Close();
}
m_Rs.m_pDatabase=&m_Db;
m_Rs.Open(CRecordset::forwardOnly,strSQL);
CDBVariant varValue;
CODBCFieldInfo varInfo;
for(short kIndex=0;kIndex<m_Rs.GetODBCFieldCount();kIndex++)
{
m_Rs.GetODBCFieldInfo(kIndex,varInfo);
m_List.InsertColumn(kIndex,varInfo.m_strName,LVCFMT_LEFT,100,kIndex);
}
CString strResult;
while(!m_Rs.IsEOF())
{
for(short iIndex=0;iIndex<m_Rs.GetODBCFieldCount();iIndex++)
{
strResult="";
m_Rs.GetFieldValue(iIndex,varValue);
switch(varValue.m_dwType)
{
case DBVT_NULL:
{
strResult="";
break;
}
case DBVT_BOOL:
{
strResult="";
break;
}
case DBVT_UCHAR:
{
strResult="";
break;
}
case DBVT_SHORT:
{
strResult="";
break;
}
case DBVT_LONG:
{
strResult.Format("%d",varValue.m_lVal);
break;
}
case DBVT_SINGLE:
{
strResult="";
break;
}
case DBVT_DOUBLE:
{
strResult="";
break;
}
case DBVT_DATE:
{
strResult="";
break;
}
case DBVT_STRING:
{
strResult=*varValue.m_pstring;
break;
}
case DBVT_BINARY:
{
strResult="";
break;
}
default:
{
strResult="";
break;
}
}
if(iIndex==0)
{
m_List.InsertItem(0,strResult);
}
else
{
m_List.SetItemText(0,iIndex,strResult);
}
}
m_Rs.MoveNext();
}
m_Rs.Close();
}
}void CDefineDlg::OnCreateDb()
{
// TODO: Add your control notification handler code here
CFileDialog m_FileDlg(FALSE,"mdb","",OFN_OVERWRITEPROMPT,"Microsoft Access 应用程序(*.mdb)|*.mdb|所有文件(*.*)|*.*||",this);
if(m_FileDlg.DoModal()==IDOK)
{
try
{
m_DaoDb.Create(m_FileDlg.GetFileName());
m_DaoDb.Close();
}
catch(CDaoException* e)
{
//AfxMessageBox(e->m_pErrorInfo->m_strDescription,MB_ICONINFORMATION);
AfxMessageBox("DAO不可识别的数据库格式,转换数据库到早期ACCESS数据库版本.",MB_ICONINFORMATION);
e->Delete();
}
}
}void CDefineDlg::OnCreateTable()
{
// TODO: Add your control notification handler code here
CFileDialog m_FileDlg(TRUE,"mdb","",OFN_OVERWRITEPROMPT,"Microsoft Access 应用程序(*.mdb)|*.mdb|所有文件(*.*)|*.*||",this);
if(m_FileDlg.DoModal()==IDOK)
{
try
{
m_DaoDb.Open(m_FileDlg.GetFileName());
CDaoTableDef m_DaoTableDef(&m_DaoDb);
//创建表
CTableStructDlg m_Dlg;
if(m_Dlg.DoModal()==IDOK)
{
AfxMessageBox("列结构",MB_ICONINFORMATION);
char* pBuf=new char[100];
sprintf(pBuf,"列表行数:%d:",m_Dlg.m_TableColumnList.GetItemCount());
AfxMessageBox(pBuf,MB_ICONINFORMATION);
for(int iIndex=0;iIndex<m_Dlg.m_TableColumnList.GetItemCount();iIndex++)
{
m_Dlg.m_TableColumnList.GetItemText(iIndex,0,pBuf,100);
AfxMessageBox(pBuf,MB_ICONINFORMATION);
}
}
m_DaoTableDef.Create("User");
m_DaoTableDef.CreateField("ID",dbLong,dbAutoIncrField);
m_DaoTableDef.CreateField("Name",dbText,50,dbVariableField);
m_DaoTableDef.CreateField("Re",dbMemo,0);
m_DaoTableDef.Append();
//
m_DaoDb.Close();
}
catch(CDaoException* e)
{
//AfxMessageBox(e->m_pErrorInfo->m_strDescription,MB_ICONINFORMATION);
AfxMessageBox("DAO不可识别的数据库格式,转换数据库到早期ACCESS数据库版本.",MB_ICONINFORMATION);
e->Delete();
}
}
}