如下:我的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 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
或打开后给m_strSort赋值后Requery Recordset: Sorting Records (ODBC)
select * from RECORD order by 序号 asc, 单号 asc
是有效地。如果你要排序,到网上找一个quicksort的代码,1秒钟可以排1000万个整数。改一改就可以排汉字了。
select * from record order by 序号 ASC,单号 ASC
http://sql.1keydata.com/cn/sql-select.php