I am sorry, I moved the question to MFC as suggested and did not even attempted to delete it here. I think it cannot be deleted once discussion starts. Yes, the field index is properly advanced and it works just fine with more than one record in the recordset - initially. The key is that I get the first field OK, than it fails on next one. I know the field is there because it retrives the record just fine when different SQL returns more records in recordset. Here is the code snippet, I have removed my // comments for clarity, but it is pretty normal text retrieval loop. pRecordset->AddNew(); fix , does not really adds anything pRecordset->MoveFirst(); should not need this on initial Open recordset short nFields = pRecordset->GetODBCFieldCount( ); while( !pRecordset->IsEOF( ) ) { buffer = strText.GetBuffer(256); // set item text for( short index = 0; index < nFields; index++ ) { pRecordset->GetFieldValue( index, strText ); buffer = strText.GetBuffer(256); pList->SetItemText(iItem,index,buffer); this is where it fails TRACE("\n item %i field %i buffer %s ",iItem , index , buffer ); } pRecordset->MoveNext( ); iItem++; } I would like to get you opinions on this if you have time to work on it. If so please switch to MFC forum. Thanks Vaclav