设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
1#
发表于 2006-1-21 19:21:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
触发一个事件后,先禁止事件触发,代码运行完后再解开禁用。这个功能在ACCESS中如何写,类似EXCEL中的APPLICATION.ENABLEENVENTS
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
16#
 楼主| 发表于 2006-2-7 02:01:00 | 只看该作者
“事务”是针对一系列动作的,只是具有可撤销性,仍然不能达到我的要求。ADO毕竟只能针对数据库的数据操作,如果我的代码里面有操作到其他的对象,比如窗体或者其上面的控件,可能就行不通了。须知有些东西是没有后悔药可吃的,就好比爱情和婚姻。
15#
发表于 2006-1-25 07:31:00 | 只看该作者
事务

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

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

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

也可以用分布式事务协调器管理事务
14#
 楼主| 发表于 2006-1-25 05:07:00 | 只看该作者
那方法在什么对象下面?怎么拼写?
13#
发表于 2006-1-24 05:57:00 | 只看该作者
ado 中有个“事物” 方法,应该是你想要的。
12#
 楼主| 发表于 2006-1-24 00:06:00 | 只看该作者
情比金坚的方法只能在特定条件下才可行。因为一段代码可能触发很多的事件,而被触发的对象是不确定的,所以要想暂停事件,是必须彻底的,不能是含有对象的,即事件被关闭期间,任何对象的事件都不会被触发,这就是我需要的。也许APPLICATION对象下会有这个方法?
11#
发表于 2006-1-23 02:25:00 | 只看该作者
情比金坚的是个好办法
10#
发表于 2006-1-23 01:31:00 | 只看该作者
Me.Button1.OnClick = ""                     '使按钮单击事件失灵

Me.BUtton1.OnClick = "[Event Procedure]"     '恢复按钮单击事件
9#
 楼主| 发表于 2006-1-22 21:35:00 | 只看该作者
大家的做法好像都不合我的意思。

我其实是想一劳永逸,因为有时候不太清楚哪些代码会触发哪些事件,如果在触发一个事件后、执行某些功能代码前,将事件触发暂时关闭,等功能代码运行完后再开启事件触发,这样可以避免运行某些无谓的过程或进入死循环。
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







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


您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-20 22:46 , Processed in 0.169246 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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