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();
} 展开
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();
} 展开
1个回答
展开全部
查看一下数据库中定义的字段是否有
CString strHeader[3]={"序号","TABLE_NAME","COLUMN_NAME"};
这三个字段,还有就是字段的类型是否匹配。
CString strHeader[3]={"序号","TABLE_NAME","COLUMN_NAME"};
这三个字段,还有就是字段的类型是否匹配。
追问
亲,这个不需要数据库中年有{"序号","TABLE_NAME","COLUMN_NAME"}这三个字段定义的,这句是用来设置列表控件的列表字段。谢谢了
追答
你的代码不全。value=pRstSchema->Fields->GetItem((_bstr_t)(LPCSTR)strHeader[i])->Value;
这句是获得查询出来结果中对应字段是strHeader[i]的值,如果这里报错,很大的可能就是所查的数据库中没有这个字段。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询