アクセスでフィールド名を変数化できないの?

解決


Teru  2004-02-10 01:07:33  No: 111740

はじめまして、超初心者ですので、質問文も間違っているかもしれないですが
よろしくお願いします。
プログラムは以下の通りです。(一部省略してます)
Public Sub CategoryB_Get(CategoryA_Text As String)
    Dim ID_Num As Integer
    Dim rs_text As String
    Dim AccessApp As Object 'Access.Application
    
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                        & "Data Source=C:\_MyWork\DataBase\" & "WindowInt.mdb"
    cn.Open
        
    Set rs = New ADODB.Recordset
    rs.Open "CategoryB", cn, adOpenStatic    '"CategoryB"はテーブル名

    ID_Num = 1            
    Do While ID_Num <= 10
        criteria = "ID = '" & ID_Num & "'"    '"ID"はフィールド名

        rs.MoveFirst
        rs.Find criteria, , adSearchForward

        If rs.EOF = True Then
            Beep
            MsgBox ("該当するレコードはありません")
        End If
    
    '該当するレコードが見つかったとき(テスト)
        If rs.EOF = False Then
            Category_List(2, ID_Num) =rs!旅行    '←"旅行"というフィールド名の情報を所得しているのだが
              'この”旅行”という記述を変数に変更したい!
        End If
    ID_Num = ID_Num + 1
    Loop
    rs.Close
    cn.Close
End Sub

上記の"旅行"という部分を変数(Koumoku As String)にして、データの所得をしたいのですが
Category_List(2, ID_Num) ="rs!" & Koumoku などといった記述にしてもエラーが出てしまいます。
この部分の記述を変数化することは可能なのでしょうか?
もし、可能なら、どのような記述が適切なのでしょうか?
ぜひ、力を貸してください。よろしくお願いします。


魔界の仮面弁士  2004-02-10 01:43:44  No: 111741

>   Category_List(2, ID_Num) =rs!旅行        '←"旅行"というフィールド名の情報を所得しているのだが
『rs!旅行.Value』のように、Valueプロパティを明示した方が良いですよ。

で、変数を使ってアクセスする場合は、『Rs.Collect(strFieldName)』などとすればOKです。
他にも、列の値を読み書きする方法は、幾つかの書き方があります。

'序数(列番号)で指定
  Debug.Print Rs.Collect(0)            'Collectプロパティによる操作
  Debug.Print Rs.Fields.Item(0).Value  'Fieldオブジェクトを指定
  Debug.Print Rs.Fields(0).Value       '.ItemはFieldsオブジェクトの規定のプロパティなので、省略可能
  Debug.Print Rs(0).Value              '.Fieldsは、Recordsetオブジェクトの規定のプロパティなので、省略可能

'列名で指定
  Debug.Print Rs.Collect("列名")
  Debug.Print Rs.Fields.Item("列名").Value
  Debug.Print Rs.Fields("列名").Value
  Debug.Print Rs("列名").Value

'コレクションのメンバとして指定
  Debug.Print Rs.Fields![列名].Value
  Debug.Print Rs![列名].Value           '.Fieldsは、Recordsetオブジェクトの規定のプロパティなので、省略可能

ちなみに上記において、『!』による操作は、もっとも低速となります。
(.Fieldsや.Valueといった「規定のプロパティ」を省略した場合は、さらに低速になります)


Teru  2004-02-10 08:58:23  No: 111742

ありがとうございました。
結構悩んでいたのですが、本当に助かりました。
ほかの書込みもとても参考になる物がおおいので、
いろいろ勉強させてもらいます


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加