Foxtable(狐表)用户栏目专家坐堂 → [求助]关于一个编程的问题,按条件插入号


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

主题:[求助]关于一个编程的问题,按条件插入号

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


加好友 发短信
等级:幼狐 帖子:166 积分:1946 威望:0 精华:0 注册:2012/12/26 15:47:00
[求助]关于一个编程的问题,按条件插入号  发帖心情 Post By:2014/10/23 18:09:00 [只看该作者]

下边是我要达到的效果,我自己编的效果不是很好,肯请大家的帮助

我自己编的当中最大的问题是无法判断1号,如果没有1号,只有从2号开始

那么即使插入1个号也是只能从3号开始插入,而且代码编的很繁复。

 


此主题相关图片如下:qq截图20141023180235.jpg
按此在新窗口浏览图片

 

 

‘--------下面是我自己编的代码

 


 

Dim st As Date = Date.Now '将开始时间保存在变量st中

Dim dt As Date

Tables("packinglist").Sort = "ctno"  '先进行排序
Dim n As Integer   '= Tables("packinglist").Compute ("count(ctno)")  '计算总行数

Dim js As WinForm.TextBox = e.Form.Controls("ct")
Dim ct As Integer = js.Value  '把件数改为整数
Dim drd As Row = Tables("rukulist_table1").Current

Dim ttl As List(of String) = DataTables("packinglist").GetValues("ctno")
For Each t As String In ttl
    n = n + 1
Next

Dim mxn As Integer = DataTables("packinglist").Compute("max(ctno)")
Dim min As Integer = DataTables("packinglist").Compute("min(ctno)")

If n = 0 Then  '如果没有任何箱号,那么就从1号开始
    For i As Integer = 1 To ct
        Dim dr As DataRow = DataTables("Packinglist").AddNew
        dr("ctno") = i
        dr.Save
    Next
   MessageBox.Show("完成啦`(*∩_∩*)′! 共耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数
End If


If mxn - min + 1 = n Then  '如果最大号 减去 最小号 加 1个 等于 总件数, 那么表示中间没有可以插入的号码了
100:
    For i As Integer = 1 To ct
        Dim dr As DataRow = DataTables("Packinglist").AddNew
        dr("ctno") = mxn + i
        dr.Save
    Next
    MessageBox.Show("完成啦`(*∩_∩*)′! 共耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数
    Return
End If


If mxn - min + 1 <> n Then  '如果最大号 减去 最小号 加 1个 不等于 总件数, 那么表示中间有可以插入的箱号

        Dim mm As List(of String) = DataTables("packinglist").GetValues("ctno")   '用这个就不能从1号开始,必须要有1号才可以从1号开始
        For Each m As String In mm
            Dim nn As Integer = CInt(m)
            If nn < mxn Then  '如果当前号码小于最大号
                Dim nx As Integer = DataTables("packinglist").Compute("min(ctno)","ctno > '" & nn & "'") '找到比当前号码大的箱号
                If nx - nn - 1 >= ct Then
                    For i As Integer = 1 To ct
                        Dim dr As DataRow = DataTables("Packinglist").AddNew
                        dr("ctno") = nn + i
                        dr.Save
                    Next
                    MessageBox.Show("完成啦`(*∩_∩*)′! 共耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数
                    Return
                End If
            End If


        If nn = mxn Then  '如果当前号码等于最大号
            goto 100
        End If
    Next
End If


 


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


加好友 发短信
等级:幼狐 帖子:166 积分:1946 威望:0 精华:0 注册:2012/12/26 15:47:00
  发帖心情 Post By:2014/10/23 18:26:00 [只看该作者]

这个代码之前也编过一个,笨方法,从1号开始核对上一个号是否满足条件

数量少的时候还行,但是行数有2,3千的时候就很慢了

因为有时候数字是有2,3,2000这种时候。

所以改成上边的方式,速度是快了一些,但是有点问题

[此贴子已经被作者于2014-10-23 18:28:29编辑过]

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


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

 不知道你想做什么,再有,例子发上来。

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


加好友 发短信
等级:幼狐 帖子:166 积分:1946 威望:0 精华:0 注册:2012/12/26 15:47:00
  发帖心情 Post By:2014/10/23 20:52:00 [只看该作者]

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

上传了列子了


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


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

 你的逻辑是什么。

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


加好友 发短信
等级:幼狐 帖子:166 积分:1946 威望:0 精华:0 注册:2012/12/26 15:47:00
  发帖心情 Post By:2014/10/23 21:14:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20141023211546.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2014/10/23 21:35:00 [只看该作者]

接龙游戏,4条龙。。。

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


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

 这个意思?

 

Dim count As Integer = 2

Dim dt As DataTable = DataTables("表A")
Dim nums As List(of String) = dt.GetValues("第一列")

Dim pn As Integer = 0

For i As Integer = 0 To nums.Count - 1
    If nums(i) - pn > count Then
        Exit For
    Else
        pn = nums(i)
    End If
Next

For i As Integer = 1 To count
    Dim nd As DataRow = dt.AddNew
    nd("第一列") = pn + i
Next


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


加好友 发短信
等级:小狐 帖子:321 积分:1916 威望:0 精华:0 注册:2014/8/24 13:36:00
  发帖心情 Post By:2014/10/23 21:46:00 [只看该作者]

增加辅助列,放置上下差额

 

find 大于等于插入数的行

 

累加插入


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


加好友 发短信
等级:幼狐 帖子:166 积分:1946 威望:0 精华:0 注册:2012/12/26 15:47:00
  发帖心情 Post By:2014/10/23 21:55:00 [只看该作者]

是的,是这个样子图片点击可在新窗口打开查看,太厉害了

 回到顶部
总数 11 1 2 下一页