“远程”是指在两个不同的进程中传递参数的过程,通常要跨越网络。例如,假设有一个三层系统。在客户机上,应用程序对数据调用,同时传递了几个参数作为准则。在中间层机上,某个 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
将 UDT 作为公共 Sub 的参数传递
尽管传递参数在 Visual Basic 的先前版本中就一直是可行的,但将用户定义的类型 (UDT) 作为公共 Sub 的参数进行传递却不行。如上面的示例所示,这一点现在也是可能的。
出于性能的考虑
在进程之外传递参数的代价要远远高于在进程内传递。在传递参数时,数据必须经过整理才能传递给外部的进程。完成该操作的代码可能会有较大的开销,但是 Visual Basic 隐藏了这种开销。然而,远程数据的优点是创建易于理解的代码。根据 UDT 的大小,它可能比 ADO 记录集对象更容易维护。
远程 ADO Recordset
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
针对于第一次机房收费系统中与数据库分享数据连接
Dim mrc As ADODB.Recordset Dim MsgText As String Dim txtSQL As String '判断内容是否为空 If (Text1.Text = "") Then MsgBox "请输入固定用户1小时费用!", vbOKCancel + vbExclamation, "警告" Text1.SetFocus End If If (Text2.Text = "") Then MsgBox "请输入临时用户1小时费用!", vbOKCancel + vbExclamation, "警告" Text1.SetFocus End If If (Text3.Text = "") Then MsgBox "请输入递增单位时间!", vbOKCancel + vbExclamation, "警告" Text1.SetFocus End If If (Text5.Text = "") Then MsgBox "请输入至少上机时间!", vbOKCancel + vbExclamation, "警告" Text1.SetFocus End If If (Text6.Text = "") Then MsgBox "请输入准备时间!", vbOKCancel + vbExclamation, "警告" Text1.SetFocus End If If (Text7.Text = "") Then MsgBox "请输入最少金额!", vbOKCancel + vbExclamation, "警告" Text1.SetFocus End If 'mrc.Delete txtSQL = "select*from basicdata_info" '执行查询语句 Set mrc = ExecuteSQL(txtSQL, MsgText) '--------------------------------------- '窗口中添加查询历史记录功能(2017年12月20日备注:未添加此功能) '---------------------------------------- If mrc.RecordCount = 0 Then MsgBox "请添加基本数据", vbOKOnly + vbExclamation, "警告" Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text5.Enabled = True Text6.Enabled = True Text7.Enabled = True Command2.Enabled = False Command3.Enabled = True Command1.Enabled = False Else mrc.AddNew mrc.Fields(0) = Trim(Text1.Text) mrc.Fields(1) = Trim(Text2.Text) mrc.Fields(2) = Trim(Text3.Text) mrc.Fields(3) = Trim(Text5.Text) mrc.Fields(4) = Trim(Text6.Text) mrc.Fields(5) = Trim(Text7.Text) mrc.Fields(6) = Trim(1) mrc.Fields(7) = Trim(Date) mrc.Fields(8) = Trim(Time) mrc.Update MsgBox "修改成功!", vbOKOnly + vbExclamation, "警告" 'mrc.Bookmark = mybookmark End If