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("未找到");
}
评论