2016-06-22 9 views
1

初めてのポスターで、私は最終的に私がここで答えを見つけることができないという質問をしました。vbaは整数変数としてレコードセットを格納します

私は整数変数(x)として格納する1つの結果(数値)を返すMS Accessクエリを持っていますので、後でループに使用できます。問題は、私がレコードセットとして使用しているため、変数が整数であるため、「型の不一致」エラーが発生しています。

は、今私はただのセルに結果を格納し、セルに等しい変数を設定しています:

Ws.Range("A1") = Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1) 

x = Ws.Range("A1") 

Ws.Range("A1").Delete 

そしてその後、私はちょうどX回を実行ループがあります。

x = Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1) 
For i = 0 To x 

は基本的に、私はこのようになりますいくつかのコードを持っていると思います

ここで助けがあれば巨大になるでしょう。ありがとうございました!

Dim x As Integer 
Dim db As DAO.Recordset 

db.MoveFirst 
If IsNumeric(db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").Fields(0).Value) Then 
    x = CInt(db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").Fields(0).Value) 
Else 
    MsgBox "The query did not return a number." & Chr(10) & "Aborting..." 
End If 

ノート、ポスト上の元のタグが示されているように、あなたがDAOなくADOを使用していること:

+0

これをテストするものはありませんが、 '.GetRows'メソッドの' .Value'プロパティはありますか?または、 'x = CInt(LBound(Db.OpenRecordset)(SELECT COUNT(Asset_Name)FROM Asset Active = True ')。GetRows(1)))' –

+0

ステートメントの末尾に '.value'を追加すると、 'x = Db.OpenRecordset(" SELECT COUNT(Asset_Name)FROM Assets WHERE Active = True ")。GetRows(1).Value'" Object Required "エラーが発生します。 –

+0

あなたの声明を待ち伏せてください。あなたのコードはエラーではありませんが、xはゼロとして返します。しかし、これはまだ進歩しています。 –

答えて

1

次はあなたに正しい結果を与える必要があります。それでも、どちらも同じように動作し、カーソルは通常、最初の行(データが返されたとき)にあります。したがって、MoveFirstは必要ありません。それでも、マイクロソフト自身が常にサンプルコードで使用し続けています。最初の列がDAOおよびADOの場合は.Fields(0)です。

+0

完了!蘭のような魅力。タグの変更を含め、非常に感謝しています –

関連する問題