记录在 SQL 服务器中排序,但是当带到 MS Access 子窗体时,排序不同

Records are sorted in SQL Server, but when brought to MS Access subform, the sorting is different

我在 SQL 服务器中的查询是根据几个因素排序的,当我执行它时,排序都是正确的。我有一些使用以下代码填充的子表单:

Set db = OpenDatabase("", False, False, globalstrSQLConnection)
strSQL = "SELECT * FROM qryTaskSimple"
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot, dbSeeChanges)
Set Me.Recordset = rs

其中 globalstrSQLConnection 是我的 SQL 服务器上的数据库连接,qryTaskSimple 是上面提到的查询。但是子表单是按照完全不同的标准排序的。而不是按以下方式排序:

ORDER BY CASE WHEN tblTask.JobNum LIKE '***FULL***' THEN 0 ELSE 1 END, DivisionSortID, SuperintendentSortID, ISNULL(dbo.tblTask.Ordering, 999999999), 
                     dbo.tblTask.JobNum, dbo.tblTask.Sequence

如查询中所述,它似乎仅按 tblTask.JobNum 排序...即使我将整个 ORDER BY 子句替换为 ORDER BY DivisionSortID... 而且我不没有任何 VBA 代码可以进一步对子表单进行排序。

Access 中的查询和 table 有一个基础 query/table 对象 order by,它可以覆盖 SQL order by。您可以在各自的对象属性中看到它(并删除它)。

这可能非常令人沮丧,我不确定这是否是正在发生的事情,但无论如何,您可以通过简单地将它添加到您的 SQL 语句来强制进行所需的排序,将查询视为 table.

strSQL = "SELECT * FROM qryTaskSimple ORDER BY <your desired sorting using any qryTaskSimple cols>"

如果这不起作用,则在表单的 load() 事件中尝试(子)表单 orderby:

Private Sub Form_Load()
   me.orderby = "your order by statements"
   if me.orderbyon = false then me.orderbyon = true
End Sub