The following is some code snippet I posted to http://topic.csdn.net/t/20020724/16/899090.html.
LRESULT CMyDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
int pathlen = _tcslen(m_tcDBPath);
if(pathlen <1)
{
TCHAR tbuf[256];
wsprintf(tbuf, "Invalid database path, passed in path=%s ",m_tcDBPath);
MessageBox(tbuf, "Error ");
EndDialog(0);
return FALSE;
}
else
{
if(m_tcDBPath[pathlen-1]!= '// ')
{
m_tcDBPath[pathlen]= '// ';
m_tcDBPath[pathlen+1]=0;
}
}
wsprintf(m_tcConnStr, "Driver={Microsoft dBASE Driver (*.dbf)};DBQ=%s; DriverID=533; ",m_tcDBPath);
LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_LEFT;
lvColumn.cx = 120;
hwndListView =GetDlgItem(IDC_LVW);//IDC_LVW is ID of listview control
_AfxModifyStyle(hwndListView,GWL_STYLE,0L, LVS_OWNERDRAWFIXED,0);
try
{
_ConnectionPtr pConn( "ADODB.Connection ");
_RecordsetPtr pRst( "ADODB.Recordset ");
//pConn-> Open( "Driver={Microsoft dBASE Driver (*.dbf)};DBQ=C://images1//; DriverID=533; ", " ", " ",adConnectUnspecified);
pConn-> Open(m_tcConnStr, " ", " ",adConnectUnspecified);
pRst-> Open( "Patients ", _variant_t((IDispatch *) pConn, true),
adOpenStatic, adLockReadOnly, adCmdTable);
FieldsPtr fds=pRst-> GetFields();
long nfieldcount = fds-> GetCount();
for(int i=0;i <nfieldcount;i++)
{
FieldPtr fd=fds-> GetItem(_variant_t(short(i)));
TCHAR tcfdnamebuf[MAX_PATH];
_bstr_t bstrt_fdname=fd-> GetName();
wsprintf(tcfdnamebuf, "%s ",(LPCTSTR)bstrt_fdname);
lvColumn.pszText = tcfdnamebuf;
ListView_InsertColumn (hwndListView, i, &lvColumn);
}
LVITEM lvI;
lvI.mask = LVIF_TEXT ;
lvI.state = 0;
lvI.stateMask = 0;
int rowcount = 0;
while(!pRst-> EndOfFile && !pRst-> BOF)
{
TCHAR fdvalbuf[256];
memset(fdvalbuf,0,sizeof(fdvalbuf));
{
lvI.iItem = rowcount;
lvI.iSubItem = 0;
FieldPtr fd=fds-> GetItem(_variant_t(short(0)));
_variant_t vtval=fd-> Value;
VariantToString(vtval,fdvalbuf);
lvI.pszText = fdvalbuf;
if(ListView_InsertItem(hwndListView, &lvI) == -1)
{
MessageBox( "ListView_InsertItem failed in OnInitDialog() ");
return NULL;
}
}
for(int i=1;i <nfieldcount;i++)
{
FieldPtr fd=fds-> GetItem(_variant_t(short(i)));
_variant_t vtval=fd-> Value;
memset(fdvalbuf,0,sizeof(fdvalbuf));
VariantToString(vtval,fdvalbuf);
std::string str_item(fdvalbuf);
//ListView_SetItemText(hwndListView,rowcount,i,fdvalbuf);
LV_ITEM lv_sub;
memset(&lv_sub,0,sizeof(LV_ITEM));
lv_sub.mask = LVIF_TEXT ;
lv_sub.state = 0;
lv_sub.stateMask = 0;
lv_sub.iItem = rowcount;
lv_sub.iSubItem = i;
if(str_item.length()> 0)
{
lv_sub.pszText = (char*)str_item.c_str();
}
else
{
lv_sub.pszText = " ";
}
ListView_SetItem(hwndListView, &lv_sub);
}
pRst-> MoveNext();
rowcount++;
}
pRst-> Close();
pConn-> Close();
}
catch (_com_error &e)
{
TCHAR errbuf[1024*4];
wsprintf(errbuf, "Connection string:%s/nDescription = '%s '/n ",m_tcConnStr, (char*) e.Description());
MessageBox(errbuf, "Error ");
}
return 1; // Let the system set the focus
}