创建从分隔文本文件中读记录的数据识别类

通过创建数据识别类,您可以从分隔文本文件将数据读到 ADO 记录集,并使用 ADO 的特性来操作数据。您因而能在您的应用程序中使用类作为数据源,把窗体上的控件绑定到记录集的字段。

本主题说明如何创建数据识别类以在 tab 分隔的文本文件中读数据,并提供数据漫游的方法。

要创建数据识别类来分隔的文本文件中读数据,请按照以下步骤执行:

  1. 创建作为数据源的类。

  2. 添加代码,以从文本文件中将数据读到 ADO 记录集。

  3. 为类设置数据源。

注意   本主题是帮助您创建一个与 tab 分隔的文本文件中的数据进行交互的简单数据库应用程序系列的一部分。与 ASCII 文本文件中的数据交互是第一部分。

创建作为数据源的类

通过在您的工程中插入类模块,并指定其数据源行为,您可以创建类来作为数据源。首先,通过从“应用程序”菜单中选择“添加类模块”在您的工程中插入一个类模块。然后给类设置 Name 和 DataSourceBehavior 属性。

例如,要创建一个能作为数据源的 CustomerDataSource 类,设置如下属性:

属性 设置值
Name CustomerDataSource
DataSourceBehavior vbDataSource

详细信息   数据识别类在《程序员指南》的创建数据识别类中有深入讨论。

添加代码,以从文本文件中将数据读到 ADO 记录集

通过从文本文件中将数据读到 ADO 记录集,您可以使用 ADO 特性来操作数据。首先,通过选择“工程”菜单中的“引用...”来为 ADO 对象库添加一个引用,然后在“引用...”对话框中选择 Microsoft ActiveX Data Objects 2.0 Library。

然后在类的 Declarations 部分声明一个 Recordset 对象变量。例如,要声明一个 Recordset 对象变量以处理来自Customers.txt 文件中的客户记录,请在 Declarations 部分添加如下内容:

Public rsCustomers As ADODB.Recordset

通过将变量声明为公共变量,您可以在使用数据识别类的应用程序中使用 Recordset 对象的内置方法。

最后,添加代码到类的 Class_Initialize 事件过程中,使其能从文本文件中读数据。例如,添加如下代码到 CustomerDataSource 类的 Class_Initialize 事件过程中,以从 Customers.txt 文件中将数据读到一个记录集对象中:

Private Sub Class_Initialize()

   Dim fld As ADODB.Field
   Dim strRow As String
   Dim strField As String
   Dim intPos As Integer

   Set rsCustomers = New ADODB.Recordset

   With rsCustomers
      '  CustomerID 设置为主键。
      .Fields.Append "CustomerID", adChar, 5, adFldRowID
      .Fields.Append "CompanyName", adChar, 40, adFldUpdatable
      .Fields.Append "ContactName", adChar, 30, adFldUpdatable
      .Fields.Append "ContactTitle", adChar, 30, adFldUpdatable
      .Fields.Append "Address", adChar, 60, adFldUpdatable
      .Fields.Append "City", adChar, 15, adFldUpdatable
      .Fields.Append "Region", adChar, 15, adFldMayBeNull
      .Fields.Append "PostalCode", adChar, 10, adFldMayBeNull
      .Fields.Append "Country", adChar, 15, adFldUpdatable
      .Fields.Append "Phone", adChar, 24, adFldUpdatable
      .Fields.Append "Fax", adChar, 24, adFldMayBeNull
      ' 使用键集游标类型以允许更新记录。
      .CursorType = adOpenKeyset
      .LockType = adLockOptimistic
      .Open
   End With

   Open "Customers.txt" For Input As #1

   Do Until EOF(1)
      Line Input #1, strRow
      With rsCustomers
         .AddNew
         For Each fld In .Fields
            ' 如果找到一个 tab 分隔符,字段文本            ' 就在分隔符的左边。
            If InStr(strRow, Chr(9)) <> 0 Then
               ' 将位置移动到 tab 分隔符。
               intPos = InStr(strRow, Chr(9))
               ' 将字段文本赋值给 strField 变量。
               strField = Left(strRow, intPos - 1)
            Else
               ' 如果没有找到 tab 分隔符,则字段文本
               ' 是行中的最后一个字段。
               strField = strRow
            End If

            ' 去掉引号。
            If Left(strField, 1) = Chr(34) Then
               strField = Left(strField, Len(strField) - 1)
               strField = Right(strField, Len(strField) - 1)
            End If

            fld.Value = strField

            ' 从文本行中去掉字段值。
            strRow = Right(strRow, Len(strRow) - intPos)
            intPos = 0

         Next
         .Update
         .MoveFirst
      End With
   Loop
   Close

End Sub

为类设置数据源

当您通过将 DataSourceBehavior 设置为 vbDataSource 而指定了一个类作为数据源时, Visual Basic 自动给该类添加一个 GetDataMember 事件。Class_GetDataMember 事件过程是您为类设置数据源的地方,可以通过把它指定给类的 Data 对象来实现。

例如,要将 rsCustomers 记录集设置为 CustomerDataSource 类的数据源,在Class_GetDataMember 事件过程中添加如下内容:

Private Sub Class_GetDataMember(DataMember As String, Data As Object)   Set Data = rsCustomersEnd Sub

详细信息   有关数据源的讨论,请参阅《程序员指南》中的创建数据源

步骤

本主题是帮助您使用数据识别类和 ADO 创建一个与 tab 分隔的文本文件中的数据进行交互的简单数据库应用程序系列说明的一部分。

请参阅
进行下一步 创建能使您查看和更新数据识别类中数据的窗体
从头开始 与 ASCII 文本文件中的数据交互