代码如下:把数据库的数据显示到列表框里
m_ListCrtl.DeleteAllItems(); //删除所有的子项
try
{
m_pRecordset = theApp.m_pConnection->Execute((_bstr_t)sql, NULL, adCmdText);
int i = 0;
while(!m_pRecordset->adoEOF)//记录没有到末尾
{
m_ListCrtl.InsertItem(i, (char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)0))));
//当表里有一条记录时可得到(char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)0)))为1 m_ListCrtl.SetItemText(i, 1, (char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)1)))); //这个地方有错误 明明表里有数据可到这里说找不到
m_ListCrtl.SetItemText(i, 2, (char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)2))));
i++;
m_pRecordset->MoveNext();//移动到下一条记录
} 错误提示是:在对应所需名称或序数的集合中,为找到项目。
我测试改为:vr=m_pRecordset->GetCollect(_variant_t((long)0)));
if(vr.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(vr);
MessageBox(strName);
i++;
m_pRecordset->MoveNext();//移动到下一条记录
数据表里有一条记录时MessageBox显示为:1
然后我把_variant_t((long)0改成_variant_t((long)1就说记录里么有。。 不是应该把第二列的数据取出来么。
哪里错了,那个高手知道请帮助我,谢谢啊!
m_ListCrtl.DeleteAllItems(); //删除所有的子项
try
{
m_pRecordset = theApp.m_pConnection->Execute((_bstr_t)sql, NULL, adCmdText);
int i = 0;
while(!m_pRecordset->adoEOF)//记录没有到末尾
{
m_ListCrtl.InsertItem(i, (char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)0))));
//当表里有一条记录时可得到(char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)0)))为1 m_ListCrtl.SetItemText(i, 1, (char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)1)))); //这个地方有错误 明明表里有数据可到这里说找不到
m_ListCrtl.SetItemText(i, 2, (char*)_bstr_t(m_pRecordset->GetCollect(_variant_t((long)2))));
i++;
m_pRecordset->MoveNext();//移动到下一条记录
} 错误提示是:在对应所需名称或序数的集合中,为找到项目。
我测试改为:vr=m_pRecordset->GetCollect(_variant_t((long)0)));
if(vr.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(vr);
MessageBox(strName);
i++;
m_pRecordset->MoveNext();//移动到下一条记录
数据表里有一条记录时MessageBox显示为:1
然后我把_variant_t((long)0改成_variant_t((long)1就说记录里么有。。 不是应该把第二列的数据取出来么。
哪里错了,那个高手知道请帮助我,谢谢啊!
int nItem = m_ListCrtl.InsertItem(i, (char*)_......
m_ListCrtl.SetItemText(nItem, 1, .......
如果是 你看看第二列的字段类型是什么?(char*)不建议这样强转,最好在数据库中获取字段用vt.ChangeType(VT_BSTR)