コンボボックスにレコードセットでリストをセットする

このQ&Aのポイント
  • Access2013/VBAでコンボボックスにレコードセットでリストをセットする方法を教えてください。
  • コンボボックスの設定やデータソースの指定などによって、リストが空になるエラーが発生しています。解決方法を教えてください。
  • コンボボックスのリストが空になる問題を解決するために、VBAコードによってリストを取得しセットする方法を教えてください。
回答を見る
  • ベストアンサー

コンボボックスにレコードセットでリストをセットする

【Access2013/VBA】 ■テーブル構成 【分析テーブル】 ・分析ID(主キー) ・依頼ID(外部キー) ・会社ID 【会社管理テーブル】 ・会社ID(主キー) ・会社名 ■コード   Dim Rst As DAO.Recordset   Dim Db As DAO.Database   Dim SQL As String   Dim lngID As Long   Dim FlgWinLoad As Boolean      Me.FlgWinLoad = modPub.FlgWindowLoading      lngID = modPub.Selected依頼ID      'コンボボックスの設定   SQL = "SELECT DISTINCT [分析テーブル].[会社ID] as [会社ID1], "   SQL = SQL & " [分析テーブル].[依頼ID], "   SQL = SQL & " [会社管理テーブル].[会社ID] AS [会社ID2], "   SQL = SQL & " [分析テーブル].[会社ID] AS [会社ID3], "   SQL = SQL & " [会社管理テーブル].[会社名] "   SQL = SQL & "FROM [分析テーブル] LEFT JOIN [会社管理テーブル] ON "   SQL = SQL & " [分析テーブル].[会社ID] = [会社管理テーブル].[会社ID] "   SQL = SQL & "where [依頼ID]=" & lngID & " "   SQL = SQL & "ORDER BY [分析テーブル].[依頼ID] "   Set Db = CurrentDb   Set Rst = Db.OpenRecordset(SQL, dbOpenDynaset)   If Rst.EOF = True And Rst.EOF = True Then     GoTo errH        End If      Me.cmbo会社ID.ColumnCount = 5   Me.cmbo会社ID.ColumnWidth = "1cm;1cm;1cm;3cm;3cm"   Me.cmbo会社ID.RowSource = "会社ID1;依頼ID;会社ID2;会社ID3;会社名"   Me.cmbo施工会社ID.RowSourceType = "テーブル/クエリ"      Set Me.cmbo施工会社ID.Recordset = Rst.Clone    ■コード の終わり エラーになりませんが、画面でコンボボックスのリストが空になります。 解決方法を教えて頂きたいと思います。 よろしくお願いします。

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

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

Me.cmbo会社ID.RowSource = "会社ID1;依頼ID;会社ID2;会社ID3;会社名" Me.cmbo施工会社ID.RowSourceType = "テーブル/クエリ" "会社ID1;依頼ID;会社ID2;会社ID3;会社名" ↑ 少なくとも、これはテーブルでもクエリでもない。 次のサイトが参考になるかもです。 http://www.moug.net/tech/acvba/0060002.html

superwonderful
質問者

お礼

ご回答ありがとうございました。 実は、この質問を上げた後に、自分で解決出来ました。 やり方は、凄く簡単で何だ、こんなことか・・・と思いましたが Me.cmbo会社ID.RowSource = SQL これだけでした。

