Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3517|回复: 16

[已解决]请MXG825再帮助修改代码(修改数据库数据的代码)

[复制链接]
发表于 2011-10-9 08:39 | 显示全部楼层 |阅读模式
本帖最后由 zsd5237 于 2011-10-9 08:42 编辑

首先先谢谢你帮我修改了删除代码(我已评了最佳答案,但不知系统是否将金币转给予你了)。下面一段代码是修改代码,可以用。但有一个问题:如果是修改ACC数据库的第一个编号的数据时,属这个编号的第一行数据(也是数据库的第一行数据)不修改,但修改第二个编号数据时,代码执行正常,我不知问题出在何处,请老师指导修整(可用原贴一楼附件测试):Sub 修改()
    Dim i As Long
    Dim j As Long
    Dim x As Long
    Dim y As Long
    Dim T, t1
    Dim db1 As Database '声明数据库变量
    Dim RS1 As Recordset '声明指针

    T = Timer
    Set db1 = OpenDatabase(ThisWorkbook.Path & "\产品出入库数据库.mdb")
    Set RS1 = db1.OpenRecordset(Name:="出入库数据表", Type:=dbOpenDynaset)

    For x = 6 To 12
        If Sheet9.Cells(x, 2) <> "" Then
            y = y + 1
        End If
    Next x    '新记录条数
    Do
        RS1.FindNext "编号='" & Sheet9.Range("K4").Value & "'"
        i = i + 1
    Loop Until RS1.NoMatch = True
    If y <> i - 1 Then
        MsgBox "表单的数据行数与原数据库内的行数不一致不能修改!"
        RS1.Close '结束
        db1.Close
        Exit Sub
    Else
        With RS1
            .MoveFirst '将记录指针移至第一条

            For i = 6 To 12
                If Sheet9.Cells(i, 2) <> "" Then
                    .FindNext "编号='" & Sheet9.Range("K4") & "'"
                    .Edit '编辑修改

                    .Fields("客户部门编码") = Sheet9.Range("B4").Value
                    .Fields("客户部门名称") = Sheet9.Range("C4").Value
                    .Fields("日期") = Sheet9.Range("I4").Value
                    .Fields("编号") = Sheet9.Range("K4").Value
                    .Fields("出入库单号") = Sheet9.Range("M4").Value
                    .Fields("出入库类型编码") = Sheet9.Range("N4").Value
                    .Fields("出入库类型名称") = Sheet9.Range("O4").Value
                    .Fields("单据类型") = Sheet9.Range("E2").Value
                    .Fields("地址") = Sheet9.Range("D4").Value
                    .Fields("企业性质") = Sheet9.Range("E4").Value
                    .Fields("大区负责人") = Sheet9.Range("F4").Value
                    .Fields("分区负责人") = Sheet9.Range("G4").Value
                    .Fields("业务员") = Sheet9.Range("H4").Value
                    .Fields("录入员姓名") = Sheet9.Range("F13").Value
                    .Fields("复核员姓名") = Sheet9.Range("D13").Value

                    .Fields("产品编码") = Sheet9.Cells(i, 2)
                    .Fields("产品名称") = Sheet9.Cells(i, 3)
                    .Fields("规格") = Sheet9.Cells(i, 4)
                    .Fields("计量单位") = Sheet9.Cells(i, 5)
                    .Fields("单价") = Sheet9.Cells(i, 6)
                    .Fields("成本单价") = Sheet9.Cells(i, 7)
                    .Fields("入库包数") = Sheet9.Cells(i, 8)
                    .Fields("入库数量") = Sheet9.Cells(i, 9)
                    .Fields("入库成本") = Sheet9.Cells(i, 10)
                    .Fields("出库包数") = Sheet9.Cells(i, 11)
                    .Fields("其中送包数") = Sheet9.Cells(i, 12)
                    .Fields("出库数量") = Sheet9.Cells(i, 13)
                    .Fields("销售金额") = Sheet9.Cells(i, 14)
                    .Fields("出库成本") = Sheet9.Cells(i, 15)
                    RS1.Update '把记录保存到数据库
                End If
            Next i
        End With

        MsgBox "数据修改成功"
    End If
    t1 = Timer - T ' 计算总时间
    RS1.Close
    db1.Close
End Sub


最佳答案
2011-10-11 16:06
完成了  请到这个贴子下载
简简单单的 出货单操作系统!EXCEL+ACCESS+SQL
http://www.excelpx.com/forum.php ... 8&fromuid=62147
发表于 2011-10-9 09:07 | 显示全部楼层
内容修改数据,建议先删除,后新增,
回复

使用道具 举报

 楼主| 发表于 2011-10-9 11:00 | 显示全部楼层
mxg825 发表于 2011-10-9 09:07
内容修改数据,建议先删除,后新增,

不能删除原数据,只能修改,请老师费心。
回复

使用道具 举报

