以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]数据引用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97530)

--  作者:feng1999
--  发布时间:2017/3/14 11:15:00
--  [求助]数据引用
老师好,这个项目中同种类型的元器件有三个相关的table,其中电解电容与电解电容检验记录建立了关联,主要是用于电解电容测试窗口中能够显示关联表的内容,我想问的问题是:
电解电容检验记录这个Table中的数据是否可以根据材料代号随机从电解电容检验记录数据库抽取10个数据用于展示呢?谢谢!

--  作者:feng1999
--  发布时间:2017/3/14 11:15:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试系统试用版-1.table


--  作者:狐狸爸爸
--  发布时间:2017/3/14 12:28:00
--  
关于随机抽取记录的问题,您可以先参考一下:
http://www.foxtable.com/webhelp/scr/2963.htm

有问题再留言。

--  作者:feng1999
--  发布时间:2017/3/14 13:25:00
--  
老师,你好,在同一个表中随机抽取记录根据帮助中介绍的可以操作,但是我现在要做的是电解电容检验记录这个table中的数据根据材料代号随机从电解电容检验记录数据库这个Table中抽取10条记录,首先是根据材料代号进行匹配,然后再随机抽取记录,如果实现这样的功能需要怎么操作呢?谢谢!

--  作者:有点色
--  发布时间:2017/3/14 14:52:00
--  
Dim bh As String = "3020220023"
Dim ids As String
Dim lst As new List(of String)
Dim drs As List(of DataRow) = DataTables("电解电容检验记录数据库").Select("材料代号 = \'" & bh & "\'")
If drs.count < 10 Then
    msgbox("结果不足10个")
Else
    Do
        Dim Id As Integer = rand.Next(0,drs.count)
        id = drs(id)("_Identify")
        If lst.Contains(id) =False Then
            lst.Add(id)
        End If
        ids = ids & id & ","
    Loop While lst.count <= 10 \'5是要抽取的行数
    msgbox(ids.trim(","))
End If

--  作者:feng1999
--  发布时间:2017/3/14 15:50:00
--  

老师好,上面这代码还是实现不了我所说的功能,下面缩写代码只能抽取电解电容检验记录数据库中的第一条记录写入到电解电容检验记录中,如何实现随机从电解电容检验记录数据库中抽取10条记录写入电解电容检验记录table中呢?谢谢!

If e.DataCol.Name = "材料代号" Then

    Dim nms() As String = {"外形尺寸_本体直径","外形尺寸_本体高","电容量测试值","损耗角正切测试值","漏电流测试值"}

    Dim dr1 As DataRow

    dr1 = DataTables("电解电容检验记录数据库").Find("[材料代号] = \'" & e.NewValue & "\'")

    If dr1 IsNot Nothing Then

        For Each nm As String In nms

            e.DataRow(nm) =dr1(nm)

        Next

    End If

       End  If


--  作者:有点蓝
--  发布时间:2017/3/14 16:29:00
--  

If e.DataCol.Name = "材料代号" Then
    Dim nms() As String = {"外形尺寸_本体直径","外形尺寸_本体高","电容量测试值","损耗角正切测试值","漏电流测试值","材料代号"}
   
    Dim drs As List(of DataRow) = DataTables("电解电容检验记录数据库").Select("材料代号 = \'" & e.NewValue & "\'")
    systemready = False
    If drs.count <= 10 Then
        For Each dr As DataRow In drs
            Dim dr2 As DataRow = e.DataTable.Addnew
            For Each nm As String In nms
                dr2(nm) =dr(nm)
            Next
        Next
       
    Else
        Dim i As Integer = 1
        Do
            Dim Id As Integer = rand.Next(0,drs.count)
            Dim dr5 As DataRow = drs(id)
            Dim dr3 As DataRow = e.DataTable.Addnew
            For Each nm As String In nms
                dr3(nm) =dr5(nm)
            Next
            i += 1
        Loop While i <= 10
    End If
    e.DataRow.Delete
    systemready = True
End  If


--  作者:feng1999
--  发布时间:2017/3/15 13:10:00
--  
这样设计可以实现电解电容检验记录这个Table中的数据是否可以根据材料代号随机从电解电容检验记录数据库抽取10个数据,但是电解电容检验记录与电解电容关联列的内容就无法显示了呢?(这是三个不同的table,分别用于不同的功能)


--  作者:有点色
--  发布时间:2017/3/15 13:33:00
--  
Select Case e.DataCol.name
    Case "供应商","暂收单号","材料代号"
        If e.DataRow.IsNull("材料代号") = False AndAlso e.DataRow.IsNull("供应商") = False AndAlso e.DataRow.IsNull("暂收单号") = False Then
            Dim nms() As String = {"外形尺寸_本体直径","外形尺寸_本体高","电容量测试值","损耗角正切测试值","漏电流测试值","材料代号"}
           
            Dim drs As List(of DataRow) = DataTables("电解电容检验记录数据库").Select("材料代号 = \'" & e.DataRow("材料代号") & "\'")
            systemready = False
            If drs.count <= 10 Then
                For Each dr As DataRow In drs
                    Dim dr2 As DataRow = e.DataTable.Addnew
                    For Each nm As String In nms
                        dr2(nm) =dr(nm)
                    Next
                    dr2("供应商") = e.DataRow("供应商")
                    drs("暂收单号") = e.DataRow("暂收单号")
                Next
               
            Else
                Dim i As Integer = 1
                Do
                    Dim Id As Integer = rand.Next(0,drs.count)
                    Dim dr5 As DataRow = drs(id)
                    Dim dr3 As DataRow = e.DataTable.Addnew
                    For Each nm As String In nms
                        dr3(nm) =dr5(nm)
                    Next
                    dr3("供应商") = e.DataRow("供应商")
                    dr3("暂收单号") = e.DataRow("暂收单号")
                    i += 1
                Loop While i <= 10
            End If
            e.DataRow.Delete
            systemready = True
        End If
    End  Select

--  作者:feng1999
--  发布时间:2017/3/15 13:49:00
--  

老师好:下面所写代码所实现的功能是电解电容电解电容检验记录通过编号建立关联,("供应商","暂收单号","日期","采购单号","材料代号")根据编号自动写入,电解电容检验记录根据材料代号随机从电解电容检验记录数据库抽取一行,请问这个代码有什么不严谨的地方吗?(代码分两部分,代码太长,一次上传不了)

If e.DataCol.Name = "编号" Then

    Dim nms() As String = {"供应商","暂收单号","日期","采购单号","材料代号"}

    If e.NewValue Is Nothing Then

        For Each nm As String In nms

            e.DataRow(nm) = Nothing

        Next

    Else

        Dim dr As DataRow

        dr = DataTables("电解电容").Find("[编号] = \'" & e.NewValue & "\'")

        If dr IsNot Nothing

            For Each nm As String In nms

                e.DataRow(nm) = dr(nm)

            Next

        End If

    End If

End If