Foxtable(狐表)用户栏目专家坐堂 → [求助]查询与赋值新增行并存的问题


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

主题:[求助]查询与赋值新增行并存的问题

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


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
[求助]查询与赋值新增行并存的问题  发帖心情 Post By:2018/9/26 14:30:00 [只看该作者]

想弄一个功能,选中表中的几行,然后新增这几行,最后将选中行的内容赋值给新增的几行中,但是我写完代码执行后,发现效率低的可怜,在论坛也找了一些案例看了下,还是没有把问题解决好,请老师们帮我看下代码该如何改进:
Dim Result As DialogResult
Result = MessageBox.Show("是否要执行此操作", "提示", MessageBoxButtons.YesNo)
If Result = DialogResult.No Then
    Return
Else
    Dim t1 As Table = Tables("A")
    Dim mdbm As String
    If InputValue(mdbm, "编码输入","可以输入多个编码,用逗号进行分隔如:1001,1005,1008") Then
        Dim Parts() As String = mdbm.Split(",")
        If t1.Current Is Nothing Then Return 
        If t1.TopPosition < 0 Then Return   '如果选定区域不包括数据行
        Dim it As Win.Data.ITable = SYS.Tables(t1.Name)
        For i As Integer = it.TopRow To it.BottomRow
            Dim r As Win.Data.IRow = it.Rows(i)
            If r.Visible = False Then Continue For
            If r.IsNull("月份")= True  Then Continue For
            For Each nm As String In Parts
                Dim dr1 As Row = t1.AddNew
                For Each c As Col In t1.Cols
                    If c.name = "任务一_完成率" orelse c.name = "名称" Then Continue For
                    dr1(c.name) = r(c.name)
                    'messagebox.show(r(c.name))
                    dr1("编码") = nm
                    dr1("取值结果") = nothing
                    dr1("计算结果") = nothing
                    
                Next
            Next
        Next
    End If


End If
MessageBox.Show("执行完毕,请检查是否有错误!", "提示")

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/26 14:40:00 [只看该作者]

你这个和查询赋值无关。具体做一个实例发上来测试,说明你要做什么。

 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By:2018/9/26 15:14:00 [只看该作者]

好的
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:锁定.foxdb



 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By:2018/9/26 15:19:00 [只看该作者]

说明

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


 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By:2018/9/26 15:21:00 [只看该作者]

代码就一段
Dim t1 As Table = Tables("SPM_合同清单表")
Dim mdbm As String
If InputValue(mdbm, "编码输入","可以输入多个编码,用逗号进行分隔如:1001,1005,1008") Then
    Dim Parts() As String = mdbm.Split(",")
    If t1.Current Is Nothing Then Return
    If t1.TopPosition < 0 Then Return   '如果选定区域不包括数据行
    For i As Integer = t1.TopPosition To t1.BottomPosition
        Dim r As Row = t1.Rows(i)
        For Each nm As String In Parts
            Dim dr1 As Row = t1.AddNew
            For Each c As Col In t1.Cols
                If c.name = "任务一_完成率" OrElse c.name = "部门名称" Then Continue For
                dr1(c.name) = r(c.name)
                dr1("创建人") = nm
            Next
        Next
    Next
End If
MessageBox.Show("执行完毕,请检查是否有错误!", "提示")

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/26 15:25:00 [只看该作者]

选择了200行,填入了5个值,也就是1000行数据,测试2、3秒左右

 

Dim t1 As Table = Tables("SPM_合同清单表")
Dim mdbm As String
If InputValue(mdbm, "编码输入","可以输入多个编码,用逗号进行分隔如:1001,1005,1008") Then
    Dim Parts() As String = mdbm.Split(",")
    t1.StopRedraw
    For i As Integer = t1.TopPosition To t1.BottomPosition
        Dim r As Row = t1.Rows(i)
        For Each nm As String In Parts
            Dim dr1 As Row = t1.AddNew
            For Each c As Col In t1.Cols
                If c.name = "任务一_完成率" OrElse c.name = "部门名称" Then Continue For
                dr1(c.name) = r(c.name)
                dr1("创建人") = nm
            Next
        Next
    Next
    t1.ResumeRedraw
End If


 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By:2018/9/26 15:32:00 [只看该作者]

太感谢,厉害

 回到顶部