アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセス2000のVBAの質問です。どうぞよろしく。
●「取引銀行」テーブルをつくりました。銀行名、支店名、口座番号を入力してつくりました。 フィールド名も上記の通りです。
●フォームをつくり、口座番号入力用テキストボックス(テキスト0)、銀行名を表示するテキストボックス(テキスト2)、支店名表示用テキストボックス(テキスト4)の3つを作りました。
●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。
Option Compare Database
Public db As database
Public qd As querydef
Private Sub テキスト0_AfterUpdate()
Set db = CurrentDb
Set qd = db.querydef("SQL_Q")
Dim strText As String
strText = テキスト0.Text
qd.SQL_Q = "SELECT 銀行名 FROM 取引銀行 " _
& "WHERE 口座番号 = '" & strText & "'"
Me.RecordSource = "SQL_Q"
テキスト2.SetFocus
Me!テキスト2.ControlSource = "銀行名"
(支店名表示部分は略す)
End Sub
ある本の例を見て上記のように組んで実行しましたが、銀行名は表示されません(#NAMEのエラー)
入力した口座番号がstrTextにセットされているのは確認できました。
またRecordSourceとControlSourseの区別がよく理解できていません。値集合タイプ、値集合ソースというのはなぜテキストボックスの
プロパティにないのでしょうか。

A 回答 (2件)

いくつか間違いがあるので


> Option Compare Database
> Public db As database
> Public qd As querydef
> Private Sub テキスト0_AfterUpdate()
> Set db = CurrentDb
> Set qd = db.querydef("SQL_Q")

Ser qd = db.querydefs("SQL_Q")
これを行うためにはあらかじめ「SQL_Q」と言う名前のクエリーを作成しておく
必要があります。(中身は適当で構いません。)

> Dim strText As String
> strText = テキスト0.Text
> qd.SQL_Q = "SELECT 銀行名 FROM 取引銀行 " & "WHERE 口座番号 = '" & strText & "'"

qd.SQL = "SELECT 銀行名 FROM 取引銀行 " & "WHERE 口座番号 = '" & strText & "'"

> Me.RecordSource = "SQL_Q"
> テキスト2.SetFocus
> Me!テキスト2.ControlSource = "銀行名"
> End Sub

レコードソース(RecordSource)はフォーム(レポート)で扱うテーブルやクエリーを指定する項目で
コントロールソース(ControlSource)はそのコントロールに表示したい情報を
指定する項目で、式やレコードソース内に存在するフィールド名を指定します。

値集合タイプ、値集合ソースはコンボボックスなどのリスト表示に使用するテーブルなど
を指定するための項目です。
テキストボックスに何故無いかと言うことについては、そう言う仕様だからとしか
説明のしようがありません。(少なくとも私には)
    • good
    • 0

御疲れ様です



>●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。

上記の掲題だけでしたら、下記コードにて実現できると思います
'----------------------------------------
Private Sub テキスト0_AfterUpdate()
Dim RS As DAO.Recordset
Dim strSQL As String

If IsNull(Me.テキスト0.Value) = True Then
Me.テキスト2.Value = Null
Else
strSQL = "SELECT 銀行名 FROM 取引銀行 WHERE 口座番号 = '" & Me.テキスト0.Value & "'"
Set RS = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If RS.EOF = False Then
Me.テキスト2.Value = RS("銀行名").Value
End If
Set RS = Nothing
End If

End Sub
'----------------------------------------
※参照設定にて「Microsoft DAO Libraryにチェックが必要です

たぶん、VisualBasicとの違いに戸惑いを感じているのだと思います。
テキストボックスコントロールなど典型的ですね。
例えば、VBならばNULLは入力できないが、Accessは入力できるとか、
VBなら値参照はTextプロパティをACCESSならValueプロパティを使用するなど...

VBとAccessのコントロールは似て非なるものと思った方が理解しやすいと思います。
(かといって、AccessのコントロールをVBに貼り付けても同じような使用方法は出来ないんですけどね...)

あと、Accessのテキストボックスのプロパティ「Text」と「Value」の違いですが、
「Text」はフォーカスがあたっている時、表示している値が取得できます、
「Value」は確定した値を取得できます。

参考になれば
    • good
    • 0
この回答へのお礼

ご丁寧なご解答有難うございました。お礼が遅れて失礼しました。

お礼日時:2002/03/31 06:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!