以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  填充数据  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=135200)

--  作者:北狐
--  发布时间:2019/5/20 16:23:00
--  填充数据

Dim f1 As New Filler

f1.SourceTable = DataTables("成品入库与领料出库复核检查1") \'指定数据来源

f1.SourceCols = "供应商名称,本单日期,成品入库单号,领料出库单号,成品入库成色,领料出库成色" \'指定数据来源列

f1.DataTable = DataTables("成品入库与领料出库复核检查") \'指定数据接收表

f1.DataCols = "供应商名称,本单日期,成品入库单号,领料出库单号,成品入库成色,领料出库成色" \'指定数据接收列

f1.ExcludeExistValue=True

f1.Fill() \'填充数据



接收表还有其他字段(这些字段会修改),这样会导致填充过来的数据有重复,如何避免?


--  作者:有点甜
--  发布时间:2019/5/20 16:42:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/1533.htm

 

http://www.foxtable.com/webhelp/scr/2137.htm

 


--  作者:北狐
--  发布时间:2019/5/20 17:18:00
--  
换成以下代码了,还是不行
Dim Vals As List(of String())
Vals = DataTables("查询表1").GetValues("供应商名称|本单日期|成品入库单号|领料出库单号|成品入库成色|领料出库成色")
For i As Integer = 0 To Vals.Count - 1
    Dim dr As DataRow = DataTables("成品入库与领料出库复核检查").AddNew()
    dr("供应商名称") = Vals(i)(0)
    dr("本单日期") = Vals(i)(1)
    dr("成品入库单号") = Vals(i)(2)
    dr("领料出库单号") = Vals(i)(3)
    dr("成品入库成色") = Vals(i)(4)
    dr("领料出库成色") = Vals(i)(5)
Next
接收表已有的数据,但还是会从来源表那边接收相同的数据过来
接收表中还有正确领料成色,是否忽略错误这两列,其内容分别由表达式和手动编辑得出
[此贴子已经被作者于2019/5/20 17:21:50编辑过]

--  作者:有点甜
--  发布时间:2019/5/20 17:27:00
--  
Dim Vals As List(of String())
Vals = DataTables("查询表1").GetValues("供应商名称|本单日期|成品入库单号|领料出库单号|成品入库成色|领料出库成色")
For i As Integer = 0 To Vals.Count - 1
    Dim dr As DataRow = DataTables("成品入库与领料出库复核检查").find("供应商名称 = \'" & Vals(i)(0) & "\' and 本单日期 = \'" & Vals(i)(1) & "\'")
    If dr Is Nothing Then dr = DataTables("成品入库与领料出库复核检查").addnew
    dr("供应商名称") = Vals(i)(0)
    dr("本单日期") = Vals(i)(1)
    dr("成品入库单号") = Vals(i)(2)
    dr("领料出库单号") = Vals(i)(3)
    dr("成品入库成色") = Vals(i)(4)
    dr("领料出库成色") = Vals(i)(5)
Next

--  作者:北狐
--  发布时间:2019/5/20 18:11:00
--  
专门建了与来源表结构一样的接收表进行测试,但还是没排除接收表中已经存在的内容。 (即f1.ExcludeExistValue= True  无效),之前是有效的
Dim f1 As New Filler
f1.SourceTable = DataTables("成品入库与领料出库复核检查1") \'指定数据来源
f1.SourceCols = "供应商名称,本单日期,成品入库单号,领料出库单号,成品入库成色,领料出库成色" \'指定数据来源列
f1.DataTable = DataTables("测试") \'指定数据接收表
f1.DataCols = "供应商名称,本单日期,成品入库单号,领料出库单号,成品入库成色,领料出库成色" \'指定数据接收列
f1.ExcludeExistValue= True  
f1.Fill()  \'填充数据

[此贴子已经被作者于2019/5/20 18:31:04编辑过]

--  作者:有点蓝
--  发布时间:2019/5/20 20:21:00
--  
只能排除与主键一致的数据。非主键,只能手工排除http://www.foxtable.com/webhelp/scr/1533.htm
--  作者:北狐
--  发布时间:2019/5/21 12:21:00
--  填充数据

Dim cmd As New SQLCommand

Dim dt As DataTable

