Foxtable(狐表)用户栏目专家坐堂 → 当前代码实现根据选择的文本文件,读取标题列创建对应的表,赋值对应的表字段值,也可实现对应的文件目录下批量导入数据,代码略显繁琐,老师们是否可以帮忙精简一下代码呢?


  共有3057人关注过本帖树形打印复制链接

主题:当前代码实现根据选择的文本文件,读取标题列创建对应的表,赋值对应的表字段值,也可实现对应的文件目录下批量导入数据,代码略显繁琐,老师们是否可以帮忙精简一下代码呢?

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
当前代码实现根据选择的文本文件,读取标题列创建对应的表,赋值对应的表字段值,也可实现对应的文件目录下批量导入数据,代码略显繁琐,老师们是否可以帮忙精简一下代码呢?  发帖心情 Post By:2022/2/24 1:45:00 [只看该作者]

当前代码实现根据选择的文本文件,读取标题列创建对应的表,赋值对应的表字段值,也可实现对应的文件目录下批量导入数据,代码略显繁琐,老师们是否可以帮忙精简一下代码呢?

Dim  dlg As  new  OpenFileDialog
dlg.Filter =  "文本文件|*.txt"
Dim t2 As WinForm.TextBox = e.Form.Controls("TextBox2")
Dim t1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim ck As WinForm.CheckBox = e.Form.Controls("是否批量导入")

If  dlg.ShowDialog =  DialogResult.OK Then
   
    If ck.Checked=True  Then   '选择批量导入
