本人新手,麻烦各位大侠不吝支招,非常感谢!
要完成一个很简单的功能,ODBC方式的,ListControl中显示一下数据库的表。代码如下:
void CCSPINFODlg::Init_ListData()
{
if(!m_db.IsOpen()){
MessageBox("数据库未打开!");
return;
}
else
MessageBox("Database Open!");
TRY{
CRecordset rs(&m_db);
rs.Open(CRecordset::dynaset,"select name,grade,age,cell,state from spinfo_record");
while(!rs.IsEOF()){
int id;
CString name,grade,age,cell,state;
CDBVariant var;
rs.GetFieldValue((short)0,var,SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
id = var.m_iVal;
var.Clear();//获取人员信息ID字段值
rs.GetFieldValue(1,name);
rs.GetFieldValue(2,grade);
rs.GetFieldValue(3,age);
rs.GetFieldValue(4,cell);
rs.GetFieldValue(5,state);
InsertSPInfoItem(id,name,grade,age,cell,state);
rs.MoveNext();
}
rs.Close();
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH   
}void CCSPINFODlg::ConnectDB()
{
TRY{
m_db.OpenEx("DSN=spinfo;UID=sa;PWD=",CDatabase::noOdbcDialog);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH }void CCSPINFODlg::InsertSPInfoItem(int id, CString name, CString age, CString grade, CString cell, CString state)
{

//获取当前的纪录条数.
int nIndex = m_list.GetItemCount();
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT ;
lvItem.iItem = nIndex; //行数
lvItem.iSubItem = 0;
CString temp ;
temp.Format("%d",id);
lvItem.pszText = (char*)(LPCTSTR)temp; //第一列
//在最后一行插入记录值.
m_list.InsertItem(&lvItem);
//设置该行的其他列的值.
m_list.SetItemText(nIndex,1,name);
m_list.SetItemText(nIndex,2,grade);
m_list.SetItemText(nIndex,3,age);
m_list.SetItemText(nIndex,4,cell);
m_list.SetItemText(nIndex,5,state); }void CCSPINFODlg::Init_ListControl()
{
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
m_list.SetExtendedStyle(dwExStyle);
m_list.InsertColumn(0,"姓名",LVCFMT_CENTER,80);         //插入列
m_list.InsertColumn(1,"职务",LVCFMT_CENTER,80);
m_list.InsertColumn(2,"年龄",LVCFMT_CENTER,80);
m_list.InsertColumn(3,"手机",LVCFMT_CENTER,180);
m_list.InsertColumn(4,"审批状态",LVCFMT_CENTER,100);
}出错信息:
Error: GetFieldValue operation failed on field 0.
对于造型说明无效的字符值
State:22005,Native:0,Origin:[Microsoft][ODBC SQL Server Driver]