Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共5 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:关于集合remove移除失败的问题

1楼
13568406997 发表于:2024/7/19 11:33:00
Dim drs As List(Of DataRow) = DataTables("可出货船").SQLSelect("已扣除标配附件<>'true' and 是否在库='true'")
Dim lst As List(Of DataRow) = DataTables("可出货船").SQLSelect("已扣除标配附件<>'true' and 是否在库='true'")
Dim dr不扣 As DataRow = DataTables("系统重要参数").SQLFind("数值名称='在库船不扣除标配附件的仓库名称'")
Dim str不扣仓库 As String
If dr不扣 IsNot Nothing Then
    str不扣仓库 = dr不扣("当前值")
End If
'MessageBox.Show(2)

Dim 不扣仓库() As String = str不扣仓库.Split(",")
'将已经登记为不扣的仓库中的船排除
MessageBox.Show("移除前drs.count=" & drs.count)

For Each s As String In 不扣仓库
    '    MessageBox.Show(s)
    
    For Each dr As DataRow In lst
        Dim drKC As DataRow = DataTables("vw_库存查询表").SQLFind("库存号='" & dr("库存号") & "'")
        If drKC IsNot Nothing Then
            If drKC("仓库名称") = s Then
                Dim drRM As DataRow = DataTables("可出货船").SQLFind("唯一码='" & dr("唯一码") & "'")
                If drRM IsNot Nothing Then
                    '                    MessageBox.Show("移除" & dr("唯一码"))
                    drs.remove(drRM)

                End If 
                
            End If
        Else
            drs.remove(dr) '库存不存在
        End If 
    Next 
Next
MessageBox.Show("移除后drs.count=" & drs.count)


想从drs集合中移除指定仓库名称的记录,但试了多次,移除前后记录的总数没有变化,唯一码是肯定存在的

2楼
13568406997 发表于:2024/7/19 11:34:00
drs.remove(drRM) 


是这个用法不对吗?
3楼
y2287958 发表于:2024/7/19 12:03:00
drs集合中的元素与实际表中的行不能直接比较
4楼
有点蓝 发表于:2024/7/19 12:06:00
不对的。

首先,对于对象型集合,一般不直接通过对象进行移除。最好是通过索引处理
其次,都不是同一个集合的对象。drRM是另外通过SQLFind查询的,对于数据库来说,可能是同一行数据,但是对于程序来说,已经是不同的对象了。SQLFind查询的结果都是独立的,和原有的表对象没有什么关系的。

不如使用文字说说上面的代码想做什么功能?
5楼
13568406997 发表于:2024/7/19 12:26:00
有个别仓库的产品,在出库时不扣除标配附件的库存量,要把这些数据排除在外

已经把代码修改成下面这样了,正在调试:


Dim drs As New List(Of DataRow) 
Dim lst As List(Of DataRow) = DataTables("可出货船").SQLSelect("已扣除标配附件<>'true' and 是否在库='true'")
Dim dr不扣 As DataRow = DataTables("系统重要参数").SQLFind("数值名称='在库船不扣除标配附件的仓库名称'")
Dim str不扣仓库 As String
If dr不扣 IsNot Nothing Then
    str不扣仓库 = dr不扣("当前值")
End If
'MessageBox.Show(2)

Dim 不扣仓库 As New list(Of String) 
'将已经登记为不扣的仓库中的船排除
MessageBox.Show("移除前drs.count=" & drs.count)
For Each s As String In str不扣仓库.Split(",")
    不扣仓库.add(s)
Next

For Each dr As DataRow In lst
    Dim drKC As DataRow = DataTables("vw_库存查询表").SQLFind("库存号='" & dr("库存号") & "'")
    If drKC IsNot Nothing Then
        If 不扣仓库.Contains(drKC("仓库名称")) = False Then
            Dim drRM As DataRow = DataTables("可出货船").SQLFind("唯一码='" & dr("唯一码") & "'")
            If drRM IsNot Nothing Then
                Output.Show("添加   " & dr("唯一码"))
                drs.add(drRM)
                
            End If 
        End If
    End If 
Next 

MessageBox.Show("移除后drs.count=" & drs.count)

共5 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03613 s, 2 queries.