如何使用 ADO FetchProgress 和 FetchComplete 事件

330 篇文章 ¥19.90 ¥99.00
本文介绍了如何在Microsoft Visual Basic中利用ADO的FetchProgress和FetchComplete事件进行异步数据获取。系统要求包括MDAC 2.5以上版本和Visual Studio 6.0的Service Pack 3。详细讲解了初始Fetch大小、背景Fetch大小的设置以及FetchProgress和FetchComplete事件中的参数和错误处理。还提供了一个示例代码,展示了如何在实际应用中使用这些事件来监视和控制数据读取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

系统必备组件

软件要求
  • 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 的立即窗口中显示异步查询的进度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值