在一个基于对话框的程序中,如何连接Dao的数据库,具体的步骤,谢谢

解决方案 »

  1.   

    1. 首先,应确保包含进了afxdao.h头文件,可以在StdAfx.h文件中包含它,如下:
    #include <afxdao.h>          //加入DAO数据库支持
    2. 声明DAO库及其记录集变量,可在你的实现文件中加入下面代码: 
    CDaoDatabase db; //数据库
    CDaoRecordset RecSet(&db); //记录集
    3. 接着,先让我们来实现它的创建及写入操作void CRWAccessDlg::OnWriteAccess() 
    {
    //获取主程序所在路径,存在sPath中
    CString sPath;
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
    sPath.ReleaseBuffer ();
    int nPos;
    nPos=sPath.ReverseFind (''\\'');
    sPath=sPath.Left (nPos);//默认创建数据名:Demo.mdb,内部表名:DemoTable,表内有二个字段:姓名、年龄
    CString lpszFile = sPath + "\\Demo.mdb";

    CFileFind  fFind;
    BOOL bSuccess;
    bSuccess=fFind.FindFile(lpszFile); fFind.Close ();
        //是否已有创建好的Demo.mdb文件,没有则创建它
    if(!bSuccess)
    {
    db.Create(lpszFile); CString SqlCmd = "CREATE TABLE DemoTable(Name VARCHAR(20),Age VARCHAR(3));";
    db.Execute(SqlCmd);

    //打开已创建的数据表
    RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,
    "SELECT * FROM DemoTable", 0);
    //加入第一个记录,用SQL语句
    db.Execute("INSERT INTO DemoTable (Name,Age) VALUES (''徐景周'',26)");

    //加入第二个记录,用DAO涵数
    RecSet.AddNew();
    RecSet.SetFieldValue("Name","徐志慧");
    RecSet.SetFieldValue("Age","21");
    RecSet.Update();

    //加入第三个记录,用DAO涵数
    RecSet.AddNew();
    RecSet.SetFieldValue("Name","郭徽");
    RecSet.SetFieldValue("Age","27");
    RecSet.Update();

    //关闭记录集及库
    RecSet.Close();
    db.Close(); AfxMessageBox("Access文件写入成功!");
    }
    else
    AfxMessageBox("Demo.mdb数据库已经创建!");

    }4. 最后,让我们来实现它的读取操作。void CRWAccessDlg::OnReadAccess() 
    {
    COleVariant var; // 字段类型
    var.ChangeType(VT_BSTR, NULL);
    CString strName,strAge,strFile;  //清空列表框
    m_AccessList.ResetContent(); //获取主程序所在路径,存在sPath中
    CString sPath;
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
    sPath.ReleaseBuffer ();
        int nPos;
    nPos=sPath.ReverseFind (''\\'');
    sPath=sPath.Left (nPos); strFile = sPath + "\\demo.mdb";
    db.Open(strFile); // 打开已创建的demo数据库及DamoTable表
    RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DemoTable",NULL); while(!RecSet.IsEOF()) // 有没有到表结尾
    {
    RecSet.GetFieldValue("Name",var);
    strName = (LPCSTR)var.pbstrVal;
    RecSet.GetFieldValue("Age",var);
    strAge = (LPCSTR)var.pbstrVal;
    m_AccessList.AddString( strName + " --> "+strAge ); RecSet.MoveNext();
    } //关闭记录集及库
    RecSet.Close();
    db.Close();
    }