工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2194|回复: 10

一列表框显示问题

[复制链接]
发表于 2008-6-19 13:20 | 显示全部楼层 |阅读模式
void CNewBook::OnButtonCheckBooks()
{
// TODO: Add your control notification handler code here
UpdateData();

if(!m_db.IsOpen())
{
  m_db.OpenEx("DSN=Library;UID=sa;PWD=1",0);
}

CBookSet * m_pset=new CBookSet(& m_db);
CString strSQL;
// strSQL.Format("select * from Book_Info where Book_ID='%d'",m_lBookID);
  strSQL.Format("select * from Book_Info");
m_pset->Open(CRecordset::dynaset,strSQL);

if(m_pset->GetRecordCount()==0)
{
  MessageBox("No this book in the database!","新书登记");
  m_db.Close();
  return;
}

//显示程序
m_ctrList.DeleteAllItems();
m_pset->MoveFirst();
char buf[50];
CDBVariant varValue;
int i=0;
CString strBookName;
while(!m_pset->IsEOF())
{
  //int temp=0;
  m_pset->GetFieldValue((short)0,varValue);
  sprintf(buf,"%d",varValue.m_lVal);
  m_ctrList.InsertItem(i,buf);
  
  m_pset->GetFieldValue(1,strBookName);
  m_ctrList.SetItemText(i,1,strBookName);
  m_pset->GetFieldValue(2,strBookName);
  m_ctrList.SetItemText(i,2,strBookName);
  m_pset->GetFieldValue(3,strBookName);
  m_ctrList.SetItemText(i,3,strBookName);
  m_pset->GetFieldValue(4,strBookName);
  m_ctrList.SetItemText(i,4,strBookName);
  m_pset->GetFieldValue(5,varValue);
  sprintf(buf,"%d-%d-%d %d:%d:%d",varValue.m_pdate->year,varValue.m_pdate->month,
       varValue.m_pdate->day,varValue.m_pdate->hour,varValue.m_pdate->minute,varValue.m_pdate->second);
  m_ctrList.SetItemText(i,5,buf);
  m_pset->GetFieldValue(6,varValue);
  sprintf(buf,"%.2f",varValue.m_dblVal);
  m_ctrList.SetItemText(i,6,buf);
  m_pset->GetFieldValue(7,varValue);
  sprintf(buf,"%d",varValue.m_iVal);
  m_ctrList.SetItemText(i,7,buf);
  m_pset->GetFieldValue(8,strBookName);
  m_ctrList.SetItemText(i,8,strBookName);
  m_pset->GetFieldValue(9,varValue);
  sprintf(buf,"%d-%d-%d %d:%d:%d",varValue.m_pdate->year,varValue.m_pdate->month,
       varValue.m_pdate->day,varValue.m_pdate->hour,varValue.m_pdate->minute,varValue.m_pdate->second);
  m_ctrList.SetItemText(i,9,buf);
  m_pset->GetFieldValue(10,varValue);
  sprintf(buf,"%d",varValue.m_lVal);
  m_ctrList.SetItemText(i,10,buf);
  m_pset->GetFieldValue(11,varValue);
  sprintf(buf,"%d",varValue.m_lVal);
  m_ctrList.SetItemText(i,11,buf);
  i++;
  m_pset->MoveNext();
}
m_pset->Close();
m_db.Close();
UpdateData(FALSE);
 楼主| 发表于 2008-6-19 13:24 | 显示全部楼层
现在问题是说索引无效,已知数据库中的建立的列的顺序为:
CREATE TABLE BOOK_Info(
Book_ID INT PRIMARY KEY,
Book_Name VARCHAR(40) NOT NULL,
Type VARCHAR(10) NULL,
Writer VARCHAR(20) NOT NULL,
Press VARCHAR(20) NOT NULL,
Press_Date Smalldatetime NOT NULL,
Price FLOAT NOT NULL,
Page int NULL,
Keyword VARCHAR(20) NULL,
Register_Date Smalldatetime NOT NULL,
Total_Amount INT NOT NULL,
Now_Amount INT NOT NULL
);

各位大哥救命呀!
回复

使用道具 举报

发表于 2008-6-19 13:28 | 显示全部楼层
不要用*

勤快点,把所有段名都写上去,然后照着顺序读出来就行了
回复

使用道具 举报

发表于 2008-6-19 13:30 | 显示全部楼层
至于为什么

我也不知道

哪们高手知道请告诉一下: )
回复

使用道具 举报

发表于 2008-6-19 13:41 | 显示全部楼层
怀疑是你数据库连接的问题。
回复

使用道具 举报

发表于 2008-6-19 13:44 | 显示全部楼层
是在那行调用时报错的呢?调试一下
回复

使用道具 举报

发表于 2008-6-19 17:20 | 显示全部楼层
你读取数据库字段时,要严格按照这个规则:

1、先读取前一条记录的所有字段,再获取下一条记录的所有字段。
2、每一条记录的读取顺序也要和数据库上的字段一直
(如数据库上的顺序 姓名->年龄->学好,那么你用GetFiledValue时也要按这个顺序读取)

俺之前也遇到过这问题,按照上面的规则就不会错了。
至于为什么,好像适合你的数据库连接技术有关系,我用
ODBC技术就出现这问题,后来改用ADO问题又没了。
回复

使用道具 举报

 楼主| 发表于 2008-6-19 21:05 | 显示全部楼层
搞不出问题在那,只知道读到第二个后就读不下去了.
如3楼所说那样虽然慢慢读,但起码不会错.
回复

使用道具 举报

发表于 2008-6-19 21:20 | 显示全部楼层
试试用断点来DEBUG,找出具体哪句出错
回复

使用道具 举报

 楼主| 发表于 2008-6-19 21:41 | 显示全部楼层
知道在调试到下面时
m_pset->GetFieldValue(1,strBookName);
m_ctrList.SetItemText(i,1,strBookName);
出错.
顺序应该没问题,调试到里面有些地方搞不明白了,我也找不到出来哪里有问题.只能是一个一个来.
回复

使用道具 举报

发表于 2008-6-29 18:50 | 显示全部楼层
DEBUG下可以看各变量值的...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-14 06:32

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表