関連するQ&A

  • 空欄を含む項目のレコードセット

    Access 2003 DAO.Recordsetにてデータを取得しようと思うのですが テーブル項目に空欄がある場合はどのように書けばよろしいのでしょうか? Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = daoDB.OpenRecordset("Aテーブル", dbOpenDynaset) RS.AddNew daoRS!ああ ああ = xx RS!Update ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • Access レコードセットを動的配列に

    初めて質問させていただきます。Access勉強中です。 Access VBA 2007 でテーブルのデータを取得した動的配列から、構造体定義した動的配列に入れたいのですが、コンパイルエラーが発生してしまいます。 ネットで調べたのですがわからずじまいで、ここで相談させていただいています。 やりたいことは、テーブルの内容全てを動的配列に入れたい、それだけです。 やり方には固執していませんので、よろしくお願いします。 [コンパイルエラー] パブリック オブジェクト モジュールで定義されたユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。 [実際のプログラム]Form内のボタン押下時に実行される Private Sub btn_Click() Dim db As DAO.Database Dim rst As DAO.Recordset Dim varRecords As Variant Dim intRecCnt As Integer Set db = CurrentDb() Set rst = db.OpenRecordset(テーブル名称, dbOpenSnapshot) rst.MoveLast: rst.MoveFirst intRecCnt = rst.RecordCount varRecords = rst.GetRows(intRecCnt) Dim COutRec() As Record '行ループ For intRLoop = 0 To UBound(varRecords, 2) ReDim Preserve COutRec(intRLoop) '列方向(フィールド)のループ For intCLoop = 0 To UBound(varRecords, 1) '配列の各データを配列にセット COutRec(intRLoop, intCLoop) = varRecords(intCLoop, intRLoop) Next intCLoop Next intRLoop End Sub [構造体定義]標準モジュール内に定義している Type Record A As String B As String End Type

  • レコードセットに新規追加する

    Access2013 VBAで ■テーブルa ・id ・名前 ・id2 とあり このテーブルのレコードセットを以下のように作ります。 dim Rec = dao.Recordset Set Db = CurrentDB set Rec = Db.OpenRecordset("Select * from [テーブルa] where id2 = " & 2, dbOpenDynaset) この時、このテーブルにid2=2のレコードが何もない場合、この生成したRecで、 Rec.AddNew Rec.Fields("名前").value = "名前" Rec.Update と出来ますでしょうか? よろしくお願いします。

  • 初歩的なSQLですが・・・

    私の環境はOS:Xp      ACCESS2000です。 宜しくお願いします 今AccessVBAで作業をしているのですが、 Dim ws As DAO.Workspace Dim DB As DAO.Database Dim rs As DAO.Recordset Dim sql As String Set ws = DBEngine.Workspaces(0) Set DB = ws.Databases(0) sql = "select MAX(銀行コード) from 銀行テーブル ;" Set rs = DB.OpenRecordset(sql) Me.合計 = rs このSQL文で銀行テーブルに入っている銀行コードの最大値を取得したいのですが、取得した後どのように記述したら「rs」から値を引っ張り出せるのでしょうか? 宜しくお願いします。

  • アクセス テーブルデータ他のテーブルにコピーVBA

    win10 access365のmdbファイルにおいて table1のフィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  table2;フィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  上記に置いて table2の新しいデータとして table1のデータをコピーしたい、 ただしtable1には レコードは1行だけとします (table1にレコードが複数行ある場合の最新レコードだけtable2にコピーも出来れば知りたいです) アクセス付属の更新クエリーでは、どうも うまくいきません sqlにおいて UPDATE table1, table2 SET table2.ID = [table1]![ID], table2.氏名 = [table1]![氏名]; 上記動作しません Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim TB As Table Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Table![table1]![ID] Rdset![氏名] = Table![table1]![氏名] Rdset.Update End Function table1, table2を それぞれ 同名のフォームを作り Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim fm As Form Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set fm = Forms![table1] If Rdset.BOF Then Exit Function Else Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Forms![table1]![ID] Rdset![氏名] = Forms![table1]![氏名] Rdset.Update End If End Function いずれも table2のデータ更新が なされていません すみません 宜しくお願い致します

  • access リストボックスから文章を選び、テーブルに挿入

    > > テーブルとして、 > > テーブル:T_患者 > 患者ID 氏名 > 1 あいうえお > 2 かきくけこ > > テーブル:T_具体策 > 具体策ID 具体策 > 1 観察項目A > 2 観察項目B > 3 観察項目C > 4 観察項目D > 5 援助項目A > 6 援助項目B > > テーブル:T_看護計画 > 患者ID 具体策 > 1 観察項目A > 1 観察項目B > > とあったとします。 > > で、フォームとして > > フォーム:F_看護計画入力 ※メイン/サブフォーム形式 >  メインフォーム:患者情報 >  サブフォーム:看護計画の情報 > > フォーム:F_看護計画選択>>  リストボックス:具体策 >   値集合ソース:SELECT 具体策 FROM T_具体策 >   複数選択:標準  ※これで、複数選択ができるようになります。 >  コマンドボタン:追加 >   > とあり、F_看護計画入力のコマンドボタンで、F_看護計画選択に画面遷移し、リストボックスで > 選択した後に、コマンドボタン:追加をクリックすると、テーブル:T_看護計画にデータを追加します。 > > コマンドボタン:追加 のクリック時イベント > > Dim dbs As DAO.Database > Dim rst As DAO.Recordset > Dim varItm As Variant > > Set dbs = Application.CurrentDb > Set rst = dbs.OpenRecordset("テーブル12") > > For Each varItm In Me!具体策.ItemsSelected > rst.AddNew > rst!患者ID = Forms!F_看護計画入力!患者ID > rst!具体策 = Me!具体策.ItemData(varItm) > rst.Update > Next varItm > > rst.Close > dbs.Close > Set rst = dbs.OpenRecordset("テーブル12") のところで、エラーが出て、存在しませんとでます。これは何をいみしているのですか? とりあえず、つくってみました。そこで、("テーブル12")とはなんなんでしょうか?存在しませんとでます。

  • ACCESS 処理件数の取得

    更新した件数を取ろうとしています。 下記のような処理をしている場合どう値をとればいいのでしょうか? rst.RecodCountでとろうとしたらテーブル内の件数(?)が取れてしまったようなのですが・・・ Dim rst As DAO.Recordset rst.Fields(1) = rstWork.Fields(1) rst.Update

  • accessからsqlserverにアップサイジングしましたが,テーブ

    accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • レコードセットからの抽出方法

    Access2000を使用しています。 下記のコードのとおり 入力用テキストボックスに座席コードを入力して seat テーブルから座席コードと入力したものからレコードを探して表示できているんですが、 レコードセットで抽出した座席番号が「P」のものだけ チェックボックス(pri.value=true) にしたいのですが動きませんどのようなコードを書けばいいんでしょうか? Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "select * from seat where 座席コード='" & Me.入力用テキストボックス & "'", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic If rst.EOF = True Then MsgBox ("座席情報はありません。") Me.入力用テキストボックス = "" End If If rst.EOF = False Then Me.座席コード = rst![座席コード] Me.座席番号 = rst![座席番号] Me.入力用テキストボックス = "" Me.受付時間 = Now() End If If Left(rst![座席番号], 1) = "P" Then Me.pri.Value = True

  • ACCESS レコードセット

    非連結フォーム(frm_B)のOPEN時にADOレコードセットでデータを表示させ、更新ボタンを押すと、追加クエリでそのフォーム上で表示されたデータをテーブル(tbl_B)に新規登録させ、さらにその非連結フォームには別のフォームの内容を表示させるVBAを書きましたが、最後に別のフォームの内容で非連結フォームにデータをセットしたとき?にテーブルのデータも更新されてしまいます。最初にテーブルに追加したデータとは切り離したいのですがどうすればうまくいくのでしょうか。 ・フォームfrm_BをOPEN 'DAOレコードセット Dim dbDAO As DAO.Database Dim rsDAO As DAO.Recordset Dim stSQL As String stSQL = "SELECT No.,規格No.,改訂No. FROM tbl_B " _ & "WHERE 規格No. ='" & Forms![frm_A].[規格No.] & "'" _ & "AND 改訂No. =" & Forms![frm_A].[改訂No.] & "" 'DAOレコードセット Set dbDAO = CurrentDb Set rsDAO = dbDAO.OpenRecordset(stSQL) Set Me.Recordset = rsDAO Me![No.].ControlSource = "No." Me![規格No.].ControlSource = "規格No." Me![改訂No.].ControlSource = "改訂No." 'DAOレコードセットクローズ Set rsDAO = Nothing Set dbDAO = Nothing ・更新ボタンクリック Private Sub cb_kaitei_Click() Dim stDocName As String   '追加クエリ stDocName = "q_B" DoCmd.OpenQuery stDocName, acNormal, acEdit Forms![frm_B].SetFocus Me![No.] = Forms![frm_A].[No.] Me![規格No.] = Forms![frm_A].[規格No.] Me![改訂No.] = Forms![frm_A].[改訂No.] ・ このときにレコードセットで追加したレコードのほうも更新されてしまいます。これを別のレコードと判断させたいのです。よろしくお願いします。