• ベストアンサー
  • すぐに回答を!

Access レコードセットを動的配列に

  • 質問No.5511631
  • 閲覧数4125
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 73% (17/23)

初めて質問させていただきます。Access勉強中です。
Access VBA 2007 でテーブルのデータを取得した動的配列から、構造体定義した動的配列に入れたいのですが、コンパイルエラーが発生してしまいます。
ネットで調べたのですがわからずじまいで、ここで相談させていただいています。

やりたいことは、テーブルの内容全てを動的配列に入れたい、それだけです。
やり方には固執していませんので、よろしくお願いします。

[コンパイルエラー]
パブリック オブジェクト モジュールで定義されたユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。

[実際のプログラム]Form内のボタン押下時に実行される
Private Sub btn_Click()

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim varRecords As Variant
Dim intRecCnt As Integer

Set db = CurrentDb()
Set rst = db.OpenRecordset(テーブル名称, dbOpenSnapshot)
rst.MoveLast: rst.MoveFirst
intRecCnt = rst.RecordCount
varRecords = rst.GetRows(intRecCnt)

Dim COutRec() As Record
'行ループ
For intRLoop = 0 To UBound(varRecords, 2)
ReDim Preserve COutRec(intRLoop)
'列方向(フィールド)のループ
For intCLoop = 0 To UBound(varRecords, 1)
'配列の各データを配列にセット
COutRec(intRLoop, intCLoop) = varRecords(intCLoop, intRLoop)
Next intCLoop
Next intRLoop
End Sub

[構造体定義]標準モジュール内に定義している
Type Record
A As String
B As String
End Type

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 73% (370/504)

rst で扱うのはフィールド2つだけですよね。

であれば、以下でどうでしょうか。


Type Record
  A As String
  B As String
End Type


Private Sub btn_Click()
  Dim db As DAO.Database
  Dim rst As DAO.Recordset
  Dim varRecords As Variant
  Dim intRecCnt As Long
  Dim i As Long
  Dim COutRec() As Record

  Set db = CurrentDb()
  Set rst = db.OpenRecordset(テーブル名称, dbOpenSnapshot)
  rst.MoveLast: rst.MoveFirst
  intRecCnt = rst.RecordCount
  varRecords = rst.GetRows(intRecCnt)
  rst.Close
  Set rst = Nothing: Set db = Nothing

  ReDim COutRec(intRecCnt - 1)

  '行ループ
  For i = 0 To intRecCnt - 1
    COutRec(i).A = varRecords(0, i)
    COutRec(i).B = varRecords(1, i)
  Next
End Sub
お礼コメント
1192296jp

お礼率 73% (17/23)

回答ありがとうございます。

無事にできました。大変助かりました。
投稿日時:2009/12/11 14:23
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