• ベストアンサー

VBAでフィールドを配列読み

OS Windows2000 ACCESS 2000 レコードが、住所、名前、DATA1・・・・DATA100 のような時 Set ws = DBEngine.Workspaces(0) Set db = ws.Databases(0) Set qd = db.CreateQueryDef("", Sql) Set rs = qd.OpenRecordset() DATA1~DATA100を取得するのに me.text1.text = rs!data1 me.text2.text = rs!data2 . . me.text100.text = rs!data100 上記のようすると大変なので 配列のように扱う方法は、ないでしょうか? 宜しくお願いします

  • boo3
  • お礼率66% (6/9)

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

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

DATA1・・・DATA100は質問上こういう連番付きな名前にしてあるだけかな~と思ったのですが違いますか? >レコードが、住所、名前、DATA1・・・・DATA100 で「SELECT *」でとって来たと仮定すると、 rs.Fields(0) : 住所 rs.Fields(1) : 名前 rs.Fields(2) : DATA1 rs.Fields(3) : DATA2 ・・・ rs.Fileds(101): DATA100 と、数値で取れるみたいなので、 ループにはrs.Fields("DATA" & i) よりも rs.Fields(i+1)がよろしいかと思います。 もちろんDATA1・・・DATA100が実際の名前ならば、 rs.Fields("DATA" & i)で良いと思います。

boo3
質問者

お礼

時間が無いのに、はまってましたぁ(T.T) ありがとうございます。

その他の回答 (2)

回答No.2

間違えました ×Me.Controls("test" & i).text = rs.Fields("data" & i).Value ↓ ○Me.Controls("text" & i).text = rs.Fields("data" & i).Value 「text」プロパティ?「Value」プロパティ使用したほうが良いような...

回答No.1

Dim i As Integer For i = 1 To 100 Step 1   Me.Controls("test" & i).text = rs.Fields("data" & i).Value Next こんな感じですかね

