0

在这段代码中,作者引用了一个记录集对象,我只是想确保在继续之前了解原因。

Private Sub LoadDataBound()
  Set rs = GetData
If Not rs.EOF Then
    Set dgPend.DataSource = rs '     Bind the Datagrid to the recordset
    dgPend.Refresh
    dgPend.AllowUpdate = True
Else
    MsgBox "No Records Found in DataGrid!"
End If

'Call Bind_Contols
'Call End_Time
End Sub



Private Function GetData() As ADODB.Recordset
sWhichDataType = UCase(Trim(sWhichDataType))

Select Case sWhichDataType
Case "ADS"
    sSource = "\\development\brakechecktables\speedwrench.add"
    Set GetData = OpenADS
Case "SQL"
    sSource = "development"
    Set GetData = OpenSQL
Case "FOX"
    sSource = "E:\Yes30\Data\speedwrench\"
    Set GetData = OpenFOX
Case Else
    MsgBox "Invalid DataSet Selected"
End Select
End Function

在 LoadDataBound 中,它说 set rs = GetData()。这调用了下面的函数,但是为什么需要将它设置为 rs 记录集的对象。在这里纠正我,因为我很可能是错的,但它是否需要这样做,以便您能够从记录集中创建一个函数,而不必为两者(记录集和函数)使用相同的名称?或者这里是否有另一个我不知道的过程。

4

1 回答 1

1

我很乐意帮助您理解代码,但我真的很难理解您的问题以及您的困惑是什么。您似乎对变量、对象和方法(函数和子例程)的含义、区别和用途感到困惑。代码相当简单易懂,所以我猜你的问题是你是编程新手。代码看起来写得不是很好,这可能是您困惑的一部分。看起来封装得不是很好,但也不是完全糟糕。我当然见过更糟糕的情况。

所以,假设我的假设是正确的,让我从解释变量、对象和方法开始,然后我将简要解释代码在做什么。如果这不能回答您的问题,请澄清。

变量

变量是最简单的概念。它是对存储在内存中的值的命名引用。在代码中,rs是一个变量。每个变量都有一个类型,因此只能将它们设置为与该类型兼容的值。您没有显示rs声明变量的代码,所以我只是假设它被声明为 的类型ADODB.Recordset,例如:

Private rs As ADODB.Recordset

对象

另一方面,一个对象是微妙的不同。对象是类型的一个实例。 RecordSet是一种对象,但它本身不是对象。可能创建了许多相同类型的对象。每个对象通常独立于同一类型的所有其他对象(尽管在某些情况下它们可以共享数据)。变量引用的值始终是某种类型的对象。许多变量可以引用同一个对象,但每个对象至少被一个变量引用。如果一个对象不再被任何变量引用,它可能会在内存中存在一段时间,但最终会被垃圾收集器销毁。变量不必引用任何对象。它可以改为引用Nothing. 例如:

rs = New ADODB.RecordSet()  'rs now references a RecordSet object
rs = Nothing  'rs now references no object at all

New运算符是创建新对象的对象。对象没有名称(除非它们以某种方式自己实现),因此即使调用了上述变量rs,这也不是对象的名称。例如,我可以这样做:

rs = New ADODB.RecordSet()
temp = rs

在这个例子中,temp现在rs两者都引用了同一个对象,并且在一个对象中所做的更改将自动反映在另一个对象中。因此,rs 和 temp 不是对象本身的名称。它们只是引用它的变量的名称。

方法

方法是一组逻辑代码,希望是封装的代码,它被分配了一个名称,并且可以使用该名称随时调用。方法可以选择采用参数列表,并且可以选择返回单个值。在VB中,如果方法返回一个值,它被称为a Function,如果它不返回一个值,它被称为Sub例程。

值类型与引用类型

我不会详述它,因为我不想让你感到困惑,但到目前为止我所说的一切都适用于引用类型,但不适用于值类型。基本上,引用类型通常是更复杂的对象类型,它们存储更多数据并且通常是可变的。值类型通常更简单、更小且不可变。两个变量可以引用同一个引用类型对象,但不能对值类型对象(如 Integer)这样做。

您的代码说明

您的代码包含一个名为GetData. 将其作为一种方法的原因可能是双重的。首先,作者可能将其作为方法制作,因为他打算从代码中的多个位置调用它。在这种情况下,创建一个可以完成工作的方法总是一个好主意,这样您就不会在多个地方复制相同的代码。其次,作者可能只是想让它成为一种使代码更易于阅读的方法。与其将所有代码直接放入方法中并需要在代码中添加注释说明该部分代码正在获取数据,不如将其LoadDataBound分解为一个名为 GetData 的单独方法更容易阅读,然后它就是 self-记录。

GetData方法不接受任何参数并返回一个新ADBDB.RecordSet对象。在GetData方法内部,它调用 OpenADS、OpenSQL 或 OpenFOX,正是这些方法必须创建新的 RecordSet 对象并用数据库中的值填充它。

LoadDataBound方法从数据库中获取数据,然后使用数据绑定在表单上加载带有该数据的控件。它做的第一件事是调用GetData创建一个新 RecordSet 对象的方法,用数据填充它,然后将该新对象返回给该LoadDataBound方法。该LoadDataBound方法将rs变量设置为引用由 返回的新 RecordSet 对象GetData

然后该LoadDataBound方法检查返回的 RecordSet 对象是否GetData包含任何数据。如果是,则将该数据加载到控件中,否则将显示一个消息框。

于 2012-06-02T10:44:45.590 回答