Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

VBA代码优化

流星  发表于:2015-09-16 21:16:47  
复制

哪位大神帮我修改下代码,我想把On Error Resume Next去除,记录集为空时有可能出现错误,如果用goto类代码会太多。


Public Sub 对接成功()
    On Error Resume Next
    Dim db As DAO.Database
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim fd1 As DAO.Field
    Dim fd2 As DAO.Field
    Dim fd3 As DAO.Field
    Dim fd4 As DAO.Field
    Dim str1 As String
    Dim str2 As String
    Set db = CurrentDb()
    
    '下面是信用证中的以发票号为基础,查找的对接成功;
    '---------------------------------------------------------------------------------------
    Set rs1 = db.OpenRecordset("select * from [发票信息表] where [对接成功]=false")
    rs1.MoveFirst
    Set fd1 = rs1.Fields(1)  '提取【发票信息表】中的发票号
    Set fd3 = rs1.Fields(3)  '提取【发票信息表】中的对接成功
    rs1.MoveFirst
    Do Until rs1.EOF
        str1 = fd1.Value
        Set rs2 = db.OpenRecordset("select * from [报关单信息表] where [发票号]=" & sqltext(str1))
        Set fd4 = rs2.Fields(0)   '提取【报关信息表】中的对接成功
        rs2.MoveFirst
        Do Until rs2.EOF
            rs1.Edit
            fd3.Value = True
            rs1.Update
            rs2.Edit
            fd4.Value = True
            rs2.Update
            rs2.MoveNext
        Loop
        rs1.MoveNext
    Loop
    
    '下面是以报关单为基础,查找的对接成功
    '-----------------------------------------------------------------------------------
    Set rs1 = db.OpenRecordset("select * from [报关单信息表] where [对接成功]=false")
    rs1.MoveFirst
    Set fd1 = rs1.Fields(2)  '提取【报关单信息表】中的发票号
    Set fd2 = rs1.Fields(0)  '提取【报关单信息表】中的对接成功
    rs1.MoveFirst
    Do Until rs1.EOF
       str1 = fd1.Value
       Set rs2 = db.OpenRecordset("select * from [发票信息表] where [发票号]=" & sqltext(str1))
       Set fd3 = rs2.Fields(3)     '提取[发票信息表]中的对接成功
       rs2.MoveFirst
       Do Until rs2.EOF
            rs1.Edit
            fd2.Value = True
            rs1.Update              '修改【报关单信息表】中的对接成功
            rs2.Edit
            fd3.Value = True
            rs2.Update              '修改[发票信息表]中的对接成功
            rs2.MoveNext
       Loop
       rs1.MoveNext
    Loop
    
    rs1.Close
    rs2.Close
    db.Close
    Set rs1 = Nothing
    Set rs2 = Nothing
    Set db = Nothing
End Sub


 

Top
丘山 发表于:2015-09-16 23:01:48

你处理前先判断一下个记录集的记录数

可以用count或dcount函数

如果为0 则记录集为空 弹出提示

如果都>0 则可以进行你上面的业务代码操作



zzwjj 发表于:2015-09-17 10:04:55

为啥不直接用SQL的update语句?

update 发票信息表 inner join 报关单信息表 on 发票信息表.发票号 = 报关单信息表.发票号 set 发票信息表.对接成功=true, 报关单信息表.对接成功=true

俩个表都更新了......

update语句用docmd.RunSQL DAO,ADO都可以执行.......



流星 发表于:2015-09-17 22:21:18

@丘山

我知道可以用rs.recordcount进行判断,但里面有嵌套的记录集,不知道怎么跳出来,所以不会写



丘山 发表于:2015-09-20 21:34:44

你可以在循环体内加一个判断

if rs.recordcount= o then

  msgbox "什么也不做"

else

  msgbox "做些什么"

end if 



总记录:4篇  页次:1/1 9 1 :