Visual Basic 的远程特性


“远程”是指在两个不同的进程中传递参数的过程,通常要跨越网络。例如,假设有一个三层系统。在客户机上,应用程序对数据调用,同时传递了几个参数作为准则。在中间层机上,某个 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

猜你喜欢

转载自blog.csdn.net/qq_39674002/article/details/78856912