Private Sub Command1_Click() sql = "insert into 地理位置 values ('" & Trim(Text1.Text) & "','" & Trim(Text2.Text) & "')"
 If exsql(sql) Then
   MsgBox "添加成功", vbInformation, App.Title
 End If
End If上面的这个SUB,如果用户连续点击此COMMAND1按钮,也就是在COMMAND_CLICK执行的瞬间,COMMAND1按钮被重复点击,会不会造成Command1_Click的重复执行,结果导致添加了两条甚至多条重复信息。如果这种情况存在的话,如何避免此类现象的发生。

解决方案 »

  1.   

    加个锁就OK:private sub command1_click()
        if command1.tag="1" then exit sub
        command1.tag="1"    ...........费时的处理代码.......    command1.tag=""
    end sub也可以把第一句改为command1.enabled=false,再在结束时true.....方法很多,随便选一种就行.
      

  2.   

    这样
    dim blnIsRunning as boolean
    Private Sub Command1_Click()
    if blnIsRunning=true then exit sub
    blnIsRunning=true
    sql = "insert into 地理位置 values ('" & Trim(Text1.Text) & "','" & Trim(Text2.Text) & "')"
    If exsql(sql) Then
      MsgBox "添加成功", vbInformation, App.Title
    End If
    End If 
    blnIsRunning=false
      

  3.   

    又是MYJIAN.谢谢你了。这么晚了,我还以为不会有人回答了呢。那个MAJAN最近没再骚扰你吧。
      

  4.   

    应该不会再回应,除非有doevents在里面。
      

  5.   


    应该根据lz的需要来定,可能性很多1。command正在执行时锁定,执行后解锁2。command在某一时段锁定,过后解锁3。在程序打开后只运行一次,直到运行结束4。本次锁定对以后运行还有影响,(这就需要在文件或数据库中保存状态)
      

  6.   

    我是这样做的:Private Sub Command1_Click()     Command1.Enabled = False '******
        On Error Goto ErrHandler    ......    If something Then
            MsgBox "Something ......"
            Goto SubExit
        End If    ......SubExit:
        Command1.Enabled = True '******
        Exit SubErrHandler:
        MsgBox "Realtime Error: ......"
        Resume SubExit
    End Sub
      

  7.   

    if command1.tag="1" then exit sub 
        command1.tag="1"     ...........费时的处理代码.......     command1.tag="" 
    不行吧!用户单击两次,仍然会执行两次!
    应该将command1.tag="" 放在其他过程中
      

  8.   

    如果只执行一次insert 简单做法, (也可以用tag,enable等...)
    ①定义一个模块变量 dim a as Integer②form_load 里让它为0 ③Private Sub Command1_Click() 
    if a=0 then
    sql = "insert into 地理位置 values ('" & Trim(Text1.Text) & "','" & Trim(Text2.Text) & "')" 
    If exsql(sql) Then 
      MsgBox "添加成功", vbInformation, App.Title 
      a=1
    End If 
    endif
    End sub
    如果多次插入不同的值,先判断数据库里是否有重复的记录(select * from 地理位置 where 条件 )
    如果有就不执行insert ,否则执行 
      

  9.   

    ●只要 exsql 中没有调用 DoEvents,不可能在 Click 事件处理中再次触发 Click,如果 exsql 执行时间足够长,你会发现在 MsgBox 弹出之前按钮一直是压下状态,不可能再次作出压下动作;而一个 Click 事件必须有配对的压下、弹起动作才行。●设置 Enabled = False 会引起焦点转移,不推荐使用。
      

  10.   

    同意老鸟的说法,如果Command1_Click()事件里面没有用Doevents的话,Command1_Click()事件完成之前是不会再次触发Command1_Click()事件所以不用作任何处理,用了Doevents的话才需要像1\2\9楼的处理。
      

  11.   


    如果没有 MsgBox "添加成功", vbInformation, App.Title 这个语句 会不会出现重复添加的情况呢。
      

  12.   

    可能我想问的问题没有表述清楚,我再说一下,比如这个COMMAND1_CLICK的执行10秒才能完成,在这10秒钟的过程中,比如在第4秒时,用户又点击了1次鼠标,程序会不会在10秒钟之后即COMMAND1_CLICK执行完后再次自动执行一次COMMAND1_CLICK。
      

  13.   


    '是.net下的吧?
    ' 怪了,你们都没有发现吗,最后两行代码都是 end if !
    '   呵~~~lz是不是忘了写什么了?' 数据很大么?要不以计算机的执行速度应该远比人点击的速度快,不信你可以试试。'简单的可以这样做,statci一个变量 运行前先检测这个变量是否符合你的要求 不符合就退出可以了。
      
    ' 比如。
    Private Sub Command1_Click() 
     Static key as long     '-------------
     key=key+1
     sql = "insert into 地理位置 values ('" & Trim(Text1.Text) & "','" & Trim(Text2.Text) & "')" 
     if key>1 then exit sub '--------改变这个数你想运行多少次都行 If exsql(sql) Then 
       MsgBox "添加成功", vbInformation, App.Title 
     End If 
     End If  '你这里有两个end if 
     
      
     
      

  14.   


    会再次执行的做一个试验加个按钮,加这段代码
    Option Explicit
      Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub Command1_Click()
        Static i As Integer
        
        i = i + 1
        Debug.Print i
        
        Sleep (10000)
        
    End Sub连续点击5、6次,然后看输出值,过一会儿出来一个
    1
    2
    3
    4
    5
    6
      

  15.   

    不要忽略 MsgBox 的作用。再试试
    Private Sub Command1_Click()
        Static i As Integer
        
        i = i + 1
        Debug.Print i
        Sleep (10000)
        MsgBox "hi"
    End Sub
      

  16.   


    我当初测试最先用的就是msgbox,因为msgbox需要回应,阻挡不会弹出很多,为了测试我又改成debug.print才测试到弹出很多的效果,测试主要针对lz20楼疑问。 
      

  17.   


    我需要在操作时封闭的按钮,一般都是主功能按钮,例如芯片 Flash 下载等。这种按钮我会设置 Default = True。就算焦点转移了,又有什么关系?何况,当回来的时候完全可以 Command1.SetFocus。我另外一种做法是,隐藏一个 Stop 按钮在主功能按钮的上面。当 cmdStop.Visible = True 的时候,主功能按钮被完全遮挡。主功能退出时,再  cmdStop.Visible = False。其实,方法多多,不要说哪一个就是正宗,哪一个不好。适用就好。
      

  18.   

    用 Disable 需要很明确不会引发不必要的 Validate 事件。
    而且数据库操作应该有明确的状态,来决定应该是 INSERT 还是 UPDATE。
      

  19.   


    我还没有为 Command 按钮写过 Validate 事件代码。而且,我从来不会将一个 Command 的 TabIndex 放在一个编辑控件之前。多虑了。
     
      

  20.   

    不管是使用Tag属性还是使用布尔变量,反正就是增加一个判断条件,这样就可以防止重复操作了。
      

  21.   

    添加个布尔型数据,然后根据该数据判断command.enabled=false
      

  22.   

    CommandButton控件有一个Value属性.CommandButton control — True indicates the button is chosen; False (default) indicates the button isn't chosen. Setting the Value property to True in code invokes the button's Click event.
      

  23.   

    我是这么做的,当点击按钮时弹出一个小的提示窗体 FrmNOtice.show 1然后处理后台的事情,完成后提示窗体关闭。