首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么在客户端对记录集进行排序

2012-03-30 
如何在客户端对记录集进行排序感谢AlanChenBoy(Alan)先。我用_RecordsetPtr在客户端打开了记录集,并添加了8

如何在客户端对记录集进行排序
感谢AlanChenBoy(Alan)先。
我用_RecordsetPtr在客户端打开了记录集,并添加了8个字段,然后Open,再AddNew了10条记录。现在我希望对记录集进行排序,用index或者sort都可以。做过这个的高人可否指点一下?
注:我用m_rs-> Sort= "Item,Location   DESC ";
或者rs-> Sort= "Item ";
或者rs-> Sort= "[Item],[Location]   DESC ";

但运行时都报错:排序无法被应用

搞不懂原因,搜索了网上,没有详细说明的。
已经注意的是:
m_rs-> CursorLocation=adUseClient;

[解决办法]
直接在SQL语句中排序:

select * from your_table order by item
[解决办法]
//////////////////////////////////////////////////////////
// //
// SortX Function //
// //
//////////////////////////////////////////////////////////
void SortX(void)
{
HRESULT hr = S_OK;

// Initialize pointers on define.
// These are in the ADODB:: namespace.
_ConnectionPtr pConnection = NULL;
_RecordsetPtr pRstAuthors = NULL;

// Define string variables.
_bstr_t strCnn( "Provider= 'sqloledb ';Data Source= 'MySqlServer '; "
"Initial Catalog= 'pubs ';Integrated Security= 'SSPI '; ");

try
{
TESTHR(pConnection.CreateInstance(__uuidof(Connection)));

TESTHR(pRstAuthors.CreateInstance(__uuidof(Recordset)));

pRstAuthors-> CursorLocation = adUseClient;
pConnection-> Open (strCnn, " ", " ", adConnectUnspecified);
pRstAuthors-> Open( "SELECT * FROM authors ",
_variant_t((IDispatch *) pConnection),
adOpenStatic, adLockReadOnly, adCmdText);

SortXprint( " Initial Order ", pRstAuthors);

//Clear the screen for the next display.
printf( "\nPress any key to continue... ");
getch();
system( "cls ");

pRstAuthors-> Sort = "au_lname ASC, au_fname ASC ";
SortXprint( "Last Name Ascending ", pRstAuthors);

//Clear the screen for the next display.
printf( "\nPress any key to continue... ");
getch();
system( "cls ");

pRstAuthors-> Sort = "au_lname DESC, au_fname ASC ";
SortXprint( "Last Name Descending ", pRstAuthors);
}
catch(_com_error &e)
{
PrintProviderError(pConnection);
PrintComError(e);
}

// Clean up objects before exit.
if (pRstAuthors)
if (pRstAuthors-> State == adStateOpen)
pRstAuthors-> Close();
if (pConnection)
if (pConnection-> State == adStateOpen)
pConnection-> Close();
}

[解决办法]
pRstAuthors-> Sort = "au_lname ASC, au_fname ASC ";

用Sort属性就行了
[解决办法]
写查询语句的时候后面加order by 。。。
[解决办法]
自已做个排序,再重显示。

[解决办法]
是为了显示而排序,那要显示的数据肯定不是很多,

多字段排序和单字段排序没有甚么区别,包括stl,微软的CList等类都直接可以排序,没有难度的


[解决办法]
在你打开_RecordsetPtr记录集时就可以排序了。直接在sql语句中写 "select item from your_table order by item

[解决办法]
ado 不是 支持 sort 码?
[解决办法]
Sort 属性


指定一个或多个 Recordset 以之排序的字段名,并指定按升序还是降序对字段进行排序。

设置和返回值

设置或返回以之排序的用逗号分隔的字段名字符串,其中的每个名称是 Recordset 中的 Field。可以选择后跟空格和用于指定字段排序顺序的关键字 ASC 或 DESC。

说明

实际上数据并没有重新排列,只是简单地按排序的顺序进行访问。

如果 CursorLocation 属性被设置为 adUseClient,并且索引尚不存在,则将为 Sort 属性中指定的每个字段创建临时索引。

将 Sort 属性设置为空字符串将使行重置为原始顺序,并删除临时索引。现存索引将不被删除。

由于与关键字 ASC 和 DESC 发生冲突,字段无法命名为“ASC”或“DESC”。请通过在返回 Recordset 的查询中使用 AS 关键字,来给使用发生名称冲突的字段设置别名。


AddNew了10条记录?????
难道是AddNew 的原因???

热点排行