本世纪最大灵异事件。ODBC读数据库
环境:winxp + vc6.0
方式:ODBC 读ACCESS
//LIST控件显示FOLK表内数据
m_ctrList.DeleteAllItems();
m_ctrList.SetRedraw(FALSE);
CString strSQL;
UpdateData(TRUE);
strSQL="select * from folk";
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!","数据库错误",MB_OK);
return ;
}
int i=0;
while(!m_recordset.IsEOF())
{
m_ctrList.InsertItem(i++,m_recordset.m_folk);
m_recordset.MoveNext();
}
m_recordset.Close();
m_ctrList.SetRedraw(TRUE);
这段代码本来是很简单的,运行也正常。
我数据库里是:
汉族
满族
回族
苗族
...
傣族
但我在列表控件中显示出来的是:
汉族
满族
回族回族
苗族
...
傣族
为什么回族会出现两次啊。其他的族都没有啊。
我已经重新启动过机器了,还是一样。
我把数据库里的“回族”两个字删掉,把那一格数据变为空字符串。
列表控件显示为:
汉族
满族
回族
苗族
...
傣族
老天,我哪儿来的“回族”啊,我数据库里已经没有“回族”这两个字了。
它从哪儿能读出个“回族”来?
我把“回族”改成“未知族”。
列表控件显示为:
汉族
满族
未知族回族
苗族
...
傣族
我把LIST控件不用,改为用CAMBO控件显示。
显示出来的下拉列表照样是:
汉族
满族
未知族回族
苗族
...
傣族
//CAMBO下拉列表控件读数据代码
CFolkSet FolkSet ;
strSQL="select * from folk";
if(!FolkSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!","数据库错误",MB_OK);
}
while(!FolkSet.IsEOF())
{
m_ctrFolk.AddString(FolkSet.m_folk);
FolkSet.MoveNext();
}
FolkSet.Close();
[解决办法]
m_ctrList.InsertItem(i++,m_recordset.m_folk);
这个m_ctrList是CListCtrl吗,如果是的话显然你的用法有问题啊?
InsertItem后,应该是SetItemText啊,比如
m_ctrList.InsertItem(1,"1");
m_ctrList.SetItemText(1,1,"张三");
m_ctrList.SetItemText(1,2,"18岁");
[解决办法]
如果你只有一个字段的话,请检查你的逻辑,还有你的m_recordset类,这是你自己封装的记录集类吧!
[解决办法]
可以换 ADO 访问数据库试试结果。。。