none
[Access2013] コンボボックスにてコントロールソースに連結した値を表示させたい RRS feed

  • 質問

  • こんにちは。お世話になります。

    前回質問した内容からの続きになります。
    [Access2013] コンボボックスにてコントロールソースに連結した値を表示させたい

    【環境】
    ・Windows7 64ビット
    ・Access2013

    <テーブルA:主キーは『ID』>
    |ID|番号|苗字|名前|
    _____________
    |01|1230|田中|太郎|
    |02|1231|鈴木|仁美|
    |03|1231|石井|次郎|
    |04|1232|山田|一郎|

    |10|1255|小田|花子|
    _____________

    <テーブルB:主キーは『ID』。テーブルAのワークテーブル>
    |ID|番号|苗字|名前|
    _____________
    |01|1230|田中|太郎|
    _____________

    <コンボボックスBの設定:番号と苗字を表示する>

    With me.コンボボックスB
    .RowSource = "SELECT ID,番号,苗字 FROM テーブルA ORDER BY 番号"
    .BoundColumn = 1
    .LimitToList = True
    .AutoExpand = True
    .ColumnCount = 3
    .ColumnWidths = "0cm;2cm;3cm"
    .ListRows = 15
    End With

    <コンボボックスCの設定:苗字を表示する>

    me.コンボボックスC = [コンボボックスB].[column](2)

    【質問】
    フォームのレコードソースにテーブルBを連結し、
    コンボボックスBのコントロールソースに[テーブルB].[番号]を連結してフォームビュー表示にしたところ、
    コンボボックスBに『1230』と表示されるはずが、なにも表示されません。

    フォームビュー表示時にコンボボックスBに『1230』と表示されるための方法を教えてください。
    よろしくお願いします。




    • 編集済み nyandaba 2014年11月7日 4:48
    2014年11月7日 2:31

回答

  • trapemiyaさんこんにちは。

    返信ありがとうございます。

    すみません。自己解決しました・・・。

    >が、実行されていないのだと思います。このコードはどこに書かれていますか?

    コンボボックスBの設定は、フォームの開く時(Form_Open)に記述しています。

    【原因】
    BoundColumn=1 ([テーブルB].[ID]と連結)と設定しているのに対し、
    コンボボックスBのコントロールソースに[テーブルB].[番号]を連結したため動作しなかったようです。

    コンボボックスBのコントロールソースに[テーブルB].[ID]を設定したところ、
    コンボボックスBに『1230』と表示されました。

    しかし、[テーブルB].[ID]には『1230』ではなく、『01』がセットされてしまうため、
    対策としてフォーム上にテキストボックスCを用意して[テーブルB].[番号]を連結し、
    コンボボックスBの更新前処理に、テキストボックスCにMe.車番.Column(1)をセットするようにしました。

    Private Sub コンボボックスB_BeforeUpdate(Cancel As Integer)
    
        If Nz(Me.コンボボックスB, "") = "" Then
        
            Me.テキストボックスC = ""
            
        Else
        
            Me.テキストボックスC = Me.コンボボックスB.Column(1)
            
        End If
        
    End Sub

    色々と調べていただき、ありがとうございました。


    • 回答としてマーク nyandaba 2014年11月7日 4:55
    • 編集済み nyandaba 2014年11月7日 4:58
    2014年11月7日 4:53

すべての返信

  • 特に誤りはないと思いますが、何も表示されないということですから、おそらく

    <コンボボックスBの設定:番号と苗字を表示する>
    With me.コンボボックスB
    .RowSource = "SELECT ID,番号,苗字 FROM テーブルA ORDER BY 番号"
    .BoundColumn = 1
    .LimitToList = True
    .AutoExpand = True
    .ColumnCount = 3
    .ColumnWidths = "0cm;2cm;3cm"
    .ListRows = 15
    End With

    が、実行されていないのだと思います。このコードはどこに書かれていますか? 通常、フォームの読み込み時に一度実行すれば良いはずです。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年11月7日 4:29
    モデレータ
  • trapemiyaさんこんにちは。

    返信ありがとうございます。

    すみません。自己解決しました・・・。

    >が、実行されていないのだと思います。このコードはどこに書かれていますか?

    コンボボックスBの設定は、フォームの開く時(Form_Open)に記述しています。

    【原因】
    BoundColumn=1 ([テーブルB].[ID]と連結)と設定しているのに対し、
    コンボボックスBのコントロールソースに[テーブルB].[番号]を連結したため動作しなかったようです。

    コンボボックスBのコントロールソースに[テーブルB].[ID]を設定したところ、
    コンボボックスBに『1230』と表示されました。

    しかし、[テーブルB].[ID]には『1230』ではなく、『01』がセットされてしまうため、
    対策としてフォーム上にテキストボックスCを用意して[テーブルB].[番号]を連結し、
    コンボボックスBの更新前処理に、テキストボックスCにMe.車番.Column(1)をセットするようにしました。

    Private Sub コンボボックスB_BeforeUpdate(Cancel As Integer)
    
        If Nz(Me.コンボボックスB, "") = "" Then
        
            Me.テキストボックスC = ""
            
        Else
        
            Me.テキストボックスC = Me.コンボボックスB.Column(1)
            
        End If
        
    End Sub

    色々と調べていただき、ありがとうございました。


    • 回答としてマーク nyandaba 2014年11月7日 4:55
    • 編集済み nyandaba 2014年11月7日 4:58
    2014年11月7日 4:53
  • 「何も表示されません」から早合点してしまいました。正しくは、「ドロップダウンリストから1230が選択されていません」ということですね。もっとも、「何も表示されません」も誤っていませんので、私の早合点には違いありません。投稿の前に簡単なテストをしたのですが、その際、私もうっかりコンボボックスBのコントロールソースに[テーブルB].[ID]を連結していました。連結すると言えばIDというのが私の中の常識としてありましたので、誤って不具合を再現できませんでした。ごめんなさい。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年11月7日 5:16
    モデレータ
  • trapemiyaさんこんにちは。

    返信ありがとうございます。

    言葉が足りず、申し訳ありませんでした。

    色々と試していただいたことに、感謝しています。

    ありがとうございました。

    2014年11月10日 7:29