2017-01-11 5 views
0

私は動的にrecordCountを取得し、それを.GetRowsに渡そうとしていますが、1レコードだけを配列に取り込みます。私が静的に.GetRowsメソッドに数値を入れると、それは正常に動作しますが、これは明らかに理想的ではありません。MS-Access RecordCount有効な数値を返しますが、.GetRowsは1レコードしか取得しません。

この作品

Set rs = CurrentDb.OpenRecordset("SELECT * FROM Client", dbOpenDynaset, dbSeeChanges) 
aRR = rs.GetRows("random number") 
For i = 0 To rs.RecordCount - 1 
    For j = 0 To rs.Fields.Count - 1 
     Debug.Print ; aRR(j, i) 
    Next j 
Next i 

これは私が、私は、ウェブ上で発見した複数のものを試してみましたが、明らかに、私は何かが欠けする必要があります

Set rs = CurrentDb.OpenRecordset("SELECT * FROM Client", dbOpenDynaset, dbSeeChanges) 
With rs 
    rs.MoveLast 
    Debug.Print ; rs.RecordCount 
    Q = rs.RecordCount 
    aRR = rs.GetRows(Q) 
End With 
For i = 0 To rs.RecordCount - 1 
    For j = 0 To rs.Fields.Count - 1 
     Debug.Print ; aRR(j, i) 
    Next j 
Next i 

ではないでしょうか?これに簡単なアプローチがあるのですか、DISTINCTクラスで再クエリーし、そのレコードセット内の戻り値を新しい変数に渡す必要がありますか?

答えて

2

GetRowsもレコードセットのポインタを使用します。 rs.MoveLastでは、そのポインタを最後の行に置きます。そのため、1つの行だけが返されます。この問題を解決するには、をQに設定した後に追加します。

+0

あなたは素晴らしいです! – Phesago

0

前述のPhesagoのように、Accessは、レコードセット内のレコードに基づいてレコードカウントのみを返します。レコードセットを扱う際の一般的な習慣として、私はいつも以下のテンプレートから始めます:

Private Sub CreateRecordset() 
    Dim rs As Recordset 
    Dim sql As String 

    sql = "SELCT * FROM tblSomeTable" 

    Set rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges) 

    With rs 
     If Not .EOF And Not .BOF Then 
      .MoveLast 
      .MoveFirst 

      Dim i As Integer 

      For i = 0 To rs.RecordCount - 1 
       'do whatever actions desired 



      Next 

     End If 
    End With 
End Sub 
関連する問題