设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2061|回复: 4
打印 上一主题 下一主题

[表] 请教高指教如何通过do loop添加资料至另个表

[复制链接]
跳转到指定楼层
1#
发表于 2014-3-19 13:29:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我希望通过VBA代码对表进行数据归集,我是用 do loop对表进行添加箱号,但我想实现从table1资料添加到table2,如table2资料效果,即,每张订单每按数量10个分一箱,超了的就放在下一箱,我有点犯晕,烦请高手指点!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2014-3-20 14:06:06 | 只看该作者
  1. Public Sub test()
  2.     Dim N As Long: N = 10       ' 每箱数量
  3.     Dim L As Long               ' 每箱空余数
  4.     Dim No As Long              ' 箱号号
  5.     Dim OrderID As Long         ' 订单号
  6.     Dim RL As Long              ' 当前记录剩余数
  7.    
  8.     ' 清表2
  9.     CurrentProject.Connection.Execute "DELETE * FROM Table2"
  10.    
  11.     Dim rs As ADODB.Recordset   ' 遍历记录集
  12.    
  13.     Dim sql As String           ' SQL 语句用于查找Table1, 按订单号排序
  14.     sql = "select * from table1 order by 订单号"
  15.    
  16.     Set rs = CurrentProject.Connection.Execute(sql)
  17.    
  18.     Do While Not rs.EOF
  19.         If OrderID <> rs("订单号") Then
  20.             OrderID = rs("订单号")
  21.             No = 1
  22.             L = N
  23.         End If
  24.         
  25.         RL = rs("数量")
  26.         Do While RL > 0
  27.             If RL >= L Then
  28.                 ' 满一箱
  29.                 sql = "INSERT INTO Table2 (订单号, 产品, 数量, 箱号) VALUES (" & _
  30.                     OrderID & ", " & _
  31.                     "'" & rs("产品") & "', " & _
  32.                     L & ", " & _
  33.                     No & ")"
  34.                 RL = RL - L
  35.                 L = N
  36.                 No = No + 1
  37.             Else
  38.                 ' 不满一箱
  39.                 sql = "INSERT INTO Table2 (订单号, 产品, 数量, 箱号) VALUES (" & _
  40.                     OrderID & ", " & _
  41.                     "'" & rs("产品") & "', " & _
  42.                     RL & ", " & _
  43.                     No & ")"
  44.                 L = L - RL
  45.                 RL = 0
  46.             End If
  47.             CurrentProject.Connection.Execute sql
  48.         Loop
  49.         
  50.         rs.MoveNext
  51.     Loop
  52.     rs.Close
  53.     Set rs = Nothing
  54. End Sub
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2014-3-21 10:31:53 | 只看该作者

谢谢zhuyiwen老师!
4#
 楼主| 发表于 2014-3-21 10:48:23 | 只看该作者

看看老师您的版本,您的代码几段搞定,再看看自己这段,突然间觉得自己好菜鸟。唉!!!路漫漫其修远兮 吾将上下而求索

Public Sub test()

    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
   
   
   
    Dim DN As String 'DN
    Dim Item As String 'Item
   
    Dim s As Integer
    Dim Qty1 As Integer 'Qty1
    Dim Qty2 As Integer 'Qty2
    Dim Qty3, Qty4 As Integer 'Qty3,Qty4
    Dim xiang As Integer
   
    Dim SQL As String
   
    Dim mark
   
    s = 0
    Qty2 = 0
    xiang = 0
   
    rs.Open "TABLE1", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
      
   
    Do Until rs.EOF     '设定循环条件:直到记录集的指针移动到空记录时,停止循环
   
    Qty2 = rs.Fields("数量")
   

    If xiang = 0 Then
        xiang = 1
        DN = rs.Fields("订单号")
        Item = rs.Fields("产品")
        Qty3 = rs.Fields("数量")
        
        SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "','" & xiang & "')"
        DoCmd.SetWarnings False
        DoCmd.RunSQL SQL
    Else
   
        If DN = rs.Fields("订单号") Then  '订单号相同时
            Item = rs.Fields("产品")
            Qty4 = Qty3
            Qty3 = Qty3 + rs.Fields("数量")
            If Qty3 >= 10 Then             '大于10时
               
                If Qty3 > 20 Then
                s = 0
                Qty3 = Qty3 - 10
                Qty1 = Qty3 \ 10
               
                Qty4 = 10 - Qty4
                SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty4 & "','" & xiang & "')"
                DoCmd.RunSQL SQL
                xiang = xiang + 1
               
                Do
                s = s + 1
                SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & 10 & "','" & xiang & "')"
                DoCmd.RunSQL SQL
                xiang = xiang + 1
                Loop Until s = Qty1
               
                Qty3 = Qty3 Mod 10
               
                Else
                Qty3 = Qty3 - 10
                Qty2 = Qty2 - Qty3
               
                SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "' ,'" & xiang & "')"
                DoCmd.RunSQL SQL
                xiang = xiang + 1
                mark = "x"
                End If
               
                SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty3 & "','" & xiang & "')"
                DoCmd.RunSQL SQL
        
            Else                             '小于10时
                SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "','" & xiang & "')"
                DoCmd.RunSQL SQL
                mark = "y"
            End If
        
        Else                                 '订单号不相同时
            xiang = 1
            DN = rs.Fields("订单号")
            Item = rs.Fields("产品")
            Qty3 = rs.Fields("数量")
            
            If Qty2 > 10 Then
            Qty1 = Qty2 \ 10
            Qty3 = Qty2 Mod 10
            
            Do
            s = s + 1
            SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & 10 & "','" & xiang & "')"
            DoCmd.RunSQL SQL
            xiang = xiang + 1
            Loop Until s = Qty1
            
            SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty3 & "','" & xiang & "')"
            DoCmd.RunSQL SQL
            
            ElseIf Qty2 = 10 Then
            SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & 10 & "','" & xiang & "')"
            DoCmd.RunSQL SQL
            
            Else
            SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "','" & xiang & "')"
            DoCmd.RunSQL SQL
            End If
            mark = ""
        End If
   
    End If
   
    rs.MoveNext
        
    Loop    '循环
   
    If mark = "x" Then
        SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty3 & "','" & xiang & "')"
        DoCmd.RunSQL SQL
        DoCmd.SetWarnings True
    End If
   
    rs.Close    '关闭记录集
    Set rs = Nothing    '将记录集从内存中清除

