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 { // 打开本地Access库Demo.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("未找到"); }

评论