如何使用 ADO FetchProgress 和 FetchComplete 事件

来源:互联网 发布:2017php免杀一句话 编辑:程序博客网 时间:2024/06/08 10:15
 

系统必备组件

软件要求
  • FetchProgress FetchComplete 事件在 MDAC 2.5 或更高版本仅正常运行。 您可以从以下 Microsoft Web 站点下载最新版本的 Microsoft 数据访问组件:
    Microsoft Data Access Components (http://msdn.microsoft.com/library/default.asp?url=/downloads/list/dataaccess.asp)
  • 如果要开发应用程序在 Microsoft Visual Studio 6.0,然后必须安装 Service Pack 3 或更高版本。 您可以从以下 Microsoft Web 站点安装最新的 Service Pack,Microsoft Visual Studio 6.0:
    Visual Studio Product Updates (http://msdn.microsoft.com/vstudio/downloads/updates.asp)
编码要求
  • 打开 Recordset 时, 必须为记录集选项指定 adAsyncFetch
  • 因为将 FetchProgress FetchComplete 事件由 ActiveX 数据对象 (ADO) 客户端游标引擎返回,所以,您必须使用客户端游标。
  • 在 Visual Basic 中必须声明在模块级别使用 WithEvents 关键字的 Dim Recordset。

属性

有两个 Recordset 属性影响异步行为的 ADO。 这些属性应设置才能打开 Recordset。
  • 初始 Fetch 大小 确定多少记录之前获取的同步异步线程会创建。 这允许小 Recordset 创建无需创建线程的额外开销。 此设置为 50 默认情况下。 要保证 FetchProgress FetchComplete 称为,请将此值设置为 0 中。
  • 背景 Fetch 大小 确定多少记录获取调用 FetchProgress 事件之间。 它默认情况下设置为 15。

事件

FetchProgress

FetchProgress 有四个参数:
  • 进度 是 Recordset 中当前的记录数。

    第一次调用 FetchProgress ,进度等于初始 Fetch 大小加背景 Fetch 大小。 对于每个其他的调用进行将等于在以前的值加上背景提取大小。
  • MaxProgress 是最大值应返回。

    MaxProgress 不等于使用将返回的记录的实际数。 ADO 必须以得到此值中提取记录。 这意味着 MaxProgress 只曾经是最佳的猜测。 MaxProgress 通常等于进度以及背景获取大小。

    FetchProgess 之前调用 FetchComplete 始终调用。 在这种情况下 Progress 和 MaxProgress 相等相互。 此 MaxProgress 等于中检索的记录的实际数量。
  • adStatus 的值确定是否发生任何错误。 此值通常为 adStatusOK

    可以通过为值 adStatusUnwantedEvent 设置 adStatus 的值来禁用 FetchProgress 事件。
  • pRecordset 是对引用本身记录集。
FetchComplete

FetchComplete 有三个参数:
  • 如果 adStatus 为 adStatusErrorsOccurred,可以检查 pError 来确定已发生什么错误。 如果进行查询您的代码调用 取消 方法,则会发生此情况例如正在执行。
  • adStatus 的值确定是否发生任何错误。

    可以通过为值 adStatusUnwantedEvent 设置 adStatus 的值来禁用 FetchComplete 事件。
  • pRecordset 是对引用本身记录集。

示例代码

下面的示例演示如何在 Visual Basic 中使用 FetchProgress FetchComplete 事件。

该示例使用 ODBC 数据源名为连接到 Pubs 数据库 SQL Server 附带的 Pubs。
  1. 在 Microsoft Visual Basic,创建一个新的 标准 EXE 。 默认情况下,Form 1 添加到项目。
  2. 项目 菜单上单击以选中 引用 ,然后选择 Microsoft ActiveX Data Objects Library
  3. 项目 菜单上单击以选中 组件 ,然后选择 Microsoft DataGrid Control 6.0 (OLEDB)
  4. DataGrid 文本框 CommandButton 拖到 Form 1 上。
  5. 将以下代码添加到 Form 1 的 代码 窗口:
       Option Explicit   Const strConn = "DSN=Pubs"   Const strDefaultSQL = "SELECT * FROM Titles"    Dim cn As ADODB.Connection   Dim WithEvents rs As ADODB.Recordset   Private Sub Form_Load()      Command1.Caption = "Go"         Text1.Text = strDefaultSQL         Set cn = New ADODB.Connection      cn.Open strConn   End Sub   Private Sub Command1_Click()      Dim strSQL As String      strSQL = Text1.Text         Set rs = New ADODB.Recordset      With rs         .CursorLocation = adUseClient               .Properties("Initial Fetch Size") = 2         .Properties("Background Fetch Size") = 4               Debug.Print "Start"         Debug.Print "Initial Fetch Size: " & _                     .Properties("Initial Fetch Size")         Debug.Print "Background Fetch Size" & _                     .Properties("Background Fetch Size")               .Open strSQL, cn, , , adAsyncFetch      End With   End Sub   Private Sub rs_FetchProgress(ByVal Progress As Long, _                                ByVal MaxProgress As Long, _                                adStatus As ADODB.EventStatusEnum, _                                ByVal pRecordset As ADODB.Recordset)                                      Debug.Print "Fetch: " & Progress & _                  "  Max: " & MaxProgress         End Sub   Private Sub rs_FetchComplete(ByVal pError As ADODB.Error, _                                adStatus As ADODB.EventStatusEnum, _                                ByVal pRecordset As ADODB.Recordset)                                   If adStatus <> adStatusOK Then         Debug.Print "Failed"         Debug.Print "Error: " & pError.Number & " - " & pError.Description      Else         Set DataGrid1.DataSource = pRecordset         Debug.Print "Done"      End If      End Sub
  6. 更改为您的数据库的一个有效的连接字符串的 strConn 以及有效的 SQL 查询返回记录从数据库中更改 strDefaultSQL
  7. 运行代码。 单击 Go 按钮开始读取 Recordset。 在 视图 菜单上单击以选中 立即 窗口。 Visual Basic 的立即窗口中显示异步查询的进度。