我在VC中要调用CRecordset这个类,设一对象 m_set,可m_set->后出现的成员变量中并没有m_nfields,这个变量出现,原语句如下:
for(i=0; i < m_set->m_nFields;i++)运行时总是出现如下warning:E:\VCIDS\DM_IDS\DM_IDSView.cpp(91) : warning C4018: '<' : signed/unsigned mismatch希望大家给予指导!!!不胜感激!
for(i=0; i < m_set->m_nFields;i++)运行时总是出现如下warning:E:\VCIDS\DM_IDS\DM_IDSView.cpp(91) : warning C4018: '<' : signed/unsigned mismatch希望大家给予指导!!!不胜感激!
改成i<(m_set->m_nFields)试一试,
你把整个函数贴上来看看
foe(int i=0;i<(m_set->GetFieldCount());i++)
所以我给你使用GetFieldCount()函数,它返回当前记录集的字段个数,注意m_set是指向CDaoRecordset的指针.
{
CListView::OnInitialUpdate();
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
if(m_set==NULL)
{
AfxMessageBox("尚未初始化记录集!");
return;
}
//如果记录集尚未被打开,则打开数据库:
if(!m_set->IsOpen())
{
m_set->Open();
}
//1.添加列:
short i,j;
CODBCFieldInfo Fi;
CString tmp;
LV_COLUMN lc;
lc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
for(i=0; i < (m_set->m_nFields);i++)
{
//读取记录集的字段信息:
m_set->GetODBCFieldInfo(i,Fi);
lc.iSubItem=i;
lc.fmt=LVCFMT_CENTER;
lc.cx=Fi.m_strName.GetLength()*10 +16;
lc.pszText=Fi.m_strName .GetBuffer(Fi.m_strName.GetLength());
GetListCtrl().InsertColumn (i,&lc);
}
//2.添加行:
LV_ITEM Item;
CString str;
CDBVariant var;
i=0;
if(m_set->IsBOF())
{
AfxMessageBox("当前记录集没有记录!");
return;
}
//将指针移向第一个记录,开始读取数据:
m_set->MoveFirst();
//在指针移向最后一个记录之前,不停地读取数据:
while(m_set->IsBOF ()==0)
{
Item.mask=LVIF_TEXT;
//第i行:
Item.iItem=i;
//第I列:
Item.iSubItem=0;
//读取记录的第一个字段:
m_set->GetFieldValue((short)0,str);
Item.pszText=str.GetBuffer (str.GetLength ());
m_List->InsertItem(&Item);
//其它各列:
for(j=1;j < (m_set->GetF
m_nFields);j++)
{
//读取记录的其它字段:
m_set->GetFieldValue ((short)j,str);
m_List->SetItemText(i,j,str.GetBuffer (str.GetLength ()));
}
m_set->MoveNext();
i++;//计数器;
}
}
下面的程序来自MFC类库手册,应该没问题
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue ); // 对varValue作某些操作。
}
rs.MoveNext( );
}
rs.Close( );
db.Close( );