以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  父表与子表写入数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=144548)

--  作者:禾成
--  发布时间:2019/12/24 9:19:00
--  父表与子表写入数据
我从excel提取数据写入FT,因extel表比较复杂,分成两部分提取(表头放到父表,明细放到子表),在table新增一列“单号”作为关联,提取出来的数据明细未能放到相对就的子表里,请老师出手帮忙,谢谢!
代码如下:
Dim dlg As New OpenFileDialog
dlg.Filter= "所有文件|*.*|Excel2003文件|*.xls|Excel2007文件|*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示")
    If MessageBox.Show("是否导入?","请确 认!",MessageBoxButtons.OKCancel,MessageBoxIcon.Question) = DialogResult.OK Then
        Dim Book As New XLS.Book(dlg.FileName)
        Dim Sheet_qj As XLS.Sheet = Book.Sheets(0)
        Dim dr As DataRow = DataTables("钢料程序单").AddNew
        dr("程序路径") = sheet_qj(1,2).value
        dr("制表日期") = sheet_qj(1,9).value
        dr("工件编号") = sheet_qj(2,2).value
        dr("客户") = sheet_qj(2,5).value
        dr("编程") = sheet_qj(2,9).value
        dr("分中方式") = sheet_qj(3,2).value
        dr("工件尺寸") = sheet_qj(3,5).value
        dr("预计时间") = sheet_qj(9,10).value
        dr("x") = sheet_qj(9,2).value
        dr("y") = sheet_qj(5,0).value
        dr("正x") = sheet_qj(11,3).value
        dr("正y") = sheet_qj(11,5).value
        dr("正z") = sheet_qj(11,9).value
        dr("负x") = sheet_qj(12,3).value
        dr("负y") = sheet_qj(12,5).value
        dr("负z") = sheet_qj(12,9).value
               
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("钢料程序单.钢料程序明细").StopRedraw()
        \'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"序号","NC名称","程序说明","刀头","刀具","刀长","刃长","xyz余量","z深度","加工时间","备注"}
        \'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 14 To Sheet.Rows.Count -12
            If Sheet(n,1).Value = "" Then Continue For
            Dim r As Row = Tables("钢料程序单.钢料程序明细").AddNew
            For m As Integer = 0 To nms.Length - 1
                r(nms(m)) = Sheet(n,m).Value
            Next
        Next
    End If
End If
MessageBox.Show("导入成功!","恭喜!")
Tables("钢料程序单.钢料程序明细").ResumeRedraw()


图片点击可在新窗口打开查看此主题相关图片如下:tim图片20191224091828.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2019/12/24 9:52:00
--  
生成一个单号,两个表都给这个列赋值同样的单号即可
--  作者:禾成
--  发布时间:2019/12/24 11:12:00
--  
我父表有生成单号的并且关联子表
就是下面这代码
Dim max As String
Dim idx As Integer
max = e.DataTable.Compute("Max(单号)","substring(单号,1,4) >= \'" & Date.Today.Year & "\'") 
If max > "" Then 
    idx = CInt(max.Substring(10,3)) + 1 \'获得最大编号的后三位顺序号,并加1
Else
    idx = 1 \'否则顺序号等于1
End If
e.DataRow("单号") = Format(1,"nc") & format(Date.Today, "yyyyMMdd") & Format(idx,"000")

--  作者:有点蓝
--  发布时间:2019/12/24 11:26:00
--  
Dim dr As DataRow = DataTables("钢料程序单").AddNew

改为

Dim dr As Row = Tables("钢料程序单").AddNew

--  作者:禾成
--  发布时间:2019/12/24 16:19:00
--  datatable与table
问题解决,谢谢有点蓝!这个问题我记住了