设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[Access本身] 高版本ACCESS莫明其妙的记录移动止于198错误

[复制链接]
跳转到指定楼层
1#
发表于 2016-8-20 22:10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 a63521557 于 2016-8-20 22:12 编辑

同一程序,在Access 2007及其以上版本中,在循环批量处理“子窗体/子报表”数据时,处理到198条记录后,弹出错误信息“您不能转到指定的记录”,并中止继续处理,而在Access 2003版本下运行则正常。

示例程序源代码:

Option Compare Database

Private Sub Form_Current()
    DoCmd.Restore
End Sub

Private Sub Command01_Click()
On Error GoTo Err_Command01_Click

    Dim strSQL, stDocName As String
    Dim fgh, zjl, jls, wjs, js, js1, js2 As Long
   
For fgh = 1 To 9
If DCount("*", "CX18_发送短信数据", "[分工号]=" & fgh) > 0 Then

    Me.查询表.SourceObject = ""
    strSQL = "Delete * from 短信"
    DoCmd.RunSQL strSQL
    strSQL = "INSERT INTO 短信 SELECT CX18_发送短信数据.* FROM CX18_发送短信数据 WHERE [分工号]=" & fgh
    DoCmd.RunSQL strSQL
    Me.查询表.SourceObject = "表.短信"

    Me.查询表.SetFocus
    DoCmd.GoToRecord , , acFirst
    Do While Me.查询表.Form.Recordset.RecordCount > Me.查询表.Form.CurrentRecord
        Me.查询表.Form!编号 = Me.查询表.Form.CurrentRecord
        DoCmd.GoToRecord , , acNext
    Loop
    Me.查询表.Form!编号 = Me.查询表.Form.CurrentRecord
    DoCmd.GoToRecord , , acFirst

    zjl = Me.查询表.Form.Recordset.RecordCount                          '总记录
    jls = DLookup("[数值]", "数据常量", "[计算常量] = '短信每页数'")    '页记录数
    wjs = Int(zjl / jls) + IIf(zjl / jls > Int(zjl / jls), 1, 0)        '文件数
    For js = 1 To wjs
        stDocName = Mid(CurrentProject.Name, 1, 4) & "年" & Mid(CurrentProject.Name, 5, 2) & "月工资短信数据" & fgh & "-" & wjs & "-" & js
        js1 = (js - 1) * jls + 1
        js2 = IIf(js = wjs, zjl, js * jls)
        strSQL = "SELECT 移动电话, 发送短信 FROM 短信 WHERE 编号>=" & js1 & " And 编号<=" & js2
        VBAJB (strSQL)
        DoCmd.TransferSpreadsheet acExport, 8, "00_临时数据查询", CurrentProject.Path & "\" & stDocName & ".xls", False
        MsgBox " 已完成(" & CurrentProject.Path & "\" & stDocName & ".xls)" & vbLf & vbLf _
            & "文件的导出,请修改其文件以适应短信发送!", vbOKOnly + vbInformation, "操作提示"
    Next js
End If
Next fgh

Exit_Command01_Click:
    Exit Sub

Err_Command01_Click:
    MsgBox Err.Description
    Resume Exit_Command01_Click

End Sub

Private Sub Form_Close()

    Dim strSQL As String

    strSQL = "Delete * from 短信"
    CurrentDb.Execute strSQL

End Sub

'创建临时数据表
Public Function VBAJB(strSQL As String)
    Dim i As Integer

    '删除 00_临时数据查询
    For i = 0 To CurrentDb.QueryDefs.Count - 1
        If CurrentDb.QueryDefs(i).Name = "00_临时数据查询" Then
            DoCmd.DeleteObject acQuery, CurrentDb.QueryDefs(i).Name
            Exit For
        End If
    Next i

    '创建 00_临时数据查询
    CurrentProject.Connection.Execute "Create View 00_临时数据查询 as " & strSQL

End Function

本帖子中包含更多资源

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

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

点击这里给我发消息

2#
发表于 2016-8-20 22:25:53 | 只看该作者
应该在往下移动 时判断 是否已经到 记录尾 或是否还有记录
建议 直接用recordset处理 会不会更好?
那样可使用rs.eof bof来判断
3#
 楼主| 发表于 2016-8-20 22:53:37 | 只看该作者
tmtony 发表于 2016-8-20 22:25
应该在往下移动 时判断 是否已经到 记录尾 或是否还有记录
建议 直接用recordset处理 会不会更好?
那样 ...

当记录数少于198时,处理过程一切正常,大于198时在2003版本下也正常,然而在2007及以上版本时就出现错误了,真莫明其妙。请下载附件实测,盼能弄清问题原因,是微软的BUG吗?

点击这里给我发消息

4#
发表于 2016-8-21 10:45:45 | 只看该作者
我这里2016 运行提示正常,提示已完成。 我没有2007.
5#
 楼主| 发表于 2016-8-21 23:56:31 | 只看该作者
本帖最后由 a63521557 于 2016-8-21 23:57 编辑
tmtony 发表于 2016-8-21 10:45
我这里2016 运行提示正常,提示已完成。 我没有2007.

怎么我这里的2016运行提示也出错呀,而且是在多台电脑上的2007及2016上测试过了,都出错,只有2003运行正常。

本帖子中包含更多资源

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

x

点击这里给我发消息

6#
发表于 2016-8-23 10:04:37 | 只看该作者
我2013,也是错误
7#
 楼主| 发表于 2016-8-23 10:08:09 | 只看该作者
轻风 发表于 2016-8-23 10:04
我2013,也是错误

谢谢帮忙验证,能找出问题原因吗?为何当记录数少于198时,处理过程一切正常,大于198时在2007及以上版本时就出现错误了,真莫明其妙。
8#
发表于 2016-8-23 11:25:41 | 只看该作者
DoCmd.GoToRecord , , acFirst

me.子窗体.form.recordset.movefirst
替代

DoCmd.GoToRecord , , acNext

me.子窗体.form.recordset.movenext
替代
9#
 楼主| 发表于 2016-8-23 14:38:59 | 只看该作者
xinrenq 发表于 2016-8-23 11:25
DoCmd.GoToRecord , , acFirst

me.子窗体.form.recordset.movefirst

非常感谢,程序多ACCESS版本通用问题解决了,但疑问仍存,微软的BUG?王站在2016(版本:16.0.7070.2033)上也通过了,但我在2016(版本:16.0.6868.2067)上却未通过,难道更高的版本纠正了以前2007~2016版本的BUG?
10#
发表于 2016-8-23 19:32:26 | 只看该作者
这些宏命令,出错性比较高,所以要改为对象操作性的VBA,会更稳定一些,优化代码是必要的,这样也能提高你的编写水平
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 01:32 , Processed in 0.118863 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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