SELECT 语句,FROM 子句示例

下列示例假设在员工表中存在一个假设的工资字段。请注意,此字段 实际上在 Northwind 数据库员工表之中并不存在。

此示例创建一个 dynaset 型 Recordset基于 SQL 语句选择在员工表中的所有纪录的姓和名字段。它调用 EnumFields 过程,且该过程打印 Recordset 对象的内容到“调试”窗口。

Sub SelectX1()

    Dim dbs As Database, rst As Recordset

    ' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

    Set dbs = OpenDatabase("Northwind.mdb")

    ' 对运费超过 $100 的订单,

    ' 从员工表中选择姓和名值,

    ' 员工表中的记录.

    Set rst = dbs.OpenRecordset("SELECT LastName, " _

        & "FirstName FROM Employees;")

    '移居记录集。

    rst.MoveLast

' 调用 EnumFields 来打印记录集的内容。

'

    EnumFields rst,12

dbs.Close

End Sub

此示例计算记录的数字,且该记录的数字在邮编字段有输入项并且返回帐簿字段。

Sub SelectX2()

    Dim dbs As Database, rst As Recordset

    ' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

    Set dbs = OpenDatabase("Northwind.mdb")

    ' 对运费超过 $100 的订单,

    ' 计算邮编值记录的笔数

    ' 并且返回在帐簿字段之中的合计。

    Set rst = dbs.OpenRecordset("SELECT Count " _

        & "(PostalCode) AS Tally FROM Customers;")

    ' populateRecordset。

    rst.MoveLast

    ' 调用EnumFields打印此内容

    ' populateRecordset。' 指定其字段宽度为 12。

    EnumFields rst, 12

    dbs.Close

End Sub

此示例显示员工的人数和平均的及最高的工资。

SubSub()

    Dim dbs As Database, rst As Recordset

    ' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

    Set dbs = OpenDatabase("Northwind.mdb")

' 对运费超过 $100 的订单,

    ' 计算员工的人数,

    ' 计算平均工资,并且返回最高工资。

    Set rst = dbs.OpenRecordset("SELECT Count (*) " _

        & "AS TotalEmployees, Avg(Salary) " _

        & "AS AverageSalary, Max(Salary) " _

        & "AS MaximumSalary FROM Employees;")

    ' populateRecordset。

    rst.MoveLast

    ' 调用EnumFields打印此内容

    ' populateRecordset。传递此记录集对象和

    ' 要求的字段宽度.

    EnumFields rst, 17

    dbs.Close

End Sub

一个记录集对象被从调用过程传递到Sub过程 EnumFields。然后此过程把记录集的字段格式化并打印到Debug窗口。intFldLen 变量是需要打印字段的宽度。某些字段可能被截断。

Sub EnumFields(rst As Recordset, intFldLen As Integer)

    Dim lngRecords As Long, lngFields As Long

    Dim lngRecCount As Long, lngFldCount As Long

    Dim strTitle As String, strTemp As String

    ' 把lngRecords设为对记录集中的记录数可变

    '

    lngRecords = rst.RecordCount

    ' 把 lngFields设为对此数目可变

    & " fields in the recordset."

    lngFields = rst.Fields.Count

    

    Debug.Print "There are " & lngRecords _

        & " records containing " & lngFields _

        & " fields in the recordset."

    Debug.Print

    

    ' 打印列标头的窗体字符串。

    strTitle = "Record "

    For lngFldCount = 0 To lngFields - 1

        strTitle = strTitle _

        & Left(rst.Fields(lngFldCount).Name _

        & Space(intFldLen), intFldLen)

    Next lngFldCount

    

    ' 打印列标头。

    Debug.Print strTitle

    Debug.Print

    

    ' 通过记录集循环;打印此记录数和字段值.

    '

    rst.MoveFirst

    For lngRecCount = 0 To lngRecords - 1

        Debug.Print Right(Space(6) & _

            Str(lngRecCount), 6) & " ";

        For lngFldCount = 0 To lngFields - 1

            ' 检查 Null 值。

            If IsNull(rst.Fields(lngFldCount)) Then

                strTemp = "<null>"

            Else

                ' 设置 strTemp 到字段内容。

                Select Case _

                    rst.Fields(lngFldCount).Type

                    Case 11

                        strTemp = ""

                    Case dbText, dbMemo

                        strTemp = _

                            rst.Fields(lngFldCount)

                    Case Else

                        strTemp = _

                            str(rst.Fields(lngFldCount))

                End Select

            End If

            Debug.Print Left(strTemp _

                & Space(intFldLen), intFldLen);

        Next lngFldCount

        Debug.Print

        rst.MoveNext

    Next lngRecCount

End Sub