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的重复执行,结果导致添加了两条甚至多条重复信息。如果这种情况存在的话,如何避免此类现象的发生。
If exsql(sql) Then
MsgBox "添加成功", vbInformation, App.Title
End If
End If上面的这个SUB,如果用户连续点击此COMMAND1按钮,也就是在COMMAND_CLICK执行的瞬间,COMMAND1按钮被重复点击,会不会造成Command1_Click的重复执行,结果导致添加了两条甚至多条重复信息。如果这种情况存在的话,如何避免此类现象的发生。
if command1.tag="1" then exit sub
command1.tag="1" ...........费时的处理代码....... command1.tag=""
end sub也可以把第一句改为command1.enabled=false,再在结束时true.....方法很多,随便选一种就行.
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
应该根据lz的需要来定,可能性很多1。command正在执行时锁定,执行后解锁2。command在某一时段锁定,过后解锁3。在程序打开后只运行一次,直到运行结束4。本次锁定对以后运行还有影响,(这就需要在文件或数据库中保存状态)
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
command1.tag="1" ...........费时的处理代码....... command1.tag=""
不行吧!用户单击两次,仍然会执行两次!
应该将command1.tag="" 放在其他过程中
①定义一个模块变量 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 ,否则执行
如果没有 MsgBox "添加成功", vbInformation, App.Title 这个语句 会不会出现重复添加的情况呢。
'是.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
会再次执行的做一个试验加个按钮,加这段代码
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
Private Sub Command1_Click()
Static i As Integer
i = i + 1
Debug.Print i
Sleep (10000)
MsgBox "hi"
End Sub
我当初测试最先用的就是msgbox,因为msgbox需要回应,阻挡不会弹出很多,为了测试我又改成debug.print才测试到弹出很多的效果,测试主要针对lz20楼疑问。
我需要在操作时封闭的按钮,一般都是主功能按钮,例如芯片 Flash 下载等。这种按钮我会设置 Default = True。就算焦点转移了,又有什么关系?何况,当回来的时候完全可以 Command1.SetFocus。我另外一种做法是,隐藏一个 Stop 按钮在主功能按钮的上面。当 cmdStop.Visible = True 的时候,主功能按钮被完全遮挡。主功能退出时,再 cmdStop.Visible = False。其实,方法多多,不要说哪一个就是正宗,哪一个不好。适用就好。
而且数据库操作应该有明确的状态,来决定应该是 INSERT 还是 UPDATE。
我还没有为 Command 按钮写过 Validate 事件代码。而且,我从来不会将一个 Command 的 TabIndex 放在一个编辑控件之前。多虑了。