虚心求教:(给100分啊)
我有一定的vc基础,很想学VC结合access数据库编程,请老大帮忙推荐一本VC结合access数据库编程最经典的教程,最好有下载的网址,万分感谢!!!

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc.asp?id=496
    http://www.vckbase.com/document/viewdoc.asp?id=431
    http://www.vckbase.com/article/mfc_database/0133111033.htm
      

  2.   

    http://www.vckbase.com/document/listdoc.asp?mclsid=11&sclsid=1101
    http://www.vckbase.com/document/viewdoc/?id=438
      

  3.   

    就是CSDN的文档中心就有不少啊!
      

  4.   

    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
      

  5.   

    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
      

  6.   

    zhang_zhibin(阿笨猫),你说的“学数据库不建议用VC”,我想知道你的理由,谢谢!!!
      

  7.   

    呵呵!vc的数据库在某些方面确实不怎么样!vb就比vc的数据库功能好!如果你只想学数据库的东西!确实如此!
      

  8.   

    学习一下ADO就可以了阿,VC++ +ADO +Access
    找个例子就行了,很方便的
      

  9.   

    ado啊,dao啊,搞的恩头大,学好一个就行了,最好别什么都用。数据库最好别用vc做,用vb或者delphi做好外调吧,真的觉得得不偿失
      

  10.   

    学会ADO就可以了,无论始vb vc还是dephil都是通用得!!
    vc作ado有什么不好,挺直观得,效率还可以,
    若要追求全面和高速,还得用vc
      

  11.   

    tangshiping(苇舞)你好,我vb还比较熟一点,现在刚转学vc,你说的"用vb或者delphi做好外调吧",能不能告诉我一下:在vc中怎样将vb的数据库外调啊?能不能告诉我具体的操作步骤啊???
      

  12.   

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

  13.   

    同意 laiyiling(最熟悉的陌生人) 所言
      

  14.   

    <<vc技术内幕》上面就将了,还有例子呢