一旦 Connection 或 Command 对象被创建,您就可以编程访问和操作这些 ADO Command、Connection 和 Recordset 对象,好象这些对象是您直接通过 ADO 创建的一样。这就使您在运行时通过编程将数据识别控件绑定到一个 Command 对象或 Command 对象中的字段成为可能。您也可以在对象关闭时动态地设置 ADO Connection 或 Recordset 对象的属性,并在数据绑定前设置参数值。
此外,当您编程访问数据环境显露的数据时,您对执行的选项有更强的控制能力,并且可以创建 DataEnvironment 对象的多个实例。
当使用方法或数据绑定执行一个 Command 对象时,下面的事情将发生:
您也可以使用 DIM 语句在一个过程中声明一个变量,来编程创建您的数据环境实例。例如:
Dim DE as New MyDE
您创建的每一个 Command 对象可以都被编程显露为 DataEnvironment 对象的一个方法。因此,要执行 Command 对象,您可以执行数据环境中的方法。
除了对每一个 Command 对象显露一个方法外,根据 Recordset Returning 属性的设置值,也可以显露一个 Recordset 对象。因为不可能用相同的名字同时显露一个方法和一个属性,在 Command 名字前面加上“rs”来显露 Recordsets。
创建之后,Recordset 对象是关闭的。当您在数据环境之外执行方法时,Recordset 打开。此外,您可以在 Recordset 打开之前和之后对它进行操作。例如,一旦 Recordset 被打开,您就可以使用 MoveNext 方法漫游到下一个记录。
所有的 ADO Recordset 方法和属性都可以从与 DataEnvironment 对象相关联的 Recordset 中得到。
要从一个 Visual Basic 窗体中编程访问您的数据环境,请按照以下步骤执行:
Dim DE as New MyDE
MyDE.Customers
注意 这个示例假定没有参数与 Command 对象相关联。
DE.rsCustomers.MoveFirst
从这一点来看,与一个 ADO Recordset 关联的所有方法都可以应用于 DE.rsCustomers
,例如用于添加、更新、删除和遍历记录的方法。例如,下面的代码使用 ADO 方法在记录集的记录中循环遍历。
Do While DE.rsCustomers.EOF = False
Debug.Print DE.rsCustomers.Fields(1).Value
DE.rsCustomers.MoveNext
Loop
下面是使用与 DataEnvironment 对象相关联的方法和 Recordset 对象执行 Command 对象的一些示例。这些示例使用一个 Command 对象,该对象基于记录集返回的存储过程,并带有两个输入参数。
如果 Command 对象有多个参数,并且您想传递选择的参数,您必须使用 Parameters 集合手工设置参数的值。接着,您必须使用 Command 对象的 Open 方法。例如,Command 对象“InsertCustomer”包含参数的标识、名字和绰号。要执行这个方法并包括所有的参数,您可以使用下面的方法:
MyDE.InsertCustomer "34","Fred","Freddy"
但是,如果仅仅包括标识和名字,您可以使用下面的代码:
MyDE.Commands("InsertCustomer").Parameters("ID").value = "34"
MyDE.Commands("InsertCustomer").Parameters("Name").value = "Fred
MyDE.Commands("InsertCustomer").Open
下面的示例显示了带有两个 Parameter 对象的记录集返回存储过程。
Dim MyDE As DataEnvironment1
Dim nRecords As Integer
Dim nSum As Long
MyDE.SalesTotalByCityState "Seattle","WA"
MyDE.RSSalesByCityState.MoveFirst
For nRecords = 1 To MyDE.RSSalesByCityState.RecordCount
nSum = nSum + MyDE.RSSalesByCityState.Fields("Invoice_Amt")
MyDE.RSSalesByCityState.MoveNext
Next nRecords
Debug.Print nSum
下面是一个更复杂的例子,它显示了一个基于存储过程的 Command 对象,该过程返回一个 Recordset 对象和一个返回值。这个例子也包含一个输入和一个输出 Parameter 对象。
Dim MyDE As DataEnvironment1
Dim sOutStatus As String, nNumRecords As Long
nNumRecords = MyDE.OrdersByEmployee("SMITH", sOutStatus)
If sOutStatus = "Succeeded" Then
MyDE.OrdersByEmployee_RS.MoveFirst
While Not MyDE.RSOrdersByEmployee.EOF
Debug.Print MyDE.RSOrdersByEmployee.Fields("OrderDate")
MyDE.RSOrdersByEmployee.MoveNext
End
End If
下面的例子显示了一个非记录集返回存储过程,该过程有一个返回值和 Parameter 对象。一个常用的方案是使用存储过程插入、更新和删除记录。这些存储过程不返回 Recordset 对象,但是使用输入和输出 Parameter 对象。
Dim MyDE As New DataEnvironment1
Dim sOutStatus As String, nNumRecordsAffected As Long
nNumRecords = MyDE.DeleteEmployee("34", sOutStatus)
If sOutStatus = "Succeeded" Then
Debug.Print nNumRecords + " employee(s) were deleted."
Else
Debug.Print "Delete was not successful."
End If