以下のいくつかの例では、Employees テーブルに Salary フィールドがあると仮定しています。このフィールドは実際の Northwind データベースの Employees テーブルにはありませんので注意してください。
次の例では、Employees テーブルからすべてのレコードの LastName フィールドと FirstName フィールドを選択する SQL ステートメントに基づいて、ダイナセット タイプの Recordset オブジェクトを作成します。ここでは、Debug ウィンドウに Recordset オブジェクトの内容を出力する EnumFields というプロシージャを呼び出しています。
Sub SelectX1()
Dim dbs As Database, rst As Recordset
'
この下の行を、使用しているコンピュータ上の
' Northwind
のパスに変更してください。
Set dbs = OpenDatabase("Northwind.mdb")
' Employees
テーブルにあるすべてのレコードの
' last name
と first name
の値を選択します。
Set rst = dbs.OpenRecordset("SELECT LastName, " _
& "FirstName FROM Employees;")
'
レコード
セットを作成します。
rst.MoveLast
' EnumFields
を呼び出し、Recordset
の内容を
'
出力します。
EnumFields rst,12
dbs.Close
End Sub
次の例では、PostalCode フィールドに値が入力されているレコードの数を数え、返されるフィールドに "Tally" という名前を付けます。
Sub SelectX2()
Dim dbs As Database, rst As Recordset
'
この下の行を、使用しているコンピュータ上の
' Northwind
のパスに変更してください。
Set dbs = OpenDatabase("Northwind.mdb")
' PostalCode
フィールドに値が入力されている
'
レコード数を数え、その結果を
' Tally
フィールドに返します。
Set rst = dbs.OpenRecordset("SELECT Count " _
& "(PostalCode) AS Tally FROM Customers;")
' Recordset
を作成します。
rst.MoveLast
' EnumFields
を呼び出し、Recordset
の内容を
'
出力します。フィールド幅を 12
に設定します。
EnumFields rst, 12
dbs.Close
End Sub
次の例では、社員数、平均給与額、および最高給与額を表示します。
Sub SelectX3()
Dim dbs As Database, rst As Recordset
'
この下の行を、使用しているコンピュータ上の
' Northwind
のパスに変更してください。
Set dbs = OpenDatabase("Northwind.mdb")
'
社員の数を数え、平均給与額を計算して、
'
最高給与額を返します。
Set rst = dbs.OpenRecordset("SELECT Count (*) " _
& "AS TotalEmployees, Avg(Salary) " _
& "AS AverageSalary, Max(Salary) " _
& "AS MaximumSalary FROM Employees;")
' Recordset
を作成します。
rst.MoveLast
' EnumFields
を呼び出し、Recordset
の内容を
'
出力します。Recordset
オブジェクトと必要な
'
フィールド幅を渡します。
EnumFields rst, 17
dbs.Close
End Sub
EnumFields Sub プロシージャには、呼び出し元のプロシージャから Recordset オブジェクトが渡されます。EnumFields は Recordset オブジェクトのフィールドを書式化し、それを 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
に Recordset
の
'
レコードの数を設定します。
lngRecords = rst.RecordCount
'
変数 lngFields
に 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
' Recordset
のレコード数とフィールドの値を
'
出力するループを実行します。
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