以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQL外部数据源查找时,当[_sortkey]存在相同重复值时  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=90511)

--  作者:L88919138
--  发布时间:2016/9/14 17:13:00
--  SQL外部数据源查找时,当[_sortkey]存在相同重复值时

下面代码在SQL外部数据源查找时,当[_sortkey]存在相同重复值时([_sortkey]在局域网络使用时,有一定概率是相同值),往来是取第一个值,但我想用的是最后一个值,代码应如何改进?


Dim cmd As new  SQLCommand

cmd.cfont-family: 宋体; font-size: 12px;">鲜迪数据库"

For Each dr As DataRow In DataTables("存货档案").DataRows

    cmd.CommandText = "Select top 1 余额 Fro m {存货账}  Where 商品名称 = \'" & dr("存货名称") & "\' and 余额 is not null order by [_sortkey] desc "

    If cmd.CommandText IsNot Nothing

        dr("账面数量") = cmd.executescalar

    Else

        dr("账面数量") = 0

    End If

Next


--  作者:狐狸爸爸
--  发布时间:2016/9/14 17:37:00
--  

Dim cmd As new  SQLCommand

cmd.cfont-family: 宋体; font-size: 12px;">鲜迪数据库"

For Each dr As DataRow In DataTables("存货档案").DataRows

    cmd.CommandText = "Select top 1 余额 Fro m {存货账}  Where 商品名称 = \'" & dr("存货名称") & "\' and 余额 is not null order by [_Identify] desc "

    If cmd.CommandText IsNot Nothing

        dr("账面数量") = cmd.executescalar

    Else

        dr("账面数量") = 0

    End If

Next


--  作者:L88919138
--  发布时间:2016/9/14 17:57:00
--  
老大, cmd.CommandText = "Select top 1 余额 Fro m {存货账}  Where 商品名称 = \'" & dr("存货名称") & "\' and 余额 is not null order by [_Identify] desc ",以前有用过;但在流水账实际应用中,发现有时要在流水账中间插入一条记录(假设这是最后一次操作),此时中间 插入这一条记录[_Identify]却是最后一条,不是流水账中我想要最后计算结果,因此后来才改用 [_sortkey] 来判断流水账最后一条记录。但在采用SQL外部数据源时,当两台以上电脑同时打开数据库,同时输入同一个商品时(这种概率很低,但有可能会发生),就有可能发生[_sortkey] 值重得,且是同一商品名称,虽说用重置[_sortkey] 值可以一定程度上避开这个错误,但这个操作也不可能太经常操作,这时我想要用SQL语句来判定取值在同一商品名称当[_sortkey] 值重复时最后一个值。
--  作者:有点蓝
--  发布时间:2016/9/14 18:03:00
--  
增加一个日期列咯

cmd.CommandText = "Select top 1 余额 Fro m {存货账}  Where 商品名称 = \'" & dr("存货名称") & "\' and 余额 is not null order by [_sortkey] desc,日期 desc "

--  作者:L88919138
--  发布时间:2016/9/14 18:06:00
--  
非常感谢大师们指点,回家去试试


--  作者:L88919138
--  发布时间:2016/9/15 6:20:00
--  
最终实验是用下面代码效果最好,因为当两台以上电脑同时打开数据库,同时输入同一个商品时,他们日期往往也是一样的,但相同sortkey值最后面一条记录的[_Identify] 值往往是最大的,因此用这个判定相对较科学些。谢谢两位大师指点
 
cmd.CommandText = "Select top 1 余额 Fro m {存货账}  Where 商品名称 = \'" & dr("存货名称") & "\' and 余额 is not null order by [_sortkey] desc,[_Identify]  desc "