2008-09-23 回答
// 在stdafx.h中加入
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
// app类中声明如下变量
// 定义ADO连接变量指针
_ConnectionPtrm_pConnection;
// 在APP中的InitInstance()添加如下代码
// 初始化COM,创建ADO连接等操作
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
try
{
// 打开本地Access库
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=XiAnJiDianYJS.mdb",""
,"",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库是否与可执行程序在同一目录下!");
return FALSE;
}
// 在APP中的ExitInstance() 添加如下代码
// 关闭ADO连接状态
if (m_pConnection->State)
{
m_pConnection->Close();
m_pConnection= NULL;
}
// 在操作实现代码前添加如下代码
extern CSalaryManageSYSApp theApp;// 在此引用应用类中的theApp来获取库连接指针
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。jingzhou xu
// 打开表DemoTable
try
{
m_pRecordset->Open("SELECT * FROM DemoTable", // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
// 读取
void CAdoRWAccessDlg::OnReadAccess()
{
_variant_t var;
CString strName,strAge;
// 清空列表框
m_AccessList.ResetContent();
strName=strAge="";
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。jingzhou xu
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
// 读入库中各字段并加入列表框中
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("Name");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("Age");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
m_AccessList.AddString( strName + " --> "+strAge );
m_pRecordset->MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示
m_AccessList.SetCurSel(0);
OnSelchangeListaccess();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
上面是从我的代码里面拷贝出来的仔细读改为自己的就可以了。