テーブルの操作

#1 フィールド名を求める

<使用例>

'---------------------------------------------------------------------
'概要   テーブルのフィールド名を取得する
'       ここでは、フィールド数が12ある[tbl得意先]テーブルの
'       フィールド名をDAO・ADOで取得する
'---------------------------------------------------------------------
Sub テーブルのフィールド名を求めるDAO()

    Const strTbl As String = "tbl得意先"

    Dim dbs As Database
    Dim rst As DAO.Recordset
    Dim fld As DAO.Field      'Fieldオブジェクトを宣言します
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strTbl)
    
    For Each fld In rst.Fields
        Debug.Print fld.Name
    Next fld

    rst.Close: Set rst = Nothing
    dbs.Close: Set dbs = Nothing
End Sub

<実行結果>
得意先コード
  ・
 (省略)
  ・
電話番号
ファクシミリ


Sub テーブルのフィールド名を求めるADO()

    Const strTbl As String = "tbl得意先"

    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim fld As ADODB.Field      'Fieldオブジェクトを宣言します
    
    Set cnn = CurrentProject.Connection
    rst.Open strTbl, cnn, adOpenKeyset, adLockOptimistic
        
    For Each fld In rst.Fields
        Debug.Print fld.Name
    Next fld
  
    rst.Close
    cnn.Close: Set cnn = Nothing
End Sub

<実行結果>
得意先コード
  ・
 (省略)
  ・
電話番号
ファクシミリ

#2 フィールド数を求める

<使用例>

'---------------------------------------------------------------------
'概要   テーブルのフィールド数を取得する
'	ここでは、フィールド数が12ある[tbl得意先]テーブルの
'	フィールド数をDAO・ADOで取得する
'---------------------------------------------------------------------
Sub テーブルのフィールド数を求めるDAO()

    Const strTbl As String = "tbl得意先"

    Dim dbs As Database
    Dim rst As DAO.Recordset
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strTbl)

    Debug.Print "フィールド数:" & rst.Fields.Count
    
    rst.Close: Set rst = Nothing
    dbs.Close: Set dbs = Nothing
End Sub

<実行結果>
フィールド数:12


Sub テーブルのフィールド数を求めるADO()

    Const strTbl As String = "tbl得意先"

    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    
    Set cnn = CurrentProject.Connection
    rst.Open strTbl, cnn, adOpenKeyset, adLockOptimistic
        
    Debug.Print "フィールド数:" & rst.Fields.Count
  
    rst.Close
    cnn.Close: Set cnn = Nothing
End Sub

<実行結果>
フィールド数:12

#3 レコード数を取得する

<使用例>

'---------------------------------------------------------------------
'概要   テーブルのレコード数を取得する
'	ここでは、レコード数が51ある[tbl得意先]テーブルの
'	レコード数をDAO・ADOで取得する
'---------------------------------------------------------------------
Sub テーブルのレコード数を求めるDAO()

    Const strTbl As String = "tbl得意先"

    Dim dbs As Database
    Dim rst As DAO.Recordset
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strTbl)

    Debug.Print "レコード数:" & rst.RecordCount
    
    rst.Close: Set rst = Nothing
    dbs.Close: Set dbs = Nothing
End Sub

<実行結果>
レコード数:51


Sub テーブルのレコード数を求めるADO()

    Const strTbl As String = "tbl得意先"

    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    
    Set cnn = CurrentProject.Connection
    rst.Open strTbl, cnn, adOpenKeyset, adLockOptimistic
        
    Debug.Print "レコード数:" & rst.RecordCount
  
    rst.Close
    cnn.Close: Set cnn = Nothing
End Sub

<実行結果>
レコード数:51

#3 テーブル名を取得する

<使用例>

'---------------------------------------------------------------------
'概要   テーブル名一覧を取得する
'       DAO・ADO・ADOXでテーブル名を取得する
'---------------------------------------------------------------------
Sub テーブル名一覧を取得するDAO()

    Const strTbl As String = "tbl得意先"
    
    Dim dbs As Database
    Dim tdf As DAO.TableDef
    
    Set dbs = CurrentDb
    
    For Each tdf In dbs.TableDefs

        If tdf.Attributes Then
        Else                        'システムオブジェクト以外
            Debug.Print tdf.Name
        End If
    Next tdf
    
    Set tdf = Nothing
    dbs.Close: Set dbs = Nothing
End Sub


Sub テーブル名一覧を取得するADO()

    Const strTbl As String = "tbl得意先"
    
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    
    Set cnn = CurrentProject.Connection
    Set rst = cnn.OpenSchema(adSchemaTables)
    
    With rst
        Do While Not .EOF
            If .Fields("TABLE_TYPE") = "TABLE" Then
            
                Debug.Print .Fields("TABLE_NAME")
            End If
            
            .MoveNext
        Loop
    End With
    
    rst.Close
    cnn.Close: Set cnn = Nothing
End Sub


Sub テーブル名一覧を取得するADOX()

    Dim cnn As New ADODB.Connection
    Dim cat As New ADOX.Catalog
    Dim tbl As ADOX.Table
    
    Set cnn = CurrentProject.Connection
    cat.ActiveConnection = cnn

    For Each tbl In cat.Tables
    
        If tbl.Type = "TABLE" Then
        
            Debug.Print tbl.Name
        End If
    Next
    
    Set cat = Nothing
    Set cnn = Nothing
End Sub