'先从其中一个文本里面读取字段列,然后判断表是否存在数据库中,如果不存在,就创建,反之就不创建表
        Dim Multi As String
        Dim  strs As  String =  FileSys.ReadAllText(dlg.FileName, Encoding.Default)
        t2.text=dlg.FileName
            Dim Values11() As String =  strs.Replace(vbcr,"").split(vblf)
            For  i1 As  Integer =  0 To  0
                Dim  rs As  String =  Values11(0)
                For  i As  Integer =  0 To  0
                    Dim  cs() As  String =  rs.Split(vbtab)
                    output.Show(cs(0))
                    Multi = cs(0)
                Next
            Next
       
        Dim ab As String="否"
        Dim lst1 As List(Of String)
        lst1 = Connections(" 委").GetTableNames
        For Each nm1 As String In lst1
            output.show(nm1)
            If t1.text=nm1  Then
                ab="是"   
            End If
        Next
        Dim Values() As String
        Values = Multi.split("|")
        If ab="是" Then
        Else
            Dim  Builder As  New  ADOXBuilder(" 委")  '要指定数据源名称
            Dim tbl  As ADOXTable
            Builder.Open()
            tbl = Builder.NewTable(t1.text) '创建表
            With tbl
                For Index1 As Integer = 0 To Values.Length - 1
                    .AddColumn(Values(Index1) ,ADOXType.String, 255)
                Next
            End With
            Builder.AddTable(tbl, True, True) '增加表
            Builder.Close()
           
            Dim  Builder1 As  New  ADOXBuilder(" 委")  '要指定数据源名称
            Builder1.Open() '打开ADOXBuilder
            With Builder1.Tables(t1.text)
                .AddColumn("日期" ,ADOXType.DateTime)  '增加日期型列
            End  With
            Builder1.Close() '关闭ADOXBuilder
           
        End If
        '遍历选择的文件所在根目录,然后遍历目录下的所有文件,然后开始赋值
        For Each File As String In FileSys.GetFiles(FileSys.GetParentPath(dlg.FileName))
 
            Dim  strs1 As  String =  FileSys.ReadAllText(File, Encoding.Default)
            t2.text=FileSys.GetParentPath(dlg.FileName)
            Dim Values111() As String =  strs1.Replace(vbcr,"").split(vblf)
 
            Dim cmd As New SQ LCo mmand
            cmd.Conne ction Name = " 委"
            Dim dt As DataTable
            Dim bbb As String ="SEL ECT * From {" & t1.text & "}"" "
            cmd.Comm andText = bbb
            dt = cmd.ExecuteReader()
           
            Dim tb1 As WinForm.Table = e.Form.Controls("Table1")
            tb1.Table.DataSource = dt
            tb1.Table.StopRedraw
           
           
            For i As Integer = 1 To Values111.length - 1
                Dim cs() As String = Values111(i).split("|")
                Dim r As Row = tb1.Table.AddNew
                For i1 As Integer = 0 To math.min(cs.Length-1, tb1.Table.cols.count - 1)
                    Dim bb As String=cs(i1).trim()
                    If bb > "" Then
                        If Values(i1).Contains("时间") OrElse Values(i1).Contains("日期") Then
                            Dim d As Date = cdate(bb)
                            r("日期")= Format(d, "yyyy-MM-dd")
                            r(i1) = cs(i1)
                        Else
                            r(i1) = cs(i1)
                        End If
                    End If
                Next
            Next
            tb1.Table.ResumeRedraw
        Next
 
    Else
        Dim Multi As String
        Dim  strs As  String =  FileSys.ReadAllText(dlg.FileName, Encoding.Default)
        t2.text=dlg.FileName
        Dim Values11() As String =  strs.Replace(vbcr,"").split(vblf)
        For  i1 As  Integer =  0 To  0
            Dim  rs As  String =  Values11(0)
            For  i As  Integer =  0 To  0
                Dim  cs() As  String =  rs.Split(vbtab)
                output.Show(cs(0))
                Multi = cs(0)
            Next
        Next
        Dim ab As String="否"
        Dim lst As List(Of String)
        lst = Connections(" 委").GetTableNames
        For Each nm As String In lst
            output.show(nm)
           
            If t1.text=nm  Then
                ab="是"
               
            End If
        Next
        Dim Values() As String
        Values = Multi.split("|")
        If ab="是" Then
        Else
            Dim  Builder As  New  ADOXBuilder(" 委")  '要指定数据源名称
            Dim tbl  As ADOXTable
            Builder.Open()
            tbl = Builder.NewTable(t1.text) '创建表
            With tbl
                For Index1 As Integer = 0 To Values.Length - 1
                    .AddColumn(Values(Index1) ,ADOXType.String, 255)
                Next
            End With
            Builder.AddTable(tbl, True, True) '增加表
            Builder.Close()
           
            Dim  Builder1 As  New  ADOXBuilder(" 委")  '要指定数据源名称
            Builder1.Open() '打开ADOXBuilder
            With Builder1.Tables(t1.text)
                .AddColumn("日期" ,ADOXType.DateTime)  '增加日期型列
            End  With
            Builder1.Close() '关闭ADOXBuilder
           
        End If
       
        Dim cmd As New SQ LC o mmand
        cmd.Conn ection Name = " 委"
        Dim dt As DataTable
        Dim bbb As String ="SEL E CT * From {" & t1.text & "}"" "
        cmd.Comma ndText = bbb
        dt = cmd.ExecuteReader()
       
        Dim tb1 As WinForm.Table = e.Form.Controls("Table1")
        tb1.Table.DataSource = dt
        tb1.Table.StopRedraw
       
       
        For i As Integer = 1 To Values11.length - 1
            Dim cs() As String = Values11(i).split("|")
            Dim r As Row = tb1.Table.AddNew
            For i1 As Integer = 0 To math.min(cs.Length-1, tb1.Table.cols.count - 1)
                Dim bb As String=cs(i1).trim()
                If bb > "" Then
                    If Values(i1).Contains("时间") OrElse Values(i1).Contains("日期") Then
                        Dim d As Date = cdate(bb)
                        r("日期")= Format(d, "yyyy-MM-dd")
                        r(i1) = cs(i1)
                    Else
                        r(i1) = cs(i1)
                    End If
                End If
            Next
        Next
        tb1.Table.ResumeRedraw
    End If
   
End If


 回到顶部