设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 5713|回复: 13
打印 上一主题 下一主题

[模块/函数] 怎样按条件将一条记录拆分为几条记录?求助!

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-23 08:45:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 ljp518 于 2011-9-23 08:46 编辑

由于银行控制>=5万元的付款,需要将贷方数>=5万元的付款记录,按姓名拆分成<5万元付款的若干条记录,不知vba函数怎样写,求助各位老师和版主!谢谢

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
14#
 楼主| 发表于 2011-10-8 15:00:35 | 只看该作者
本帖最后由 ljp518 于 2011-10-8 15:02 编辑

谢谢Henry D. Sy 老师和yehf老师,感谢两位老师的帮助!{:soso_e163:}{:soso_e163:}
13#
发表于 2011-10-8 14:42:40 | 只看该作者
Henry D. Sy 发表于 2011-10-8 09:47
lz要求,同一个人或者不同姓名,所有的尾数不同

增加两个变量进行换算,如果一拆分的尾数都要求不同,数据量大的话,也会不成立的,不知道楼主的数据量有多少条
Private Sub Command2_Click()
    Dim rst    As Recordset
    Dim rst1   As Recordset
    Dim i      As Byte
    Dim j      As Byte
    Dim k      As Integer
    j = 0
    k = 0
    CurrentDb.Execute "delete * from newtbl"
    Set rst = CurrentDb.OpenRecordset("select * from 记录表 where 贷方>0 ")
    rst.MoveLast
    rst.MoveFirst
    Set rst1 = CurrentDb.OpenRecordset("newtbl")
    With rst1
        Do Until rst.EOF
            For i = 1 To Int(rst!贷方 / 50000)
                .AddNew
                !姓名 = rst(1)
                !贷方 = 49999 - j
                .Update
                j = j + 1
                k = k + j
            Next
            .AddNew
            !姓名 = rst(1)
            !贷方 = rst(3) - 49999 * (i - 1) + IIf(rst!贷方 > 50000, k - i + 1, 0)
            .Update
            rst.MoveNext
            k = 0
        Loop
    End With
    rst1.Close
    Set rst1 = Nothing
    rst.Close
    Set rst = Nothing
End Sub
12#
发表于 2011-10-8 09:47:23 | 只看该作者
本帖最后由 Henry D. Sy 于 2011-10-8 09:47 编辑
yehf 发表于 2011-9-30 16:37
再简化下代码
Private Sub Command2_Click()
    Dim rst    As Recordset


lz要求,同一个人或者不同姓名,所有的尾数不同
11#
 楼主| 发表于 2011-10-8 08:55:51 | 只看该作者
yehf老师!感谢你把代码有简化,使得运行更快!{:soso_e163:}
10#
发表于 2011-9-30 16:37:24 | 只看该作者
再简化下代码
Private Sub Command2_Click()
    Dim rst    As Recordset
    Dim rst1   As Recordset
    Dim i      As Byte
    CurrentDb.Execute "delete * from newtbl"
    Set rst = CurrentDb.OpenRecordset("select * from 记录表 where 贷方>0")
    rst.MoveLast
    rst.MoveFirst
    Set rst1 = CurrentDb.OpenRecordset("newtbl")
    With rst1
        Do Until rst.EOF
            For i = 1 To Int(rst!贷方 / 50000)
               MsgBox rst!姓名
                .AddNew
                !姓名 = rst(1)
                !贷方 = 49999
                .Update
            Next
            .AddNew
            !姓名 = rst(1)
            !贷方 = rst(3) - 49999 * (i - 1)
            .Update
            rst.MoveNext
        Loop
    End With
    rst1.Close
    Set rst1 = Nothing
    rst.Close
    Set rst = Nothing
End Sub
9#
 楼主| 发表于 2011-9-30 09:44:35 | 只看该作者
谢谢Henry D. Sy老师的认真负责,值得敬佩的老师!按此程序进行修改。{:soso_e181:}
8#
发表于 2011-9-28 21:36:30 | 只看该作者

RE: 怎样按条件将一条记录拆分为几条记录?求助!

ljp518 发表于 2011-9-28 09:07
太感谢roych 版主了,由于这几天忙没有上论坛,本应在第一时间感谢!净拖了5天,真不好意思, ...

不客气。毛主席教导我们,要为人民服务嘛。能解决大家的问题,是我们莫大的荣幸。
7#
发表于 2011-9-28 15:07:25 | 只看该作者
  1. Private Sub Command2_Click()
  2.     Dim rs As New ADODB.Recordset
  3.     Dim rs1 As New ADODB.Recordset
  4.     Dim rs2 As New ADODB.Recordset
  5.     Dim cnn As New ADODB.Connection
  6.     Dim str As String
  7.     Dim str1 As String
  8.     Dim str2 As String
  9.     Dim x As Double
  10.     Dim y As Double
  11.     Dim curM As Double
  12.     Dim i As Integer

  13.     On Error GoTo Command2_Click_Error

  14.     Set cnn = CurrentProject.Connection
  15.     i = 1
  16.     CurrentDb.Execute "delete * from newtbl"
  17.     Me.Newtbl_子窗体.Requery

  18.     str = "SELECT DISTINCT 记录表.姓名 FROM 记录表"
  19.     rs.Open str, cnn, adOpenKeyset, adLockReadOnly
  20.     Do Until rs.EOF
  21.         y = 50000
  22.         str1 = "SELECT 贷方 FROM 记录表 WHERE 姓名='" & rs.Fields(0) & "' And Not 贷方 Is Null"
  23.         rs1.Open str1, cnn, adOpenKeyset, adLockReadOnly
  24.         x = rs1.Fields(0)

  25.         str2 = "SELECT * FROM Newtbl"
  26.         rs2.Open str2, cnn, adOpenKeyset, adLockOptimistic
  27.         Do Until x <= 0

  28.             If x >= 50000 Then
  29.                 curM = y - i
  30.                 x = x - y + i
  31.             Else
  32.                 curM = x
  33.                 x = x - y
  34.             End If
  35.             i = i + 1
  36.             rs2.AddNew
  37.             rs2.Fields(0) = rs.Fields(0)
  38.             rs2.Fields(1) = curM
  39.             rs2.Update
  40.         Loop
  41.         rs2.Close
  42.         rs1.Close
  43.         rs.MoveNext
  44.     Loop
  45.     rs.Close
  46.     Set rs = Nothing
  47.     Set rs1 = Nothing
  48.     Set rs2 = Nothing
  49.     Set cnn = Nothing
  50.     Me.Newtbl_子窗体.Requery

  51.     On Error GoTo 0
  52.     Exit Sub

  53. Command2_Click_Error:

  54.     MsgBox "Error " & Err.Number & " (" & Err.Description & ")"
  55. End Sub
复制代码
6#
 楼主| 发表于 2011-9-28 09:07:09 | 只看该作者
太感谢roych 版主了,{:soso_e179:}由于这几天忙没有上论坛,本应在第一时间感谢!净拖了5天,真不好意思,表示歉意!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-22 06:08 , Processed in 0.170061 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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