Dim sCols() As String = {"供应商名称","本单日期","成品入库单号","领料出库单号","成品入库成色","领料出库成色"}

Dim dCols() As String = {"供应商名称","本单日期","成品入库单号","领料出库单号","成品入库成色","领料出库成色"}

cmd.Cfont-size: 9pt; font-family: 宋体;">龙域"

cmd.CommandText = "过长就不显示,查询结果为{"供应商名称","本单日期","成品入库单号","领料出库单号","成品入库成色","领料出库成色"}这几个字段"

dt = cmd.ExecuteReader()

For Each dr As DataRow In dt.DataRows

    If DataTables("成品入库与领料出库复核检查").Find("供应商名称 = \'" & dr("供应商名称") & "\' and 本单日期= \'" & dr("本单日期") & "\' and 成品入库单号= \'" & dr("成品入库单号") & "\' and 领料出库单号= \'" & dr("领料出库单号") & "\' and 成品入库成色= \'" & dr("成品入库成色") & "\' and 领料出库成色= \'" & dr("领料出库成色") & "\'") Is Nothing  Then

        Dim nr As DataRow = DataTables("成品入库与领料出库复核检查").AddNew()

        For i As Integer =0 To sCols.Length -1

            nr(dCols(i)) = dr(sCols(i))

        Next

    End If

Next

使用以上代码后,成品入库与领料出库复核检查中已存在相同的{供应商名称,本单日期,成品入库单号,领料出库单号,成品入库成色,领料出库成色},但合并数据的时候没跳过,还合并进来

需求:1、当成品入库与领料出库复核检查中已存在完全相同的{供应商名称,本单日期,成品入库单号,领料出库单号,成品入库成色,领料出库成色}的行,但合并数据则跳过此行,不合并进来:

2、该行{供应商名称,本单日期,成品入库单号,领料出库单号,成品入库成色,领料出库成色}只要有其中一个字段不同,就合并进来

3、成品入库与领料出库复核检查表中还存在其他列

求老师帮看下,上述代码是哪里有问题?谢谢

[此贴子已经被作者于2019/5/21 12:48:38编辑过]

--  作者:有点甜
--  发布时间:2019/5/21 13:17:00
--  

1、请确保你各列的值都不为空,弹出条件看看

 

output.show("供应商名称 = \'" & dr("供应商名称") & "\' and 本单日期= \'" & dr("本单日期") & "\' and 成品入库单号= \'" & dr("成品入库单号") & "\' and 领料出库单号= \'" & dr("领料出库单号") & "\' and 成品入库成色= \'" & dr("成品入库成色") & "\' and 领料出库成色= \'" & dr("领料出库成色") & "\'")

 

2、如果你有一些列的值为空,需要这样合成条件,如

 

Dim filter As string = "1=1"

If dr("供应商名称") = nothing Then

    filter &= " and 供应商名称 is null"

Else

    filter &= " and 供应商名称 = \'" & dr("供应商名称")  & "\'"

End If

If dr("本单日期") = nothing Then

    filter &= " and 本单日期 is null"

Else

    filter &= " and 本单日期 = \'" & dr("本单日期")  & "\'"

End If

 

msgbox(filter)


--  作者:北狐
--  发布时间:2019/5/21 14:03:00
--  
output.show了,各列都不为空
发现出错的地方了
 If DataTables("成品入库与领料出库复核检查").Find("供应商名称 = \'" & dr("供应商名称") & "\' and 本单日期= \'" & dr("本单日期") & "\' and 成品入库单号= \'" & dr("成品入库单号") & "\' and 领料出库单号= \'" & dr("领料出库单号") & "\' and 成品入库成色= \'" & dr("成品入库成色") & "\' and 领料出库成色= \'" & dr("领料出库成色") & "\'") Is Nothing  Then
上述代码去掉and 本单日期= \'" & dr("本单日期") & "\'后就能正常了,
如果一定要判断本单日期,本单日期列的数据不能为日期时间类型,只能列的数据类型改成字符类型。
[此贴子已经被作者于2019/5/21 14:38:33编辑过]

--  作者:有点甜
--  发布时间:2019/5/21 14:51:00
--  

1、msgbox(dr("本单日期")) 弹出什么?

 

2、改成这样呢?

 

本单日期= #" & dr("本单日期") & "#