代码之家  ›  专栏  ›  技术社区  ›  PowerUser

如何在查询运行时插入请稍候窗体

  •  2
  • PowerUser  · 技术社区  · 14 年前

    1. SetWarnings=假
    2. 打开等待窗体
    3. 运行查询并显示结果

    问题是,在maketable查询运行时,我只能看到wait表单的概要。我只能猜测,宏不会等到窗体完全加载后再进行下一步。

    Wait表单有一个计时器,显示经过的秒数。如何在仍然允许窗体同时更新自身的情况下运行查询?

    -------更新----------

    Repaint

    1. 打开等待窗体(模式=是,弹出窗口=否)
    2. 重新粉刷窗体
    3. 打开maketable查询(此查询可节省大量时间)
    4. 关闭等待窗体
    5. 打开显示查询
    4 回复  |  直到 4 年前
        1
  •  0
  •   Kevin Ross    14 年前

    第一个问题很容易解决,试着把我。重新粉刷在查询运行之前,有时access在屏幕绘制方面会有点懒惰,您必须强制它。

    至于另一件更复杂的事。您必须异步执行查询。您可以在ADO中通过在执行查询时添加adAsyncExecute选项来实现这一点。然后,您将捕获finishing事件来告诉用户查询已经完成

    这里是微软知识库的链接 http://support.microsoft.com/kb/262311

        2
  •  1
  •   Lunatik    14 年前

    首先,你只需要 Repaint 等待窗体在显示后正确显示,这只是VBA中的一个错误,有时会导致窗体无法正确显示,即使它们在代码中的正确位置绘制。

    ShowModal 属性设置为false,则可以通过例程更新它。我使用一个接受0-100参数的公共函数来更新进度条。这在循环中效果最好,通常可以计算剩余的循环数,并为经过的进度提供准确的指南,但即使在执行一系列操作时,也可以计时并将适当的值传递给进度窗体,以便随时通知用户。这比大多数Windows进度条效果更好!

    xkcd 612

        3
  •  0
  •   ViggoV    12 年前

    'first some global vars to keep track of the number
    Dim lngCurrentRow as Long
    Dim lngTotalRows as Long 'We assume lngTotalRows have been set elsewhere
    
    'Here is the function
    Public Function UpdateProgress(FieldValue as Variant) as Variant
    
        lngCurrentRow = Nz(lngCurrentRow, 0)
    
        If (lngCurrentRow >= lngTotalRows) then
            MsgBox "Query Done!"
        Else
            'Do stuff to show progress
        End If
    
        lngCurrentRow = lngCurrentRow + 1
    
    End Function
    

    为了显示进度,我使用了一个未绑定的表单,它有一个透明背景的空文本字段(progressFrame)和一个蓝色背景的标签(progressLabel),放在左边的文本框后面。对于每次调用UpdateProgress,您可以设置标签的宽度:

    progressLabel.Width = progressFrame.Width * (lngCurrentRow / lngTotalRows)
    

    *:F.ex.如果查询基于一个表,并且添加了一些数据,以便查询将生成的记录数等于该表的记录数,则可以单独对该表进行计数,以便更快。。

    我希望这是有帮助的,或者至少是鼓舞人心的:)

        4
  •  0
  •   Snowflake68    7 年前

    我有一个弹出式窗体,它花了几秒钟才显示文本,通知用户有东西正在处理,所以请等待相同的问题。我在打开表单的代码之后和运行更新查询的下一位代码之前添加了下面的代码行(这需要一段时间,因此需要通知用户正在处理某些内容)

    文档重新生成对象acForm,“frmMyForm”