如下:我的ACCESS数据库中有如下一些记录,是无序排列的,比如:
序号   单号    名称
1      AS-01  YYAAB
2      AS-02  BGHF
4      AS-05  AFDFA
3      AS-04  SGFGG
......
现在我要把这些记录信息在控件中显示,要求显示时是按照有序排序,如:
1      AS-01  YYAAB
2      AS-02  BGHF
3      AS-04  SGFGG
4      AS-05  AFDFA
......
那要怎么实现,效率才会高呢?
我曾经这样写过:
 for(i=0,j=1;j<=count;i++,j++)//这里的count为记录总数
 {      
   //从表中寻找第J个记录,J从1到count
    m_recordset.MoveFirst();
    m_recordset.GetFieldValue(ii,varValue);
     while(!m_recordset.IsEOF()&&varValue.m_lVal!=j)
    {
       m_recordset.MoveNext();
       m_recordset.GetFieldValue(ii,varValue);
     }
    //  strSQL.Format("select *from RECORD where 序号 = %d",j);//记号a
    // m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);//记号a
   if(m_recordset.IsEOF())
   MessageBox("refreshdata函数出错");
 
   //找到j之后,将J项插入到相应控件中显示
   int temp=0;
//对整型数字的处理
   int inttt=10;//10代表十进制,用于itoa函数
   itoa(j,buf,inttt);
   // strcpy(buf,"5");
   m_ctrlperson.InsertItem(i,buf);
   //对字符串显示处理
    m_recordset.GetFieldValue(1,aaa);//从数据库现在被选中的记录中读取第i项的内容到aaa中去,其中i从0开始计数
    m_ctrlperson.SetItemText(i,1,aaa);//将从数据库中读出的值赋给文本框进行显示
    m_recordset.GetFieldValue(2,aaa);
    m_ctrlperson.SetItemText(i,2,aaa);
    m_recordset.GetFieldValue(3,aaa);
    m_ctrlperson.SetItemText(i,3,aaa);
   }//end for
 }//end else
}
 
本来是用记号a处语句来寻找第j项的,不料那样有编译错误,所以改成了现在的用movefirst和movenext来寻找第j项,但感觉效率特低。
 
所以请高手指教:有没有更好的方法,能实现数据库中数据高效率的显示,不论是从数据库组织方面,还是操作上来都行,我接触数据不多,还要向大家学习。一句话,高效率保证有序显示。
2010-08-17 

解决方案 »

  1.   

    查找的SQL语句加上SORT排序,记录集中不就是有序的了吗?我没试过..哈哈
      

  2.   

    排序你完全可以交给数据库处理,也就是写SQL语句中制定排序就行了,返回的记录及就直接显示在控件中就可以了啊。。
      

  3.   

    本帖最后由 zyq5945 于 2010-08-17 20:44:23 编辑
      

  4.   

    好你不行呀,我以前试过的。select * from RECORD order by 序号 asc,在数据库中显示的是有序的,但是用MOVEFIST到MOVENEXT到EOF将数据依次插入到列表中时就不是有序的,我也挺纳闷 的。不知道什么问题
      

  5.   

    打开Recrodeset前先给m_strSort赋值
    或打开后给m_strSort赋值后Requery Recordset: Sorting Records (ODBC)  
      

  6.   

    女生学vc的很少见啊!学到这种也少见!强人!不过对数据库的各种操作建议多用sql语句,我不喜欢那些个函数,太麻烦了
      

  7.   

    女生学vc的很少见,我们得多关照:数据库中看起来有序,是使用的默认索引,但是数据的顺序没有变,还是原样存在硬盘里。你从vc读出来时就是原来的真是面目了。
    select * from RECORD order by 序号 asc, 单号 asc
    是有效地。如果你要排序,到网上找一个quicksort的代码,1秒钟可以排1000万个整数。改一改就可以排汉字了。
      

  8.   

    用SQL语句排序就OK了
    select * from record order by 序号 ASC,单号 ASC
      

  9.   

    排序你完全可以交给数据库处理,也就是写SQL语句中制定排序就行了,返回的记录及就直接显示在控件中就可以了,你试试吧
      

  10.   

    学一下数据库语句吧,当你操作时相当方便,我也在学sql语句
    http://sql.1keydata.com/cn/sql-select.php