首页 > 解决方案 > ADODB RecordSet 排序日期字段不正确

问题描述

我有一个ADODB.RecordSet通过调用ADODB.RecordSet.Openastored procedureconnection

Dim results As New ADODB.RecordSet
results.Open usp_GetSomeDate, connection //... omitted

存储过程返回一个称为 a 的日期SomeDateDateTime并正确且成功地填充记录集。

ALTER Procedure usp_GetSomeDate
AS    
select SomeDate from foo

然后代码获取这个填充的 RecordSet 并调用Sort例如

results.Sort = "SomeDate"

问题是这种排序似乎是SomeDateDay而不是整体排序DateTime!例如,如果我有以下内容:

04/07/2018 12:43:23
01/03/2017 06:32:12
08/04/2018 09:23:23

并按升序对结果进行排序,我将得到:

01/03/2017 06:32:12
04/07/2018 12:43:23
08/04/2018 09:23:23

而我预期和期望的结果是:

01/03/2017 06:32:12
08/04/2018 09:23:23
04/07/2018 12:43:23

我看不出为什么代码会将这些排序为 DateTime 以外的任何内容,因为我确保从 SQL 存储过程返回的值是 DateTime - 这通常是导致问题的原因,查看其他答案(其中不是很多)

我怎样才能改变它以确保排序是DateTime

标签: sortingvbscriptadodbrecordset

解决方案


正如@Theo 指出的那样,需要将CursorLocation属性RecordSet设置为adUseClient

Dim results As New ADODB.RecordSet
results.CursorLocation = adUseClient
results.Open usp_GetSomeDate, connection //... omitted

此外,重要的是要确保从 SQL 中选择的字段是 aDateDateTime这样,以便记录集按日期而不是字符串排序!


推荐阅读