2

DB を分析し、ADODB コマンドまたはレコードセットから実行して各テーブルの結果を MS Excel ワークシートに取得し、"sp_MSforeachtable 'EXECUTE sp_spaceused [?];';"CopyFromRecordset を使用して結果を Excel に出力したいと考えています。

私が使用しているコードは次のとおりです。

Sub analyseHermesDB()
Dim oConn As Object, oRec As Object, oField As Object, iIndx As Integer

' sp_MSforeachtable 'EXECUTE sp_spaceused [?];';
Set oConn = CreateObject("ADODB.Connection")
Set oRec = CreateObject("ADODB.Recordset")

oConn.Open "FILE NAME=" & ThisWorkbook.Path & "\conn.udl"
    With oRec
        .activeconnection = oConn
        .Source = "sp_MSforeachtable 'EXECUTE sp_spaceused [?];';"
        .cursorlocation = 3
        .Open
        For iIndx = 0 To .fields.Count - 1
            ActiveCell.Offset(0, iIndx).Value = .fields(iIndx).Name
        Next
        Do Until .EOF
            ActiveCell.Offset(.absoluteposition, 0).CopyFromRecordset oRec
            .movenext
        Loop
        ActiveCell.Offset(0, 1).Value = .RecordCount
        .Close
    End With

End Sub

問題は次のとおりです"sp_MSforeachtable 'EXECUTE sp_spaceused [?];';"。SQL Server 2008 Management Studio で実行すると、テーブルごとに 1 つの結果セットが得られます。

ADO を使用した呼び出しから返されるレコードセットは 1 つだけです

私は何を間違っていますか?レコードセットの配列を取得しようとするかsp_MSforeachtable、テーブルのリストを取得するために実行してからEXECUTE sp_spaceused [?];'、それぞれに対して実行する必要がありますか?

4

2 に答える 2