以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  帮忙简化下代码吧  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=32931)

--  作者:jiskin
--  发布时间:2013/5/10 16:57:00
--  帮忙简化下代码吧
Select Case e.DataCol.name
    Case "零件名称","规格","材质"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.Isnull("零件名称") AndAlso dr.Isnull("规格") AndAlso dr.Isnull("材质") Then
            dr("仓库_库位代码") = Nothing
        Else
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = False Then
                pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\' and [材质] = \'" & dr("材质") & "\'")
                dr("仓库_库位代码") = pr("储位")
            End If
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = True Then
                pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\'")
                dr("仓库_库位代码") = pr("储位")
            End If
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = False Then
                pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [材质] = \'" & dr("材质") & "\'")
                dr("仓库_库位代码") = pr("储位")
            End If
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = True Then
                dr("仓库_库位代码") = Nothing
            End If
        End If
End Select
谁帮我简化一下啊

 "零件名称","规格","材质"三个列
如果三列有都内容 就根据这三列内容查找
如果名称有内容 规格有内容 材质无内容 就根据名称 规格找
如果名称有内容 材质有内容  就根据这两个找

--  作者:don
--  发布时间:2013/5/10 17:36:00
--  
Select Case e.DataCol.name
    Case "零件名称","规格","材质"
        Dim flt As String
        Dim dr As DataRow = e.DataRow
        Dim v1 as String() = {"品名","规格","材质"}
        Dim v2 as String() = {"零件名称","规格","材质"}

        For n1 As Integer = 0 to v2.length-1
            if  dr.Isnull(s1) =False Then
                 flt+ =  " and " & v1(n1) & " = \'" & dr(v2(n1)) & "\'"
            End if
        next

        If fllt = Nothing Then
            dr("仓库_库位代码") = Nothing
        Else         
            Dim pr As DataRow = DataTables("库存总表").Find(flt.substring(5)) 
            If pr isnot nothing Then  dr("仓库_库位代码") = pr("储位")       
        End If
End Select

--  作者:jspta
--  发布时间:2013/5/10 17:42:00
--  
以下是引用jiskin在2013-5-10 16:57:00的发言:
Select Case e.DataCol.name
    Case "零件名称","规格","材质"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.Isnull("零件名称") AndAlso dr.Isnull("规格") AndAlso dr.Isnull("材质") Then
            dr("仓库_库位代码") = Nothing
        Else
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = False Then
                pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\' and [材质] = \'" & dr("材质") & "\'")
                dr("仓库_库位代码") = pr("储位")
            End If
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = True Then
                pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\'")
                dr("仓库_库位代码") = pr("储位")
            End If
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = False Then
                pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [材质] = \'" & dr("材质") & "\'")
                dr("仓库_库位代码") = pr("储位")
            End If
            If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = True Then
                dr("仓库_库位代码") = Nothing
            End If
        End If
End Select
谁帮我简化一下啊

 "零件名称","规格","材质"三个列
如果三列有都内容 就根据这三列内容查找
如果名称有内容 规格有内容 材质无内容 就根据名称 规格找
如果名称有内容 材质有内容  就根据这两个找

Dim arr1() As String = {"零件名称","规格","材质"}
Dim arr2() As String = {"品名","规格","材质"}
Dim dr As DataRow = e.DataRow
Dim str As String = ""
Dim intA As Integer
For IntA = 0 To arr1.Length - 1
    If dr.IsNull(arr1(intA)) = False Then
        str = str & arr2(IntA) & " = \'" & arr1(IntA) & "\' and "
    End If
Next

if str > "" then
str = str.TrimEnd(" " ,"d","n","a")
Dim pr As DataRow = DataTables("库存总表").Find(str)
If dr("仓库_库位代码") <> pr("储位") Then dr("仓库_库位代码") = pr("储位")

end if  

 

感觉你这代码设置的地方有点不合理

[此贴子已经被作者于2013-5-10 17:43:34编辑过]

--  作者:jiskin
--  发布时间:2013/5/10 19:15:00
--  
以下是引用jspta在2013-5-10 17:42:00的发言:

Dim arr1() As String = {"零件名称","规格","材质"}
Dim arr2() As String = {"品名","规格","材质"}
Dim dr As DataRow = e.DataRow
Dim str As String = ""
Dim intA As Integer
For IntA = 0 To arr1.Length - 1
    If dr.IsNull(arr1(intA)) = False Then
        str = str & arr2(IntA) & " = \'" & arr1(IntA) & "\' and "
    End If
Next

if str > "" then
str = str.TrimEnd(" " ,"d","n","a")
Dim pr As DataRow = DataTables("库存总表").Find(str)
If dr("仓库_库位代码") <> pr("储位") Then dr("仓库_库位代码") = pr("储位")

end if  

 

感觉你这代码设置的地方有点不合理

[此贴子已经被作者于2013-5-10 17:43:34编辑过]

 

是不是因为两张表源自两个access数据库的原因?代码运行的后总是出错 未将对象引用设置到对象的实例

另外 能帮忙解释下If dr.IsNull(arr1(intA)) = False Then
        str = str & arr2(IntA) & " = \'" & arr1(IntA) & "\' and "
这两句的意思吗 谢谢了


--  作者:jiskin
--  发布时间:2013/5/10 19:24:00
--  
以下是引用don在2013-5-10 17:36:00的发言:
Select Case e.DataCol.name
    Case "零件名称","规格","材质"
        Dim flt As String
        Dim dr As DataRow = e.DataRow
        Dim v1 as String() = {"品名","规格","材质"}
        Dim v2 as String() = {"零件名称","规格","材质"}

        For n1 As Integer = 0 to v2.length-1
            if  dr.Isnull(s1) =False Then
                 flt+ =  " and " & v1(n1) & " = \'" & dr(v2(n1)) & "\'"
            End if
        next

        If fllt = Nothing Then
            dr("仓库_库位代码") = Nothing
        Else         
            Dim pr As DataRow = DataTables("库存总表").Find(flt.substring(5)) 
            If pr isnot nothing Then  dr("仓库_库位代码") = pr("储位")       
        End If
End Select

 

 if  dr.Isnull(n1) =False Then

                 flt+ =  " and " & v1(n1) & " = \'" & dr(v2(n1)) & "\'"

 

这句能帮忙解释下吗看不懂哈,  for next下 n1 不是 0 1 2 这几个数字么?

 


--  作者:jspta
--  发布时间:2013/5/11 17:04:00
--  
以下是引用jiskin在2013-5-10 19:15:00的发言:

 

是不是因为两张表源自两个access数据库的原因?代码运行的后总是出错 未将对象引用设置到对象的实例

另外 能帮忙解释下If dr.IsNull(arr1(intA)) = False Then
        str = str & arr2(IntA) & " = \'" & arr1(IntA) & "\' and "
这两句的意思吗 谢谢了

第一句话判断是否是空值,跟你原来一样

然后 进行表达式合成,

arr2是数组,你可以看下数组内容。这段循环的意思就是,循环数组中的名称,以达到判断该列是否为空的目的。

你可以加一条message.show(str)查看下这个合成了什么,跟你想要的代码是不是一致。