End Sub
5#
 楼主| 发表于 2014-3-21 10:51:46 | 只看该作者
  1. Public Sub test()

  2.     Dim rs As ADODB.Recordset
  3.     Set rs = New ADODB.Recordset
  4.    
  5.    
  6.    
  7.     Dim DN As String 'DN
  8.     Dim Item As String 'Item
  9.    
  10.     Dim s As Integer
  11.     Dim Qty1 As Integer 'Qty1
  12.     Dim Qty2 As Integer 'Qty2
  13.     Dim Qty3, Qty4 As Integer 'Qty3,Qty4
  14.     Dim xiang As Integer
  15.    
  16.     Dim SQL As String
  17.    
  18.     Dim mark
  19.    
  20.     s = 0
  21.     Qty2 = 0
  22.     xiang = 0
  23.    
  24.     rs.Open "TABLE1", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  25.       
  26.    
  27.     Do Until rs.EOF     '设定循环条件:直到记录集的指针移动到空记录时,停止循环
  28.    
  29.     Qty2 = rs.Fields("数量")
  30.    

  31.     If xiang = 0 Then
  32.         xiang = 1
  33.         DN = rs.Fields("订单号")
  34.         Item = rs.Fields("产品")
  35.         Qty3 = rs.Fields("数量")
  36.         
  37.         SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "','" & xiang & "')"
  38.         DoCmd.SetWarnings False
  39.         DoCmd.RunSQL SQL
  40.     Else
  41.    
  42.         If DN = rs.Fields("订单号") Then  '订单号相同时
  43.             Item = rs.Fields("产品")
  44.             Qty4 = Qty3
  45.             Qty3 = Qty3 + rs.Fields("数量")
  46.             If Qty3 >= 10 Then             '大于10时
  47.                
  48.                 If Qty3 > 20 Then
  49.                 s = 0
  50.                 Qty3 = Qty3 - 10
  51.                 Qty1 = Qty3 \ 10
  52.                
  53.                 Qty4 = 10 - Qty4
  54.                 SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty4 & "','" & xiang & "')"
  55.                 DoCmd.RunSQL SQL
  56.                 xiang = xiang + 1
  57.                
  58.                 Do
  59.                 s = s + 1
  60.                 SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & 10 & "','" & xiang & "')"
  61.                 DoCmd.RunSQL SQL
  62.                 xiang = xiang + 1
  63.                 Loop Until s = Qty1
  64.                
  65.                 Qty3 = Qty3 Mod 10
  66.                
  67.                 Else
  68.                 Qty3 = Qty3 - 10
  69.                 Qty2 = Qty2 - Qty3
  70.                
  71.                 SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "' ,'" & xiang & "')"
  72.                 DoCmd.RunSQL SQL
  73.                 xiang = xiang + 1
  74.                 mark = "x"
  75.                 End If
  76.                
  77.                 SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty3 & "','" & xiang & "')"
  78.                 DoCmd.RunSQL SQL
  79.         
  80.             Else                             '小于10时
  81.                 SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "','" & xiang & "')"
  82.                 DoCmd.RunSQL SQL
  83.                 mark = "y"
  84.             End If
  85.         
  86.         Else                                 '订单号不相同时
  87.             xiang = 1
  88.             DN = rs.Fields("订单号")
  89.             Item = rs.Fields("产品")
  90.             Qty3 = rs.Fields("数量")
  91.             
  92.             If Qty2 > 10 Then
  93.             Qty1 = Qty2 \ 10
  94.             Qty3 = Qty2 Mod 10
  95.             
  96.             Do
  97.             s = s + 1
  98.             SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & 10 & "','" & xiang & "')"
  99.             DoCmd.RunSQL SQL
  100.             xiang = xiang + 1
  101.             Loop Until s = Qty1
  102.             
  103.             SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty3 & "','" & xiang & "')"
  104.             DoCmd.RunSQL SQL
  105.             
  106.             ElseIf Qty2 = 10 Then
  107.             SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & 10 & "','" & xiang & "')"
  108.             DoCmd.RunSQL SQL
  109.             
  110.             Else
  111.             SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty2 & "','" & xiang & "')"
  112.             DoCmd.RunSQL SQL
  113.             End If
  114.             mark = ""
  115.         End If
  116.    
  117.     End If
  118.    
  119.     rs.MoveNext
  120.         
  121.     Loop    '循环
  122.    
  123.     If mark = "x" Then
  124.         SQL = "INSERT INTO TABLE2 ([订单号],[产品],[数量],[箱号]) VALUES ('" & DN & "','" & Item & "','" & Qty3 & "','" & xiang & "')"
  125.         DoCmd.RunSQL SQL
  126.         DoCmd.SetWarnings True
  127.     End If
  128.    
  129.     rs.Close    '关闭记录集
  130.     Set rs = Nothing    '将记录集从内存中清除

  131. End Sub
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-30 21:47 , Processed in 0.101306 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表