以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  排序Bug  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=172091)

--  作者:lgzhao
--  发布时间:2021/9/23 9:17:00
--  排序Bug
发现一个Bug,sql语句的

例如:
 cmd.CommandText = "S00ELECT    *   FROM {Trans}   where   InventoryGLCode=‘12345’  order by   Date asc, [_identify] asc"

Dim DB As DataTable= cmd.ExeddddcuteReader(True)

此时得到的DB,如果用 For each datarow 语句逐行输出date和_identify的值,会发现输出的顺序永远事按_identify asc 排列的,Date列没有发挥作用。

但是当把这个DB绑定到Table进行显示的时候,table显示row的顺序却是正确的(即Date asc, [_identify] asc)。

只有DB内部datarow的顺序是错误的。

平时用着也许看不出问题。但是当计算总账流水的时候,只生成DB但却并不会输出到table显示,而且为了节省传输的时间空间,并不会读取所有的sql语句排序列,此时逐行循环的时候就会导致每行的余额计算都是错误的。


[此贴子已经被作者于2021/9/23 9:19:03编辑过]

--  作者:有点蓝
--  发布时间:2021/9/23 9:24:00
--  
DataTable是无序的,不会受sql的排序影响。也不要迷信Table的排序就是正确的

tabel建议使用sort排序获取正确的顺序
DataTable通过select指定排序获取正确的顺序

--  作者:lgzhao
--  发布时间:2021/9/23 9:34:00
--  
好吧。只是有些额外的开销。

但是我有个老系统,2020版的foxtable发布的,在客户那里正式用了一年多了。那个流水账余额就一直是正确的。算法就是上面的算法, 旧foxtable的排序或许和新版本的逻辑不一样?



--  作者:有点蓝
--  发布时间:2021/9/23 9:54:00
--  
也许。再说了foxtable的datatable基于.net的datatable,.net的datatable本身填充数据也不是按顺序的
--  作者:lgzhao
--  发布时间:2021/9/23 9:54:00
--  
好的。谢谢蓝老师