细心编程

    调了一晚上程序,终于找出问题的所在,记下,以提醒自己,编程需要细心!

    最近一直在为一个管理系统忙的焦头烂额,眼看着主要功能要实现了,然而不走运的一刻开始了。当我将数据添加完毕,在查询的记录时,在ListCtrl中显示的前一次结果总会被当前的结果所取代。

 //
 // 连接数据库
 //

 CDB db;
 _RecordsetPtr Rs;

 CString strSql;
 CString strTemp;

 strSql = "SELECT i_id, i_time, i_ip, i_domain, i_port, i_hosttype, i_nation, i_status ";
 strSql += "FROM info ORDER BY i_id DESC";

 //
 // 执行sql语句
 //

 Rs = db.Exec(strSql);

 for(int nItem = 0; !Rs->adoEOF; nItem++)
 {
  strTemp.Format("%d", Rs->GetCollect("i_id").intVal);
  m_List.InsertItem(nItem, strTemp);
  m_List.SetItemText(nItem, 1,
   IS_VT_NULL(Rs->GetCollect("i_ip").vt) ? "" : (char*)((_bstr_t)Rs->GetCollect("i_ip")));
  m_List.SetItemText(nItem, 2,
   IS_VT_NULL(Rs->GetCollect("i_domain").vt) ? "" : (char*)((_bstr_t)Rs->GetCollect("i_domain")));
  m_List.SetItemText(nItem, 3,
   IS_VT_NULL(Rs->GetCollect("i_port").vt) ? "" : (char*)((_bstr_t)Rs->GetCollect("i_port")));
  m_List.SetItemText(nItem, 4,
   IS_VT_NULL(Rs->GetCollect("i_hosttype").vt) ? "" : (char*)((_bstr_t)Rs->GetCollect("i_hosttype")));
  m_List.SetItemText(nItem, 5,
   IS_VT_NULL(Rs->GetCollect("i_nation").vt) ? "" : (char*)((_bstr_t)Rs->GetCollect("i_nation")));
  strTemp.Empty();
  strTemp.Format("%s", Rs->GetCollect("i_status").bVal > 0 ? "可用" : "失效");
  m_List.SetItemText(nItem, 6, strTemp);
  strTemp.Empty();
  m_List.SetItemText(nItem, 7, (char*)((_bstr_t)Rs->GetCollect("i_time")));

  Rs->MoveNext();
 }
 Rs->Close();
 db.Close();

    第一反应,将ORDER BY ... DESC修改为ASC,程序能正常显示结果了。但是这不符合我的输出要求啊,通过一阵子DEBUG,发现,无论怎样的改代码,程序总以升序的方式输出。难道win2k3下的ListCtrl默认都以升序的排列输出?如果时这样的话,让这段代码工作也不难,只要将InsertItem和SetItemText中的nItem参数设置为0即可,不过这样对于数据库的操作就变的更为死板(vc对数据库的操作已经够让我头痛的了),还要判断sql中的排序方法。调了半天也没想明白其中的原因,总不能让我在自己实现一个ListCtrl吧。

    还是不死心,如果功能是控件实现的话,那一定是通过设置控件属性来实现的。再打开窗口,找到那个ListCtrl,发现在Style标签中,sort属性选择的是Ascending,faint,这东西默认我记得是none,改成none,OK!问题解决了。

    这本来是一个很简单的问题,看来编程还是要细心一些,省得总在一些小的地方绊倒。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值