mfc使用ADO技术访问数据库时的问题:

编译没问题,运行时报错,通过设置断点,当我删除value=pRstSchema->Fields->GetItem((_bstr_t)(LPCSTR)strHeader[i... 编译没问题,运行时报错,通过设置断点,当我删除value=pRstSchema->Fields->GetItem((_bstr_t)(LPCSTR)strHeader[i])->Value;这一句时,不会报错,但是运行结果不正确,看不到数据库里的表名称,我是按书上的代码写的,代码如下:

void CEx_ADOView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指针
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pCommand.CreateInstance(_uuidof(Command));
m_pConnection->ConnectionString="DSN=ADO";
m_pConnection->ConnectionTimeout=30;
HRESULT hr=m_pConnection->Open("","","",0);
if(hr!=S_OK)
MessageBox("无法连接指定的数据库!");
_RecordsetPtr pRstSchema=NULL; //定义一个记录集指针
pRstSchema=m_pConnection->OpenSchema(adSchemaColumns);
CListCtrl& m_ListCtrl=GetListCtrl();
CString strHeader[3]={"序号","TABLE_NAME","COLUMN_NAME"};
for(int i=0;i<3;i++)
{
m_ListCtrl.InsertColumn(i,strHeader[i],LVCFMT_LEFT,120);
}
int nItme=0;
CString str;
_bstr_t value ;//en("Provide=Microsoft.Jet.OLEDB.4.0;Data Source=Student.mdb;","","",0);
while(!(pRstSchema->adoEOF))
{
str.Format("%d",nItme+1);
m_ListCtrl.InsertItem(nItme,str);
for(int i=0;i<3;i++)
{
value=pRstSchema->Fields->GetItem((_bstr_t)(LPCSTR)strHeader[i])->Value;
m_ListCtrl.SetItemText(nItme,i,value);
}
pRstSchema->MoveNext();
nItme++;
}
pRstSchema->Close();
}
展开
 我来答
murraychi
2014-04-15 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:114万
展开全部
查看一下数据库中定义的字段是否有
CString strHeader[3]={"序号","TABLE_NAME","COLUMN_NAME"};
这三个字段,还有就是字段的类型是否匹配。
追问
亲,这个不需要数据库中年有{"序号","TABLE_NAME","COLUMN_NAME"}这三个字段定义的,这句是用来设置列表控件的列表字段。谢谢了
追答
你的代码不全。value=pRstSchema->Fields->GetItem((_bstr_t)(LPCSTR)strHeader[i])->Value;
这句是获得查询出来结果中对应字段是strHeader[i]的值,如果这里报错,很大的可能就是所查的数据库中没有这个字段。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式