Office中国论坛/Access中国论坛

标题: [求助]触发一个事件后,先禁止事件触发,代码运行完后再解开禁用 [打印本页]

作者: 老鬼    时间: 2006-1-21 19:21
标题: [求助]触发一个事件后,先禁止事件触发,代码运行完后再解开禁用
触发一个事件后,先禁止事件触发,代码运行完后再解开禁用。这个功能在ACCESS中如何写,类似EXCEL中的APPLICATION.ENABLEENVENTS
作者: gaoqiwen    时间: 2006-1-21 20:53
有点不明!

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

如不需要该事件,就不编写该事件的代码就可以了![em04]
作者: zcy0718    时间: 2006-1-21 21:08
有点不明!

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



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



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

或者在  先触发的代码中写入一个标志变量,根据标志变量的返回值来决定 后面的代码是否运行。
作者: 情比金坚    时间: 2006-1-22 05:36
你是想这个意思吗?

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



标题:在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







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



作者: 老鬼    时间: 2006-1-22 21:35
大家的做法好像都不合我的意思。

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

Me.BUtton1.OnClick = "[Event Procedure]"     '恢复按钮单击事件
作者: fan0217    时间: 2006-1-23 02:25
情比金坚的是个好办法
作者: 老鬼    时间: 2006-1-24 00:06
情比金坚的方法只能在特定条件下才可行。因为一段代码可能触发很多的事件,而被触发的对象是不确定的,所以要想暂停事件,是必须彻底的,不能是含有对象的,即事件被关闭期间,任何对象的事件都不会被触发,这就是我需要的。也许APPLICATION对象下会有这个方法?
作者: 情比金坚    时间: 2006-1-24 05:57
ado 中有个“事物” 方法,应该是你想要的。
作者: 老鬼    时间: 2006-1-25 05:07
那方法在什么对象下面?怎么拼写?
作者: 情比金坚    时间: 2006-1-25 07:31
事务

对数据库的数据所作的一系列改变。用 BeginTrans 语句标记事务的开始,用 CommitTrans 语句提交事务,或者用 RollbackTrans 语句撤消自 BeginTrans 以来的所作的一切改变。

事务是可选的,但可以提高操作的速度,允许反向改变。

可以在 rdoConnection 层或 rdoEnvironment 层上管理事务

也可以用分布式事务协调器管理事务
作者: 老鬼    时间: 2006-2-7 02:01
“事务”是针对一系列动作的,只是具有可撤销性,仍然不能达到我的要求。ADO毕竟只能针对数据库的数据操作,如果我的代码里面有操作到其他的对象,比如窗体或者其上面的控件,可能就行不通了。须知有些东西是没有后悔药可吃的,就好比爱情和婚姻。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3