• ベストアンサー
  • 暇なときにでも

Access VBAでのデータ抽出の仕方

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

お礼率 31% (1506/4719)

Access VBAでのデータ抽出の仕方

Access VBAでデータを抽出して、テキストボックスにデータを配置したいと思います。
Formにtxt1~txt10までのテキストボックスが10個あります。

テーブルからデータを引っ張ってきてレコードセットにいれます。

Dim objADOCON As ADODB.Connection
Dim objADORS As ADODB.Recordset
Dim strSQL As String
Dim SQL As string

SQL = "Select * from Table1"
Set objADOCON = Application.CurrentProject.Connection
Set objADORS = objADOCON.Execute(SQL)

これでレコードセットを取得しました。このレコードセットは「ID」列があり、プライマリーキーを設定しています。またZAIKOという列もあります。
ID=001の時、在庫は100
ID=002の時、在庫は200
といったように条件を絞って、テキストボックスに値を入れたいと思います。

objADORS.Filter = "[ID] = '001'"
txt1.value = objADORS!ZAIKO

objADORS.Filter = "[ID] = '002'"
txt2.value = objADORS!ZAIKO
.....

を10回繰り返せば条件毎に値がセットするのはわかります。

ただし、あまりスマートなやり方ではなく、もっといい方法があるんじゃないかと思うのですが考えつきません。

何か良い方法、手段がありましたらお教え下さい。
よろしくお願いします。

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

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

ベストアンサー率 20% (951/4552)

 もう、10数年前ですが DisplayRecord()を作った記憶があります。次のような使い方をします。

Private Sub Form_Load()
  Dim StopNow As Boolean

  StopNow = Not DisplayRecord(Me, "SELECT * FROM id管理表 WHERE id_name='Test'")
  If Not StopNow Then
    Message "フォームが正常に表示されました。"
  End If
End Sub

 当然に、DisplayRecord()だけでフォームのテキストボックスを更新するには仕掛けというか約束事が必要です。私は、テキストボックスの名前を'XXXXXX列名'とするというルールを作成。これで、DisplayRecord()は、コントロール名とフィールド名が一致するテキストボックスを探せます。まあ、洗練と言うならば’汎用化’を志向することかと。

<蛇足>

 私の経験では、この手の関数の出番はありませんでした。非連結フォームでAccessのフォーム機能を全て実現するクラスライブラリ等も開発しましたが、結局は、非常に重たくて使いものになりませんでした。最終的には、「Access の機能を上手く利用するのが一番」という陳腐な結論に。
お礼コメント
mellow91

お礼率 31% (1506/4719)

おぉ!なるほど、アクセスの機能をうまく使うのがよいのですね。ご回答ありがとうございました!
投稿日時:2012/01/04 21:10

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 20% (951/4552)

補足:先の方法を実現するには?

DisplayRecord()方式は、一つのSQL文でデータを列1、列2・・・列10の形で取得することが前提。
  • 回答No.2

ベストアンサー率 55% (772/1382)

txt1~txt10 ここだけサブフォームにして、
サブフォームのレコードセットを次のように
します。
SELECT TOP 10 ZAIKO FROM table1 ORDER BY ID
但し、レコードが10未満だとテキストボックスは
10個でません。これが嫌ならレコードセットで
ループするしかないでしょう。
For I = 1 To 10
    With Controls("txt" & CStr(I))
        If objADORS.EOF Then
            .Value = ""
        Else
            .Value = objADORS.Fields("ZAIKO")
            objADORS.MoveNext
        End If
    End With
Next
お礼コメント
mellow91

お礼率 31% (1506/4719)

コードまで書いて頂きありがとうございます!感謝です!!
投稿日時:2012/01/04 21:10
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

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

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