ADO访问access出错,哪位大哥帮帮忙...

duguxianzhi 2007-04-03 08:27:17
哪位大哥帮忙解决一问题:
我想用ADO访问access数据库,通过响应查询按钮,把数据读到一LISTBOX控件中,程序编译无错,点击查询按钮时报Runtime ERROR!哪位大哥帮看看代码,找找原因,小弟多谢了!!!查询按钮的响应函数如下:
void CAdo3Dlg::OnBtnQuery()
{
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));


pConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=program.mdb";
pConn->Open("","","",adConnectUnspecified);
pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
pCmd->CommandText="Select * from user";
pRst=pCmd->Execute(NULL,NULL,adCmdText);


while(!pRst->rsEOF)
{
((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("username"));
pRst->MoveNext();
}

pRst->Close();
pConn->Close();
pRst->Release();
pCmd.Release();
pConn->Release();
CoUninitialize();
}
...全文
244 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
taianmonkey 2007-04-05
  • 打赏
  • 举报
回复
#include <icrsint.h>
#include <basetsd.h>
#include <ole2.h>

#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")


......


IADORecordBinding *picRs = NULL;
_RecordsetPtr pRs("ADODB.Recordset");
_ConnectionPtr pConn("ADODB.Connection" );
//CFootballTeamRs rsFootballTeam;
GetModuleFileName(NULL,FileName,MAX_PATH);
(_tcsrchr(FileName,'\\'))[1] = 0;

lstrcat(FileName,_T("pass2.mdb"));

strSql = strSql +
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source = " +
FileName +
";Persist Security Info=False;Jet OLEDB:Database Password=cd;";

//pConn->ConnectionString = chDataSource;
//pConn->Provider = _T("Microsoft.Jet.OLEDB.4.0");
CString sqlSentence = _T("select * from pass");
try
{
pConn->Open((_bstr_t)strSql, "", "", adModeUnknown);

pRs->QueryInterface(
__uuidof(IADORecordBinding), (LPVOID*)&picRs);

pRs->Open( (_variant_t)sqlSentence, // 查询DemoTable表中所有字段
pConn.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(...)
{}

try
{
while(!(pRs->EndOfFile))
{
CString pass = (LPCTSTR)(_bstr_t)pRs->GetCollect("pass");
if(pass.IsEmpty()) return;
SetDlgItemText(IDC_PASS,pass);
pRs->MoveNext();
//break;
}
}
catch(...)
{}
某鸟 2007-04-04
  • 打赏
  • 举报
回复
1
CoInitialize(NULL);
CoUninitialize();
这两句建议别放按钮响应里,除非你整个程序就这么一个操作数据库的功能……

2
Release();
前面都要改成“.”

3
建议使用try catch捕获异常,避免非法操作~

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