ルックアップフィールドの作成方法とデータの表示について

このQ&Aのポイント
  • Accessデータベースでルックアップフィールドを作成し、データの表示を試していますが、うまくいきません。
  • ルックアップフィールドに関連するデータセットとテーブルを設定し、コードを実行していますが、ルックアップフィールドが空白になってしまいます。
  • また、ComboBoxに登録社員テーブルの社員ID一覧を表示する方法もわかりません。教えてください。
回答を見る
  • ベストアンサー

ルックアップフィールドについて

Accessをデータベースにして練習中です。 テーブルが複数あり、デザイナで基本フォームを作ってあります。 参考書にルックアップフィールドの作成の仕方が載っていたのですが わからなくなってしまったのでどなたか教えてください。 下のコードを実行すると、ルックアップフィールドが空白になってしまいます。 データセット名:業務DataSet 登録社員テーブル:社員ID、氏名、住所、電話の4列 成績テーブル:社員ID、成果、残業時間の3列 成績テーブルに対応したフォームをデザイナで作成。 社員IDは「社員IDComboBox」、ルックアップフィールドはツールボックスから作り、「氏名TextBox」にしました。  ルックアップフィールドのTextBoxに社員IDに対応した氏名を表示したいと思っています。   Private Sub 社員IDComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 社員IDComboBox.SelectedIndexChanged If 社員IDComboBox.Text = "" Then Exit Sub      End If Dim dr As 業務DataSet._登録社員Row dr = 業務DataSet._登録社員.FindBy社員ID(CType(社員IDComboBox.SelectedText, Integer)) If dr Is Nothing Then 氏名TextBox.Text = "" Else 氏名TextBox.Text = dr.氏名 End If End Sub 色々やっていたら何がおかしいのかわからなくなってしまいました。 すみませんが教えてください。 それと、ComboBoxに登録社員テーブルの社員IDの一覧を表示しようと思ったらどのようにすればよいのですか?

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

  • ベストアンサー
noname#60992
noname#60992
回答No.1

私がこのようなことをする際はコンボボックスのプロパティで 列数 = 2 列幅 = 2cm;5cm リスト幅 = 7cm 値集合タイプ = テーブル/クエリ 値集合ソース = SELECT [登録社員テーブル].[氏名],[登録社員テーブル].[社員ID] FROM 登録社員テーブル 列連結 = 2 のように設定します。 コンボボックスを使用する際は氏名及びIDを見ることができます。 選択後は氏名だけが表示されます。 コンボボックスの値(.VALUE)には社員IDが格納されます。 検索を行いたい際は値集合ソースのSQLにWHERE句を付け足します。 列幅などは好きなように設定できます。

toma-to
質問者

お礼

お礼が遅くなり、すみませんでした。 教えていただいたクエリを実行しました。 コードで書くよりスマートで楽な方法だったのでとても助かりました。 SQLの書き方をもっと勉強したいと思います。 回答ありがとうございました。 お礼が遅くなり、本当にすみませんでした。

