设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[Access本身] [求助]触发一个事件后,先禁止事件触发,代码运行完后再解开禁用

[复制链接]
跳转到指定楼层
1#
发表于 2006-1-21 19:21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
触发一个事件后,先禁止事件触发,代码运行完后再解开禁用。这个功能在ACCESS中如何写,类似EXCEL中的APPLICATION.ENABLEENVENTS
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-1-21 20:53:00 | 只看该作者
有点不明!

既然事件触发又如何禁用?

如不需要该事件,就不编写该事件的代码就可以了![em04]
3#
发表于 2006-1-21 21:08:00 | 只看该作者
有点不明!

既然事件触发又如何禁用?



如不需要该事件,就不编写该事件的代码就可以了!



同感!!!
4#
发表于 2006-1-21 21:41:00 | 只看该作者
写一个子过程应该可以的,需要的时候再去调用它。
5#
 楼主| 发表于 2006-1-21 22:10:00 | 只看该作者
比如你可能触发了一个事件,这个事件将引起一系列动作,这些动作将可能触发其他一些事件,但是我不想触发其他的这些事件,所以必须先将事件触发给禁用掉,等代码运行完了再解开。
6#
发表于 2006-1-21 22:21:00 | 只看该作者
先触发的事件放在前面执行,等待触发的事件可以根据 前面代码的判断结果 来执行。

或者在  先触发的代码中写入一个标志变量,根据标志变量的返回值来决定 后面的代码是否运行。
7#
发表于 2006-1-22 05:36:00 | 只看该作者
你是想这个意思吗?

Private Sub Text0_AfterUpdate()
   If MsgBox("将触发组合框的刷新事件,你要继续吗?", vbYesNo) = vbYes Then
        Me.Combo2.Requery
   End If
End Sub
8#
发表于 2006-1-22 08:47:00 | 只看该作者
不知这个可否参考



标题:在Access 95-2002中,如何使代码的执行时中断,并启动一个外部程序直至完成后,恢复中断。
作者: Attac顾问组织
   
以下是如何从access启动另一个外部程序,使原来执行代码中断,直至这个外部程序完成后,恢复中断。完成这个功能我们可以"WaitforSingleObject"和"OpenProcess"
API函数来启动这个外部程序直至完成。请参考下面列出代码。
1.在您模块的声明页中,加上以下声明和过程:


Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal _
     dwAccess As Long, ByVal fInherit As Integer, ByVal hObject _
     As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
      hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
      hObject As Long) As Long

2.请试验下面这个测试过程,它可是实现任何您想启动的一个外部应用程序直至完成,才弹出一个提示框。(“_”表示续行。)

Function LaunchApp32 (MYAppname As String) As Integer
On Error Resume Next
Const SYNCHRONIZE = 1048576
Const INFINITE = -1&
Dim ProcessID&
Dim ProcessHandle&
Dim Ret&
LaunchApp32=-1
ProcessID = Shell(MyAppName, vbNormalFocus)
   If ProcessID<>0 then
       ProcessHandle = OpenProcess(SYNCHRONIZE, True, ProcessID&)
       Ret = WaitForSingleObject(ProcessHandle, INFINITE)
       Ret = CloseHandle(ProcessHandle)
  
       MsgBox "This code waited to execute until " _
          & MyAppName & " Finished",64
   Else
        MsgBox "ERROR : Unable to start " & MyAppname
        LaunchApp32=0
   End If
End Function







值得注意的一点是,当这个外部应用程序完成后,在你的过程中必需包含一段代码用以关闭这个进程的句柄。否则内存将会溢出(即:内存死区)直到你关闭窗口为止。点击浏览该文件


9#
 楼主| 发表于 2006-1-22 21:35:00 | 只看该作者
大家的做法好像都不合我的意思。

我其实是想一劳永逸,因为有时候不太清楚哪些代码会触发哪些事件,如果在触发一个事件后、执行某些功能代码前,将事件触发暂时关闭,等功能代码运行完后再开启事件触发,这样可以避免运行某些无谓的过程或进入死循环。
10#
发表于 2006-1-23 01:31:00 | 只看该作者
Me.Button1.OnClick = ""                     '使按钮单击事件失灵

Me.BUtton1.OnClick = "[Event Procedure]"     '恢复按钮单击事件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-20 20:48 , Processed in 0.112292 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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