人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Microsoft ACCESS 2003 VBA】
次のようなテーブルがあります。

商品マスター
[商品コード] [商品名]
ABC*** テレビ
BCD*** ビデオカメラ
EF*G**** パソコン

フォーム上で商品コードを入力する際、
このテーブルを検索し、商品名を表示させたいのですが
どのようにすればいいでしょうか?

アスタリスク(*)の箇所は0?9の半角数字・A?Zの
半角アルファベットが何でも入ります。
例えばABC111が入力された場合「テレビ」になり、EFZG0123
の場合は「パソコン」になります。
ABC1111、EF000000などはエラーを表示させたい。

よろしくお願いします。


●質問者: db_Magician
●カテゴリ:コンピュータ
✍キーワード:ABC access BCD ef Microsoft
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● nkanai
●60ポイント

URLはダミーです

商品コードのLostfocusイベント(フォーカス喪失時)に

処理を行うとしてご説明します。

商品マスタから全レコードをとってきて、

入力された商品コードの、商品マスタの商品コードの*に相当する箇所を

同じく*に置き換えてから比較します。

あまりスマートなコードではありませんが、参考までにどうぞ。

※ 商品コード入力欄を「txtCode」、商品名表示欄を「lblName」としています。

Private Sub txtCode_LostFocus()

Dim strSQL As String

Dim rs As DAO.Recordset

Dim strTmp As String

Dim i As Long

Dim rtn As Long

'とりあえずレコード全件とってくる

strSQL = "SELECT * FROM 商品名;"

Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges, dbReadOnly)

If rs.EOF = True Then

MsgBox "商品マスタにレコードがありません", vbCritical, "エラー"

Exit Sub

End If

'アスタリスクの部分を置き換えて比較する。

Do While (rs.EOF = False)

strTmp = txtCode.Text

rtn = 1

i = 1

Do While (rtn = 0)

rtn = InStr(i, rs.Fields("商品コード"), "*", vbTextCompare)

If rtn Is Null Then Exit Sub

If rtn <> 0 Then

strTmp = Left(strTmp, rtn - 1) & "*" & Mid(strTmp, rtn + 1)

End If

i = rtn

Loop

If strTmp = rs.Fields("商品コード") Then

'一致した場合は商品名を表示する。

lblName.Caption = rs.Fields("商品名")

Else

'不一致の場合はエラーメッセージを出す

MsgBox "商品コードが一致しません", vbCritical, "エラー"

End If

rs.MoveNext

Loop

End Sub

◎質問者からの返答

回答ありがとうございます。

Do While (rtn = 0)の箇所は、Untilの間違いでしょうか?

それとi = rtnの箇所は、i = rtn+1かと思います。

(私が間違っていたらすみません。。。)

上記のように修正し動かしてみたところ、一応検索はできました。

ただ、例えばtxtCodeに「ABC」とだけ入れた場合でも、「テレビ」と表示されてしまいます。

(アスタリスク置き換えのところで、この場合もABC***に変換されてしまうため。)

ここも正しく判定させるには工夫がいりそうですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