関連するQ&A

  • visual basic 2005 のルックアップフィールドについて

    データセット上にSQL SERVER 2005 で作成しましたTable_Customerというテーブルアダプターを持っています。そこで下記のコードでデータグリッド上にルックアップフィールドを作成しようとしたのですが検索されずにデータセットにNULLが返されしまします。下記のコード上では[みつからない]と返されます。 --------------------------------------------------------------- If (e.Column.ColumnName = Me.お客様IDColumn.ColumnName) Then  Dim dr As DataSet1.Table_CustomerRow  dr = Form1.DataSet1.Table_Customer.FindByお客様ID(10)  If dr Is Nothing Then MsgBox("みつからない") Else Form1.DataTable1DataGridView.CurrentRow.Cells(6).Value = dr.名称 End If    End If ----------------------------------------------------------- データセット上のTable_Customer上でプレビューを見てみると確かに主キーを10としてレコードが登録されているのですが・・・・・SQLSERVER2005の設定がおかしいものなのでしょうか。。。。非常に困っています。よろしくおねがいします。

  • Access 2重のルックアップフィールドで、ID番号ではなく、名称を

    Access 2重のルックアップフィールドで、ID番号ではなく、名称を表示したい。 Access 2010を最近昨日から始めました。データベースの正規化がうまくないかもしれませんが、以下の現象で困っています。 ・メーカーテーブル:メーカーID/メーカー名 ・部品テーブル:部品ID/メーカー名:メーカーテーブルよりルックアップフィールド(メーカーテーブルのIDとリレーション) ・在庫テーブル:在庫ID/部品名:部品テーブルよりルックアップフィールド(部品テーブルの部品IDとリレーション) 上記のテーブル構成だとします。 部品テーブルでは、ルックアップフィールドで、”メーカー名”が表示されています。これは問題ありません。 次に在庫テーブルで、部品をルックアップテーブルで選ぼうとすると、メーカー名が文字列で表示されてほしいところが、メーカーIDの数値がでてしまいます。部品テーブルのメーカー名が”数値型”で管理されていることが原因だと思いますが、ここをメーカーIDではなく、メーカー名を出すことはできますでしょうか?

  • データベース内の情報が削除できない

    DataGrid上にボタンを配置してDeleteCommandの実装を試みているのですが、上手くいきません。 ========================= Private Sub DataGrid1_DeleteCommand(ByVal _ source As Object, ByVal e As _ System.Web.UI.WebControls. _ DataGridCommandEventArgs) Handles _ DataGrid1.DeleteCommand Dim PAS As String Dim PIG As Label PIG = CType(e.Item.FindControl("Label1"), Label) If (Not PIG Is Nothing) Then PAS = PIG.Text Dim PAS2 As String = e.Item.Cells(2).Text Dim dr As DataSet1.認証Row dr = DataSet11.認証.Rows.Find("ID") dr.Delete() OleDbDataAdapter1.Update(DataSet11) DataGrid1.DataBind() End If End Sub ========================= これではできないのでしょうか? 教えてください。

  • access フィールドの数値を使って計算したい

    あるテーブル内に様々な数値をフィールドに入力して、それらの数値をフォームでルックアップを使用して計算したいのですが、accessはどうやら主キー(id)の数値(1、2、3…)を使って計算してしまいます。どのように設定すればよいのでしょうか。 テーブル1 id  フィールド1 1    5 2    10 3    15 4    20 フィールド1の数値をフォームにてルックアップで選んで計算したい(クエリ内の計算式に組み込みたい)。 よろしくお願いいたします。 access2010使用

  • ADOX フィールドのRequiredプロパティを

    ADOX フィールドのRequiredプロパティをFalseにしたい アクセスです。 Sub test() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim idx As ADOX.Index Dim varRet As Variant Dim strMsg As String Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "test" tbl.Columns.Append "氏名ID", adInteger '手作業で数値型のフィールドを作るとこれがデフォルトになる tbl.Columns.Append "氏名", adVarWChar, 50 cat.Tables.Append tbl 主キーを作る Set idx = New ADOX.Index idx.Name = "Primary" idx.PrimaryKey = True idx.Columns.Append "氏名ID" tbl.Indexes.Append idx MsgBox tbl.Name & "テーブルを作成しました。" Set cat = Nothing End Sub ********************************************************** 上記のコードでテーブルを作ると、RequiredをTrueにしてないのに、 実際にテーブルにデータを入れてる時に、NULLにしようとすると、 ********************************************************** フィールドに必要なプロパティが True に設定されているため、 このフィールド '<フィールド名>' には Null 値は挿入できません。値を入力してください。 ********************************************************** となります。 Requiredプロパティの規定値は、False になってますが、 なぜか値を要求されてしまいます。 ADOXで上記のコードに追加してRequiredをFalse にする方法を教えてください。、

  • 項目が一致したフィールドを追加

    インポートしたデータを項目名が一致したフィールドを作業テーブルに追加クエリしたい。 ご回答ありがとうございます。是非教えてください。 ・インポートは先頭行をフィールド名として使ってません。 項目名_PP(20個)にある項目名とインポートした一時テーブルにある項目と一致したフィールドを作業テーブルに追加したいのですが取得した20フィールドを作業テーブルに追加をどうやっていいかわかりません。 作業テーブルも20項目あるのですが・・ご教授お願いします。 Set db = CurrentDb() Dim rs As DAO.Recordset Dim rstop As DAO.Recordset Dim SQL As String Dim SQLTop As String Dim iCntTop As Integer Dim sERRTXT As String Dim bFlg As Boolean Dim sSQLNM As String SQL = "項目名_PP" SQLTop = "一時テーブル" If F_RecordsetOpen(SQLTop, rstop, dbOpenSnapshot, dbReadOnly) Then If F_RecordsetOpen(SQL, rs, dbOpenSnapshot, dbReadOnly) Then Do Until rs.EOF For iCntTop = 0 To 254 sSQLNM = "" '項目名が一致したら(=必要項目)ループを抜ける If rstop.Fields(iCntTop) = rs![項目名] Then sSQLNM = rstop.Fields(iCntTop).Name Debug.Print sSQLNM Exit For End If Next iCntTop If Trim(sSQLNM) <> "" Then ' SQL = " INSERT INTO 作業テーブル ' 'sSQLNMでループで抜けたフィールドを追加作業テーブルに追加したいのですが・・・ Call F_ExecuteSQL(SQL) End If rs.MoveNext Loop End If Call S_RecordsetClose(rs) End If Call S_RecordsetClose(rstop) End Sub

  • 【Access】サブフォーム間のカーソル移動がわからなくて困っています。

    2つのサブフォームがあり、サブフォーム間のカーソル移動を実現したいのですが、 意図した動作にならず、困っております。 その為、下記の条件を満たす動作をご教示いただける方がいらっしゃいましたら、 ご教示の程、よろしくお願いします。 【条件】 1. Form1_SUBのfield2でEnterキー押下時、同じ行のForm2_SUBのIDに移動したいです (Form1_SUBの1行目のfield2でEnterキー押下時、 Form2_SUBの1行目のIDにカーソルを移動したいです。 下記のソースでは Form2_SUBの最後のカーソル位置があった行のIDに遷移してしまいます)。 2. Form2_SUBのfield2でEnterキー押下時、次の行のForm1_SUBのIDに移動したいです (Form2_SUBの1行目のfield2でEnterキー押下時、 Form1_SUBの2行目のIDにカーソルを移動したいです。 下記のソースでは Form1_SUBの最後のカーソル位置があった行のIDに遷移してしまいます)。 【フォーム名】 親:OYAFORM サブ:Form1_SUB(T1テーブルを連結した帳票フォームです。) サブ:Form2_SUB(T2テーブルを連結した帳票フォームです。) 【テーブル名】 T1(ID, field1, field2) T2(ID, field1, field2) 【F1_SUBのソース】 Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Forms!OYAFORM!Form2_SUB.SetFocus Forms!OYAFORM!Form2_SUB.Form!ID.SetFocus End If End Sub 【F2_SUBのソース】 Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Forms!OYAFORM!Form1_SUB.SetFocus Forms!OYAFORM!Form1_SUB.Form!ID.SetFocus End If End Sub 以上、よろしくお願いします。

  • access一部のフィールドを他のテーブルへVBA

    先日 https://okwave.jp/qa/q10245651.html において > table2の新しいデータとして > table1のデータをコピーしたい、 単に追加で ということであれば、という 御回答: Sub Test() Dim StrSQL As String StrSQL = "INSERT INTO table2 SELECT table1.* FROM table1;" DoCmd.SetWarnings False DoCmd.RunSQL StrSQL DoCmd.SetWarnings True End Sub ---------------------- 上記の 回答をいただき うまく稼働しました 部分的にフィールドを別テーブルに 移動するとき ここでは table1のフィールド名 IDに table2のフィールド名 bに 入っている数値 にい 1を加えた数値を 移動したいのですが Public Function Test() Dim tb1 As Table Dim tb2 As Table tb1 = table1 tb2 = table2 Dim strSQL As String strSQL = "INSERT INTO table2![ID]SELECT"("[b]"FROM tablel)+1" (table1のフィールド[b]の数値に1を加えた数値を table2のフィールド[ID]に移行する、というつもりです) DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Function 稼働しません すみません 宜しくお願い致します (ついでながら ここで でてくるb というのは テーブル table3 の IDの総和 すなわち SELECT Count(table3.ID) AS b FROM table3; 要は table3の最後のレコードの次のレコードの 番号の数値を table2のIDに移動したい というわけであります) (いずれのIDや bについても 数値型 長整数型 重複あり です)

  • マクロにおける条件文の作成の件

    以下の様に条件付きの計算式を作成しました。CommandButton3を押しても 計算しなかったり、TextBox3.Value > TextBox1 ではないときでもエラー メッセージが出ます。どこに欠点があるのか教えて下さい。 Private Sub CommandButton3_Click() Dim row As Integer If TextBox1.Value = Empty Then MsgBox ("Aが空欄です") Exit Sub End If If TextBox2.Value = Empty Then MsgBox ("Bが空欄です") Exit Sub End If If TextBox3.Value = Empty Then MsgBox ("Cが空欄です") Exit Sub End If If TextBox4.Value = Empty Then MsgBox ("Dが空欄です") Exit Sub End If If TextBox3.Value > TextBox1.Value Then MsgBox ("Cの値をAの値より小さくしましょう!") Exit Sub End If If TextBox4.Value > TextBox2.Value Then MsgBox ("Dの値をBの値より小さくしましょう!") Exit Sub End If TextBox5 = Round(TextBox1 * TextBox2 - (TextBox1 - TextBox3) * (TextBox2 - TextBox4) / 2, 0) End Sub

  • ログイン画面の作成

    VBAからVBにステップアップしてきた初心者です。 部内の管理ソフトを作成したいのですがその際ログインする人によって権限を変更したいので職員情報(職員ID、氏名、ログインID、パスワード、権限ランク、等々)をDB(ACCESS)に保存しておいて情報抽出したいと思っていますいろいろ考えてコードを作成しているのですがうまく動きません Private Sub TextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter Dim DB As New ADODB.Connection, RS As New ADODB.Recordset Dim 検索Key As String 検索Key = TextBox1.Text If 検索Key = "" Then Exit Sub End If  DB.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Application.StartupPath & "\○○.mdb;" & "Jet OLEDB:Database Password=△△;") RS.Open("Select * From 職員リスト Where 職員ID = " & 検索Key & "") If RS.BOF Then MsgBox(検索Key & "に対応する職員がいません。") Exit Sub Else TextBox2.Text = RS.Fields職員ID  ←ここでエラーが出ます End If End Sub まずはTEXTBOX1に職員IDを入力したら勝手に氏名がTEXTBOX2に表示できるようにしたいと思っています。 いろいろレコードセットの表示方法(VBA等)を探し試したのですがどれもうまく動きません。ご教授お願いします 下記のようなサイトもあったのですがVBおよびDB操作を始めたばかりの私には難解でした http://adonetvb.com/VB2008GetkeyData01.html よい方法があればよろしくお願いします

専門家に質問してみよう