関連するQ&A

  • DAOでデータベースを二つ開くには?

    環境 Windows2000 VB6 DAOで同じデータベースを開くためのやり方がわかりません。 下記のようにマスタのキーを使用して他のテーブルの 内容を更新したいのですが よろしくお願いします。m(__)m Dim ws As Workspace Dim db As Database Dim qd As QueryDef Dim rs As Recordset Dim STRSQL As String dim strsql2 as string Set ws = DBEngine.Workspaces(0) Set db = ws.Databases(0) STRSQL = "SELECT KEY FROM マスタ" Set qd = db.CreateQueryDef("", STRSQL) Set rs = qd.OpenRecordset() Do While Not rs.EOF strsql2 = "Update data from マスタ where key = " & rs!key ???? rs.MoveNext Loop rs.Close qd.Close db.Close

  • 初歩的なSQLですが・・・

    私の環境はOS:Xp      ACCESS2000です。 宜しくお願いします 今AccessVBAで作業をしているのですが、 Dim ws As DAO.Workspace Dim DB As DAO.Database Dim rs As DAO.Recordset Dim sql As String Set ws = DBEngine.Workspaces(0) Set DB = ws.Databases(0) sql = "select MAX(銀行コード) from 銀行テーブル ;" Set rs = DB.OpenRecordset(sql) Me.合計 = rs このSQL文で銀行テーブルに入っている銀行コードの最大値を取得したいのですが、取得した後どのように記述したら「rs」から値を引っ張り出せるのでしょうか? 宜しくお願いします。

  • DAOでODBC経由のRDBに接続し、SQLでアクセスしたい。

    Dim ws As DAO.Workspace, db As DAO.Database Dim rs As DAO.Recordset ' デフォルトのワークスペースを定義する Set ws = DBEngine.Workspaces(0) ' ODBC接続文字列を指定してデータベースを開く Set db = ws.OpenDatabase("", False, False, _ "DSN=SQL_K;ODBC;Driver={SQK_K};" & _ "SERVER=(local);DATABASE=pubs;" & _ "UID=*****;PWD=*****;" ' SQLステートメントを指定してレコードセットを作成する Set rs = db.OpenRecordset("select * from TWSQLK1",dbOpenDynaset, dbSeeChanges)   このレコードセットは正常に行きますが   直接SQLを記述する方法が、わかりません   

  • 初心者ですデータベースの形式 ・・・を認識できませんというエラーがでます

    VBを始めたばかりの初心者でDB接続がいまだによくわかっていません。 以下のプログラムをデバックするとデータベースの形式 <ファイル名> を認識できません というエラーがでてしまいます。access2007はインストールしたばかりで何も設定とかは いじってないと思います。 利用ソフト VB2008 Express Edition MS ACCESS 2007 Imports dao Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'DAOのオブジェクト変数を宣言する() Dim ws As dao.Workspace Dim db As dao.Database Dim rs As dao.Recordset ' デフォルトのワークスペースを定義する 'DAO.DBEngine.Workspaces(0)の関数 'ws = DBEngine.Workspaces(0) Dim obj As DBEngine = New DBEngine() ws = obj.Workspaces(0) Try ' データベースを開く db = ws.OpenDatabase("C:\Users\PCUser\Desktop\database\Database1.accdb") ' テーブル名を指定してレコードセットを作成する rs = db.OpenRecordset("adress", RecordsetTypeEnum.dbOpenDynaset) Catch ex As Exception MsgBox(ex.Message) End Try MsgBox("DB接続") End Sub

  • テキストボックスに入れた内容をAccessのテーブルに登録する方法を教えてください。

    はじめまして。 VBでフォームに作ったテキストボックス(text1、text2、text3)に値を入れてコマンドボタンを押したらAccessのテーブルに値を登録できるようにしたいのですが上手くいきません。自分で調べながらコーディングしたのですが上手く動かずどうすれば動くのかVBのコーディングを教えていただきたいです。よろしくお願いします。 [Accessのファイル名] db1.mdb [db1.mdbのテーブル名] ListName [ListNameの各項目] 名前、住所、生年月日 [VBのフォーム] text1.textbox、text2.textbox、text3.textbox Add.command [コーディングの内容] Microsoft DAO 3.6 Object Library参照設定 Private Sub Add_Click() Dim strSQL As String Dim dbName As String Dim dbs As DAO.Database Dim myset As DAO.Recordset Dim ws As DAO.Workspace Set ws = DBEngine.Workspaces(0) Set dbs = ws.OpenDatabase("C:\db1.mdb") If Dir("C:\db1.mdb") <> "" Then strSQL = "INSERT INTO Listname (名前,生年月日, _ 住所) values(text1.text, text2.text, text3.text)" Me.AutoRedraw = True Set myset = dbs.OpenRecordset(strSQL) End If End Sub ※無効な処理です。というエラーが出ます。

  • Excel VBA DAO について

    いつもお世話になっております。 現在Excel2007でマクロを組みました。 下記ソースのような形で、マクロを実行するブック内にあるシートから、データを取得するのですが・・・・ ~ソース例~ dim dbEngine as object Dim db as object Dim rs as object Dim sql as object '■SQL格納 sql = sql & "Select 社員名 " sql = sql & " ,Sum(月収) as 年収 " sql = sql & " From 月収一覧 " sql = sql & "Group By 社員名,月収; " '■DBを開く Set dbEngine = CreateObject("DAO.DBEngine36") Set db = dbEngine.OpenDatabase("C:\社員月収.xls", False, False, "Excel8.0;") '■SQL実行後レコードセットへ格納 Set rs = db.Openrecordset(sql) としていますが「■DBを開く」の部分でCreateObject内で宣言している”DAO.DBEngine36”の部分をそのPCのDAOライブラリのバージョンによって変更したいのですが、可能なのでしょうか?? 以上です><よろしくお願いいたします!!

  • 拡張子が.mdbでないアクセスファイルを開くには?

    拡張子が.mdbでない以下のようなアクセスファイルOSAKA.sffを開くにはどのようにしたらよいですか? 現状、 Set db の行で 実行時エラー3343“データベースの形式認識できません”とエラーが出ます。 Private Sub Command5_Click() Dim ws As DAO.Workspace Dim db As DAO.Database Dim rs As DAO.Recordset 'デフォルトのワークスペースを定義する Set ws = DBEngine.Workspaces(0) 'データベースを開く Set db = ws.OpenDatabase("C:\Data\OSAKA\OSAKA.sff") End Sub

  • Access97 VBAにてレコードの検索

    お世話になります。 フォームでのレコード追加の際、 重複入力を避けるためにレコード検索を追加したいのですが、うまくいきません。 ただいまのソースは、 Set db = DBEngine.Workspaces(0).Databases(0) Set myrs = db.OpenRecordset("社員マスター", DB_OPEN_DYNASET) myrs.FindFirst "社員_cd =" & " '" & Me.社員_cd & "' " If myrs.NoMatch = False Then IMsg = "すでに登録されています!!!" IRet = MsgBox(IMsg, 16, "エラー") myrs.Close db.Close Exit Sub End If 以上はうまく機能するのですが、 社員マスターのキーを"部門_cd"と"社員_cd"にする場合、 単純に社員_cdのみのチェックではダメで、部門_cdのチェックも同時に必要になるかと思いますが、うまくコーディングできず。 myrs.FindFirstの一文を適切に書いてやらなければいけないと思いますが、わかりません……。 教えていただけますでしょうか? ※質問文のみでは情報が不足している場合、ご指摘いただければ補足にて追加させていただきます

  • AccessのDAOでフィールド名を配列に格納して・・・

    Access2000のDAOで下記のようなコードで複写元テーブルから複写先テーブルにデータを追加するとします。 Set Rs1 = Db.OpenRecordset("複写元", dbOpenTable) Set Rs2 = Db.OpenRecordset("複写先", dbOpenTable) Do Until Rs1.EOF Rs2.AddNew Rs2!FL1 = Rs1!名前 Rs2!FL2= Rs1!性別 Rs2!FL3= Rs1!郵便番号 Rs2!FL4= Rs1!住所    ・    ・ Rs2! FL50= Rs1! 50番目 Rs2.Update Rs1.MoveNext Loop 複写元のフィールドが50フィールドもあると、いちいちRs1!名前とかRs1!性別とか記述するのが大変ですし、ものすごく長いコードになります。そこで、配列にしてやったらどうだろうかとこんなことをしてみましたがだめでした。 Dim I Dim FieldsName FieldsName=Array("名前","性別",・・・"50番目")            ・            ・ Do Until Rs1.EOF Rs2.AddNew For I=0 To 49 Rs2!フィールド(I) = Rs1!FieldsName(I) Next Rs2.Update Rs1.MoveNext Loop じゃあTebleDifのTd.Fields().Nameを使って・・・・やっぱり失敗しました。 For I=0 To 49 Rs2!フィールド(I) = Rs1!Td.Fields(I).Name Next やりたいこと分かっていただけますでしょうか?要するにフィールド名を配列の様なもので格納しておいて、レコードの追加時に50回ループさせてRS2のフィールドにいれたいのです。何か良い方法は無いでしょうか。

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

専門家に質問してみよう