“远程”是指在两个不同的进程中传递参数的过程,通常要跨越网络。例如,假设有一个三层系统。在客户机上,应用程序对数据调用,同时传递了几个参数作为准则。在中间层机上,某个 ActiveX EXE 接受该调用并且使用指定的准则获取数据。
例如,中间层应用程序上的代码也许与下面的相似:
Option Explicit '
该代码位于代码模块中。Public Type udtMyType '
公共的UDT
的定义birthDate As Date
lastName As String
firstName As String
address As String
End Type
Public Function passUDT(myrec As udtMyType) As udtMyType
'
修改数据。passUDT = myrec '
返回UDT
。End Function
客户机上调用该函数的代码可能是:
Option Explicit Private myrec As udtMyType Private Sub Command1_Click() Dim x As udtMyType x = passUDT(myrec) '
使用UDT
数据。End Sub
尽管传递参数在 Visual Basic 的先前版本中就一直是可行的,但将用户定义的类型 (UDT) 作为公共 Sub 的参数进行传递却不行。如上面的示例所示,这一点现在也是可能的。
在进程之外传递参数的代价要远远高于在进程内传递。在传递参数时,数据必须经过整理才能传递给外部的进程。完成该操作的代码可能会有较大的开销,但是 Visual Basic 隐藏了这种开销。然而,远程数据的优点是创建易于理解的代码。根据 UDT 的大小,它可能比 ADO 记录集对象更容易维护。
详细信息 有关创建和使用 UDT 的详细信息,请参阅创建自己的数据类型。
ADO Recordset 对象也可以是远程的。有了这种能力,在 intranet 和 Internet 的客户服务器应用程序上使用 ADO 记录集将是特别合适的。例如,您可以创建通过 Internet 在 web 服务器应用程序上访问数据的 HTML 或 DHTML 页面。在创建 HTML 页面时,可以包括 Microsoft ActiveX Data Access Recordset 2.0 库,该库的唯一特征就是 Recordset 对象。因为该库不包括 Command、Connection 和 Parameter 对象,所以在保留 ADO 记录集功能的同时,应用程序中可能的遗迹将降低到最低的程度。下面的代码是远程 ADO Recordset 的示例:
'
该代码位于代码模块中。'
设置对Microsoft ActiveX Data Objects 2.0
库的引用Private MyADORecordset As ADODB.Recordset
Public Function GetCustomer(LastName As String) As ADODB.Recordset
'
查询DB
MyADORecordset.Open "SELECT * FROM Customers WHERE " & _
"LastName = '" & LastName & "'", cn, adOpenForwardOnly, adLockReadOnly
Set MyADORecordset.ActiveConnection = Nothing
Set GetCustomer = MyADORecordset ' Return the recordset.
End Function
而在客户机上调用该函数的代码可能是:
Option Explicit Private SomeServer As Object Private Sub Command1_Click() '
客户可以使用lighter ADOR
库。设置对' Microsoft ActiveX Data Objects 2.0
库的引用。Dim MyData As ADOR.Recordset
Set SomeServer = CreateObject("foo.bar", myserver)
Set MyData = SomeServer.GetCustomer("Smith")
'
使用数据。End Sub