Access交流中心

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

如何中断循环计算!

pc高手  发表于:2008-04-05 08:59:02  
复制

在一个 DO 循环里多条记录逐条计算,因为记录较多,运算时间较长。
用户拟(按下[ESC]或[F2]键后)中断计算退出循环, 用什么方法???
我尝试了用 :

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 113 Then
        MsgBox "调用某程序"
    End If
End Sub

 

不成功! 原因是: 在do 循环里,我用了
DoCmd.Hourglass True
DoCmd.Echo False, "正在计算。。。。。。。"

键盘按下后,无反应。 待循环结束后,恢复
DoCmd.Hourglass False
DoCmd.Echo True
后, 键盘才响应。

 

请高手提供解决方案!

 

Top
竹笛 发表于:2008-04-05 10:56:48

1.新建一个窗体,命名为frmOpen

2.在frmOpen窗体上创建一个按钮命令按钮Command4

3.在frmOpen窗体上创建一个标签Label3

4.在frmOpen窗体上创建一个文本框Text5

 

 

'定义一个变量x

Dim x As Boolean

 

'在窗体中建一个命令按钮Command4,单击事件中写如下代码

Private Sub Command4_Click()
    Dim n As Double
    x = True
    For n = 1 To 10000000
        If x = True Then
            DoEvents
            Me.Label3.Caption = n
        Else
            Exit Sub
        End If
    Next n

End Sub

Private Sub Text5_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 27 Then
        x = False
        ' MsgBox "x值已变化"
    End If
End Sub

 



竹笛 发表于:2008-04-05 11:03:18

我是在一个文本框Text5中按“ESC”键测试的。



pc高手 发表于:2008-04-05 12:27:15

非常感谢 BAMBOO !!!

将你的提示与我原来构想结合,我改写后,非常成功! 完全达到
原先的设想。 这些技巧,在其他语言中,很容易解决。 所以我推断
ACCESS 也一定能完美解决!
你的 lbl3 text5 , 我都舍去不用了。 还是利用 Form_KeyDown 来
控制, 用户方便的多! 而且程序简单实用。
原来的 DoCmd.Hourglass True
DoCmd.Echo False, "正在计算。。。。。。。"  照样使用,不影响运行。


我也找到原先为什么不成功的原因了, 核心句子就是 DoEvents 。
其他语言中有类似语句,如:
ON KEY LABE F10 DO F10EXIT && 强行退出,不存盘!
或:
LAST()=27
都可以控制循环退出。

我将修改过的代码附上.

 

Option Compare Database
Option Explicit

Dim x As Boolean

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 27 Then
        x = False
'        MsgBox "x值已变化,控制退出循环。"
    End If
End Sub

Private Sub cmd开始运算_Click()
    Dim n As Double
    x = True
    DoCmd.Hourglass True
    For n = 1 To 10000
        '' 主程序代码
        DoEvents
        If x = False Then
            MsgBox "按用户要求,强行退出运算!", vbInformation, "当然也可以继续运算!"
            DoCmd.Hourglass False
            DoCmd.Echo True
            Exit Sub
        End If
        DoCmd.Echo False, "正在计算:" & n
    Next n
    DoCmd.Hourglass False
    DoCmd.Echo True
End Sub



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