こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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回繰り返せば条件毎に値がセットするのはわかります。

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

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

投稿日時 - 2011-12-23 17:17:26

QNo.7205473

暇なときに回答ください

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

 もう、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 の機能を上手く利用するのが一番」という陳腐な結論に。

投稿日時 - 2011-12-23 18:32:44

お礼

おぉ!なるほど、アクセスの機能をうまく使うのがよいのですね。ご回答ありがとうございました!

投稿日時 - 2012-01-04 21:10:30

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

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

投稿日時 - 2011-12-23 22:59:27

ANo.2

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

投稿日時 - 2011-12-23 21:49:02

お礼

コードまで書いて頂きありがとうございます!感謝です!!

投稿日時 - 2012-01-04 21:10:49

あなたにオススメの質問