2017-09-09 34 views
1

私はMSアクセスのデータベースをExcelに変換するためにデータを取得しようとしています。しかし、レコードセットのrecordcountプロパティは常に-1を返しますが、他の目的のためにコードは正常に動作しています。ADODBレコードセットrecordcountは常に-1を返します

次のように私が使用しているコードは: `サブdatarecordset()

Dim cn As adodb.Connection 
Dim oRs As adodb.Recordset 
Set cn = CreateObject("ADODB.Connection") 
DBPath = "C:\[databse path]" & "\[database name].accdb" 
dbWs = "[excel sheet name]" 
scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath 
dsh = "[" & "[excel sheet name]" & "$]" 
cn.Open scn 
Dim sSQL As String 

Dim F As Integer 

sSQL = "Select 'W',a.[Subledger],NULL,sum(a.[Amount]) from GL_Table a where a.[Opex_Group] = 10003 and year(a.[G/L Date]) = " & Year(Sheets("Repairs").Cells(1, 4)) & " and month(a.[G/L Date]) = " & Month(Sheets("Repairs").Cells(1, 4)) 
sSQL = sSQL & " group by " & "a.[Subledger],(year(a.[G/L Date])),(month(a.[G/L Date]))" 
Set oRs = cn.Execute(sSQL) 
Debug.Print oRs.RecordCount 
oRs.Close 
....... further code to print to excel here 

cn.Close 
End Sub` 

コードは、レコードセットのデータを取得し、Excelで記述します。しかし、レコードセットプロパティはレコードカウントを返さないため、レコードセット内のさまざまなフィールドの値をExcelワークシートの異なるセルに出力することはできません。

私はGoogleで検索し、レコードセットの型を宣言する必要があり、そのためにconnection.executeの代わりにconnection.openを使用する必要があることを理解しました。しかし、コードを変更しようとしていますが、エラーオブジェクト変数または変数が定義されていません。

クイックヘルプは歓迎されます。ありがとう。

+1

[recordcounterror](http://www.adopenstatic.com/faq/)を参照してください。 (recordcountror.asp)と[recordcountalternatives](http://www.adopenstatic.com/faq/recordcountalternatives.asp)を参照してください。 – BitAccesser

答えて

1

@BitAccesserによるリンクは、有効な解決策を提供します。あなたの状況にどのように実装できるクイック: 代わり

Set oRS = CreateObject("ADODB.Recordset") 
oRS.CursorLocation = adUseClient 
oRS.Open sSQL, cn 

ADOさんのRecordCountプロパティは-1を返しますADOは、レコードの数を決定することができないか、プロバイダまたはカーソルタイプがRecordCountををサポートしていない場合Set oRs = cn.Execute(sSQL)の。この最後の1つはこの場合に当てはまります。

これを避けるには、いくつかの解決策があります。最も単純なのは、私が今説明したクライアント側のカーソルを使用することですが、@BitAccesserのリンクには、より多くの代替ソリューションが用意されています。

+0

それは問題を説明します。あなたはあなたの答えでこれを引用するべきです(リンクが死ぬ前に)。 – BitAccesser

+0

うれしい..これはうまくいった。ありがとう。 –

+1

@BitAccesserそのサイトのページのライセンス情報が見つかりません(著作権表示がありますが、仕様はありません)。したがって、すべての権利は著者のために予約されており、彼の記事の1つに大きなセクションをコピーすることは、たとえ引用したとしても著作権侵害とみなすことができます。 [MSDN](https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/recordcount-property-ado)に基づいた簡単な説明を書きます。 –

関連する問題