正文

【原创】VC中访问ACCESS数据库2008-07-17 01:50:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/36757.html

分享到:

VC6访问ACCESS数据库

 

不会用数据库,有些东西写的不好!

 

一、完成初始化工作

本程序完成一个简单的查询功能能,根据输入的代码,输出代码对应的信息。

首先,创建基于对话框的应用程序,导入ADO

stdafx.h中添加代码:

#import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","rsEOF")  

第二步,完成的一些初始化工作,打开本地数据库

// 初始化COM,创建ADO连接等操作

         AfxOleInit();

         m_pConnection.CreateInstance(__uuidof(Connection));

 

         // ADO操作中建议语句中要常用try...catch()来捕获错误信息,

         // 因为它有时会经常出现一些想不到的错误。

         try                

         {       

                   // 打开本地AccessDemo.mdb

                   m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);

                  

         }

         catch(_com_error e)

         {

                   AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");

                   return FALSE;

         }

 

二、增加一个按钮,点击后从数据库中查询Edit框中输入的信息

 

         CString str;  //定义一个变量,用于存放EDIT中的输入

         GetDlgItemText(IDC_EDIT_CODE,str);

 

        

         m_pRecordset.CreateInstance(__uuidof(Recordset));

 

         // ADO操作中建议语句中要常用try...catch()来捕获错误信息,

         // 因为它有时会经常出现一些想不到的错误。jingzhou xu

         //

         try

         {

                   m_pRecordset->Open("SELECT * FROM DemoTable",   //查询DemoTable表中所有字段

                                                                 theApp.m_pConnection.GetInterfacePtr(),    // 获取库接库的IDispatch指针

                                                                 adOpenDynamic,

                                                                 adLockOptimistic,

                                                                 adCmdText);

         }

         catch(_com_error *e)

         {

                   AfxMessageBox(e->ErrorMessage());

         }

 

         _variant_t var;

         CString strName,strAge;

 

         // 清空列表框

         m_AccessList.ResetContent();

         strName=strAge="";

 

         // ADO操作中建议语句中要常用try...catch()来捕获错误信息,

         // 因为它有时会经常出现一些想不到的错误。

         try

         {

                   if(!m_pRecordset->BOF)

                            m_pRecordset->MoveFirst();

                   else

                   {

                            AfxMessageBox("表内数据为空");

                            return;

                   }

 

                   // 循环比较,若有相符的信息则在List中输出,返回。查询结束。

                   //否则,输出未找到代码

                   while(!m_pRecordset->rsEOF)

                   {

                            if(str==(_bstr_t)m_pRecordset->GetCollect("Name"))

                            {

                                     ((CListBox*)GetDlgItem(IDC_LIST_INFO))->AddString((_bstr_t)m_pRecordset->GetCollect("Age"));

                                     m_pRecordset->MoveNext();

                                     return;

                            }

                            else

                            {

                                     m_pRecordset->MoveNext();

                            }

                   }

 

                   // 默认列表指向第一项,同时移动记录指针并显示

                   m_AccessList.SetCurSel(0);

         }

         catch(_com_error *e)

         {

                   AfxMessageBox(e->ErrorMessage());

         }

                   ((CListBox*)GetDlgItem(IDC_LIST_INFO))->AddString("未找到");

}

阅读(4523) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册