- 締切済み
アクセスのフォーム上でのルックアップについて
お世話になります。 素人が初心者向け参考書を片手に、顧客管理のデーターベースを作ってます。 下記は作ったテーブルの簡単な図です。 【商品区分】→【商品マスタ】→【会社別単価】←【顧客マスタ】 【仕入先】↑ :テーブルのフィールド: 【商品区分】(区分ID)(区分名) 【仕入先】(仕入ID)(仕入先名) 【商品マスタ】(商品ID)(商品名)(区分ID)(仕入ID) 【顧客マスタ】(顧客ID)(会社名)(会社名の頭文字)(住所)(電話&FAX)(取引開始年月日) 【会社別単価】(単価ID)(顧客ID)(見積日時)(商品ID)(数量)(単価)(備考) 主キーはIDでオートナンバーにし、各々のIDでリレーションをしています。 また、【商品マスタ】と【会社別単価】のIDをルックアップ設定しています。 で、【会社別単価】以外は入力が終了して、【会社別単価】をフォームを作り入力しようとしています。 ※問題となっていること※ フォーム上から入力していますが、如何せん会社数が400社近く、商品数も10の区分があり、 各々に小物も合わせ30商品(合計10×30=300商品)あり、ちょっと入力が 面倒なことになっています。(フォームはウィザードを使用して作りました) ※やりたいこと※ 【会社別単価】のフォームで、会社名を(頭文字)で抽出して(あ、い、う…で入力しています)、 コンボボックスを2つ使用して、「あ」を選ぶと頭文字「あ」の会社が出てくるようにしたいです。 同じように商品名の方も、商品区分で選んで、それに対応する商品群を表示したいです。 同じような質問があり、参考にしてやってみてますが、さっぱり分かりませんw また、何か補足が必要であれば、補足しますので、すみませんが力を貸してください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ISO96968
- ベストアンサー率42% (34/80)
[会社の頭文字]フィールドですが [事業所の愛称(ニックネーム)]を仮名読みで登録すれば 喜ばれます。 同じ**会社でも 例えば 本店、佐野支店、横浜支店、群馬、とかあれば [**ホンテン] [**サノ] [**ヨコ] [**グンマ]とか伝票を起こすとき 非常に便利で オペレーターに喜んで貰ってます。 ご参考に・・・
商品マスタ: ID___区分____品名 1____区分A___商品A 2____区分B___商品B ※区分:1=区分A、2=区分B・・・実体は、1、2・・・N の整数。 得意先マスタ: ID___名称________読み 1____喜多屋_____きたや 2____銀座屋_____ぎんざや 3____紀伊国屋__きのくにや ※検索用の列[読み]を持っている。 得意先別単価管理表: 商品マスタ_ID__得意先マスタ_ID__単価 __________商品A_____________喜多屋__\1,000 __________商品A_____________銀座屋__\1,200 __________商品B_____________喜多屋__\2,000 __________商品B_____________銀座屋__\2,400 ※商品マスタ_ID:SELECT 商品マスタ.ID, 商品マスタ.品名 FROM 商品マスタ; ※得意先マスタ_ID:SELECT 得意先マスタ.ID, 得意先マスタ.名称 FROM 得意先マスタ; 以上のようなテーブル構造を仮定します。 <Me.コンボ_得意先一覧.値集合タイプ=値リスト>という設定の場合は、次のようです。 Private Sub 検索のための読み_AfterUpdate() Dim strSQL As String If Len(Me.検索のための読み & "") > 0 Then strSQL = "SELECT 名称 FROM [得意先マスタ] WHERE 読み LIKE '" & Me.検索のための読み & "%'" Me.コンボ_得意先一覧.RowSource = DBSelect(strSQL) Me.コンボ_得意先一覧.SetFocus Me.コンボ_得意先一覧.Dropdown If Me.コンボ_得意先一覧.ListCount > 0 Then Me.コンボ_得意先一覧.Value = Me.コンボ_得意先一覧.ItemData(0) End If End If End Sub これで、[読み]に対応した得意先マスタ.名称がコンボボックスのリストとなり先頭が選択されます。 問題は、ここで DBSelect関数なるものを利用している点です。 [イミディエイト] ? DBSelect("SELECT 名称 FROM [得意先マスタ] WHERE 読み LIKE 'ぎん%'") 銀座屋; ? DBSelect("SELECT 名称 FROM [得意先マスタ] WHERE 読み LIKE 'き%'") 喜多屋;紀伊国屋; このように、DBSelect関数はコンボボックスやリストボックスの値をセットするための関数です。 しかも、ADOを使って自作した関数です。 また、SQL文の使用を前提とした関数です。 ですから、質問者の作法に合うかどうかはサッパリです。 まあ、「一つ、こういうやり方も経験してみるか?」であれば補足します。
- Funatarou
- ベストアンサー率50% (4/8)
こんにちわ。 やりたいことは、 コンボボックス01に「あ」を入れると コンボボックス02に「アフラック」みたいに「あ」が付く会社名がリストアップされる。 で良いですか? 既に【顧客マスタ】テーブルに(会社名の頭文字)フィールドを作ってらっしゃるのが良いですね~ (1)まずクエリを作成します。 【顧客マスタ】テーブルの(会社名の頭文字)フィールドに抽出条件、 =[forms]![入力フォーム名]![コンボボックス01] 表示は(会社名)のみ。 を作成。 (2)コンボボックス02の値集合タイプを「テーブル/クエリ」にして値集合ソースに上記クエリを指定。 (3)コンボボックス01のイベント-更新後処理にイベントプロシージャ コンボボックス02 = "" Me.Refresh を入れておくと、条件を変えたときに最新化されるようになります。 もう少し手を加えて・・・・ (3)のイベントに コンボボックス02 = "" Me.Refresh Me.コンボボックス02.SetFocus を追記して (4)コンボボックス02のイベント-フォーカス取得時にイベントプロシージャ Me.コンボボックス02.Dropdown を入れると動きが快適になります。 お試しください。