gpt4 book ai didi

vb6 - 如何立即退出程序?

转载 作者:行者123 更新时间:2023-12-04 16:09:15 24 4
gpt4 key购买 nike

使用 VB 6 和 Access 2003

我正在使用两个命令按钮(处理、取消)

当我运行程序时,按下取消按钮 - 表单立即卸载。
如果我按下“处理”按钮,然后按下“取消”按钮,表单不会立即卸载。

在 Process 按钮中,我写了这样的代码:
Getting the data from the database and creating a record set, creating a temporary table…,
有没有什么办法可以在VB代码使用数据库的时候立即退出程序(比如创建记录集,创建临时表)?

在取消按钮中,我写了这段代码

Unload me

使用数据库时如何立即退出程序?

需要 VB 6 代码帮助

最佳答案

它可能挂起的另一个原因是 VB6 正在等待数据库。您在数据库上运行的查询是长时间运行的,还是需要很长时间的 VB6 代码?

如果数据库查询导致问题并且您使用的是 ADO,则可以使用异步数据库连接。代码的逻辑可能会更复杂,因为您必须设置回调方法以在每个数据库调用完成后继续处理。

您可以建立这样的连接,执行以下操作:

Private WithEvents m_conn As ADODB.Connection
...
Set m_conn = New ADODB.Connection
Call m_conn.Open(connectionString, , , adAsyncConnect)

像这样执行查询/存储过程 - 您会在此处注意到的主要区别在于,代码不会在查询完成之前挂起,而是继续正常执行):
sql = "SELECT Col1 FROM etc. etc."
Call m_conn.Execute(sql, , adAsyncExecute)

取消正在运行的查询,如下所示:
Call m_conn.cancel

以及查询完成时所有重要的回调:
Private Sub m_conn_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
... do more processing etc...
End Sub

您可能会发现上述内容对于您想要的东西来说太过分了;我只是自己实现了这一点,因为该窗口是专门为执行长时间运行的查询而设计的,而且窗口保持响应并允许在中途取消查询非常重要。

然而,据我所知,如果你不使用异步查询方法,VB6 将保持无响应,直到你的 m_conn.Execute方法返回。

如果延迟是由于 VB6 代码本身而发生的——例如在你创建临时表的所有工作中,那么我同意 MarkJ 的“经典”答案并使用 DoEvents——虽然看起来是一个笨拙的机制,但它确实有效很不错。在整个过程中撒上一些,您应该会注意到一些改善。虽然可能不是完美的,但它可能已经足够好了。

例如
retrieve results
...
DoEvents
...
build temporary tables
...
DoEvents

每次命中 DoEvents 块之一时,如果用户单击“取消”按钮,代码就会触发。

注:您可能还想对在代码仍在运行时卸载表单保持谨慎,我不相信一切都会正确卸载。在这种情况下,您可能想要以下内容:
Private m_cancel as Boolean

Private Sub cmdCancel_Click()
m_cancel = True
End Sub

Private Sub cmdProcess_Click()
...
retrieve results
...
DoEvents
If Not m_cancel Then
... build temporary tables etc...
End if

If m_cancel Then Unload Me
End Sub

关于vb6 - 如何立即退出程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1264513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com