28

SQLクエリの結果をExcelシート(Excel 2007)に取得する方法を示すVBAコードスニペットをMSDNからコピーしています。

Sub GetDataFromADO()

    'Declare variables'
        Set objMyConn = New ADODB.Connection
        Set objMyCmd = New ADODB.Command
        Set objMyRecordset = New ADODB.Recordset

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
        objMyConn.Open

    'Set and Excecute SQL Command'
        Set objMyCmd.ActiveConnection = objMyConn
        objMyCmd.CommandText = "select * from myTable"
        objMyCmd.CommandType = adCmdText
        objMyCmd.Execute

    'Open Recordset'
        Set objMyRecordset.ActiveConnection = objMyConn
        objMyRecordset.Open objMyCmd

    'Copy Data to Excel'
        ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)

End Sub

参照として、Microsoft ActiveX Data Objects2.1Libraryをすでに追加しました。そして、このデータベースにアクセスできます。

このサブルーチンを実行すると、エラーが発生します。

実行時エラー3704:オブジェクトが閉じているときの操作は許可されていません。

声明について:

ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)

なぜですか?

ありがとう。

4

6 に答える 6

1

関連するソフトウェアが何もない状態でコンピューターの前に座っていますが、記憶からそのコードは間違っているように見えます。コマンドを実行していますが、返されるを破棄しRecordSetていobjMyCommand.Executeます。

私はするだろう:

Set objMyRecordset = objMyCommand.Execute

...そして、「開いているレコードセット」の部分が失われます。

于 2009-07-13T21:25:35.110 に答える
0

set nocount onストアド プロシージャの先頭に追加します (SQL Server を使用している場合)。私は自分の仕事でこの問題を解決したばかりで、使用しようとし"1203 Rows Affected"ていた にロードされるなどの中間結果が原因Recordsetでした。

于 2010-08-09T23:03:16.120 に答える