发表于 2011-10-9 12:07 | 显示全部楼层
  1. Sub 修改()
  2.     Dim i As Long
  3.     Dim j As Long
  4.     Dim x As Long
  5.     Dim y As Long
  6.     Dim T, t1
  7.     Dim db1 As Database '声明数据库变量
  8.     Dim RS1 As Recordset '声明指针

  9.     T = Timer
  10.     Set db1 = OpenDatabase(ThisWorkbook.Path & "\产品出入库数据库.mdb")
  11.     Set RS1 = db1.OpenRecordset(Name:="出入库数据表", Type:=dbOpenDynaset)

  12.     For x = 6 To 12
  13.         If Sheet9.Cells(x, 2) <> "" Then
  14.             y = y + 1
  15.         End If
  16.     Next x    '新记录条数
  17.     Do
  18.         RS1.FindNext "编号='" & Sheet9.Range("K4").Value & "'"
  19.         i = i + 1
  20.     Loop Until RS1.NoMatch = True
  21.     If y <> i Then
  22.         MsgBox "表单的数据行数与原数据库内的行数不一致不能修改!"
  23.         RS1.Close '结束
  24.         db1.Close
  25.         Exit Sub
  26.     Else
  27.         With RS1
  28.             .MoveFirst '将记录指针移至第一条
  29.             .Filter = "编号='" & Sheet9.Range("K4") & "'" 'MXG825 加这一句,先找到第一条记录
  30.             For i = 6 To 12
  31.                 If Sheet9.Cells(i, 2) <> "" Then
  32.                
  33.                     .Edit '编辑修改

  34.                     .Fields("客户部门编码") = Sheet9.Range("B4").Value
  35.                     .Fields("客户部门名称") = Sheet9.Range("C4").Value
  36.                     .Fields("日期") = Sheet9.Range("I4").Value
  37.                     .Fields("编号") = Sheet9.Range("K4").Value
  38.                     .Fields("出入库单号") = Sheet9.Range("M4").Value
  39.                     .Fields("出入库类型编码") = Sheet9.Range("N4").Value
  40.                     .Fields("出入库类型名称") = Sheet9.Range("O4").Value
  41.                     .Fields("单据类型") = Sheet9.Range("E2").Value
  42.                     .Fields("地址") = Sheet9.Range("D4").Value
  43.                     .Fields("企业性质") = Sheet9.Range("E4").Value
  44.                     .Fields("大区负责人") = Sheet9.Range("F4").Value
  45.                     .Fields("分区负责人") = Sheet9.Range("G4").Value
  46.                     .Fields("业务员") = Sheet9.Range("H4").Value
  47.                     .Fields("录入员姓名") = Sheet9.Range("F13").Value
  48.                     .Fields("复核员姓名") = Sheet9.Range("D13").Value

  49.                     .Fields("产品编码") = Sheet9.Cells(i, 2)
  50.                     .Fields("产品名称") = Sheet9.Cells(i, 3)
  51.                     .Fields("规格") = Sheet9.Cells(i, 4)
  52.                     .Fields("计量单位") = Sheet9.Cells(i, 5)
  53.                     .Fields("单价") = Sheet9.Cells(i, 6)
  54.                     .Fields("成本单价") = Sheet9.Cells(i, 7)
  55.                     .Fields("入库包数") = Sheet9.Cells(i, 8)
  56.                     .Fields("入库数量") = Sheet9.Cells(i, 9)
  57.                     .Fields("入库成本") = Sheet9.Cells(i, 10)
  58.                     .Fields("出库包数") = Sheet9.Cells(i, 11)
  59.                     .Fields("其中送包数") = Sheet9.Cells(i, 12)
  60.                     .Fields("出库数量") = Sheet9.Cells(i, 13)
  61.                     .Fields("销售金额") = Sheet9.Cells(i, 14)
  62.                     .Fields("出库成本") = Sheet9.Cells(i, 15)
  63.                     .Update '把记录保存到数据库
  64.                     .FindNext "编号='" & Sheet9.Range("K4") & "'" '这句换到后面
  65.                 End If
  66.             Next i
  67.         End With

  68.         MsgBox "数据修改成功"
  69.     End If
  70.     t1 = Timer - T ' 计算总时间
  71.     RS1.Close
  72.     db1.Close
  73. End Sub
复制代码
回复

使用道具 举报

发表于 2011-10-9 12:28 | 显示全部楼层
好强大的代码哟
回复

使用道具 举报

 楼主| 发表于 2011-10-9 21:13 | 显示全部楼层
MXG825老师,代码中加上.Filter = "编号='" & Sheet9.Range("K4") & "'" 'MXG825 加这一句,先找到第一条记录这名后,修改ACC数据库的第一个编号的数据时,属这个编号的第一行数据(也是数据库的第一行数据)能够修改,但不知为何在修改第二个编号以及以下编号数据时,代码执行不正常,出现代码中的这一句话:MsgBox "表单的数据行数与原数据库内的行数不一致不能修改!",实际上通过查询的数据与数据库内的行数是一致的。敬请老师再找一找原因。
回复

使用道具 举报

发表于 2011-10-9 22:04 | 显示全部楼层
能换种写法吗?
这你种写法不太通用!

你可以搜一下 我的菲林输出系统!
回复

使用道具 举报

 楼主| 发表于 2011-10-9 23:00 | 显示全部楼层
mxg825 发表于 2011-10-9 22:04
能换种写法吗?
这你种写法不太通用!

对不起,我搜不出来,搜出来的菲林输出系统都是设备,换种写法我不会,请多多指教,谢谢!
回复

使用道具 举报

发表于 2011-10-9 23:12 | 显示全部楼层
本帖最后由 mxg825 于 2011-10-9 23:43 编辑

回复 zsd5237 的帖子

菲林输出 管理系统【新鲜出炉】
http://www.excelpx.com/forum.php?mod=viewthread&tid=180930&fromuid=62147



明天再帮你 做大手术,全部换一次血
回复

使用道具 举报

 楼主| 发表于 2011-10-10 00:50 | 显示全部楼层
谢谢,等你做大手术,全部换一次血。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 22:16 , Processed in 0.310385 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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