• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:レコードセットで得た結果をサブフォームに出力したい)

Access 2010のフォームでレコードセットの結果をサブフォームに出力する方法

このQ&Aのポイント
  • Access 2010のフォームでテキストボックスにキーワードを入力して検索ボタンを押すと、テーブル内の該当するレコードを取得し、結果をサブフォームに表示する方法について教えてください。
  • VBAを使用して、データベースのコネクションを確立し、指定されたキーワードを使用してSQLクエリを実行し、結果をレコードセットとして取得することはできました。
  • しかし、レコードセットをサブフォームに出力する方法がわかりません。どのようにして結果をサブフォームに表示すればよいでしょうか?

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

>SQL = "select * from T1 where keyword = '" & tb1 & "'" でエラーになるかと思ったら出来るんですね・・・?? Accessが気を利かしてくれているらしいのですが、少し気味が悪いので Private Sub cmd_exe_Click() Dim SQL As String If isnull(me!tb1) then SQL = "select * from T1 " else SQL = "select * from T1 where keyword = '" & ME!tb1 & "'" end if me!sf1.form.recordsource = sql ・・・ では?

mellow91
質問者

お礼

>me!sf1.form.recordsource = sql VBAでrecordsourceというプロパティを使えるのを知りませんでした。お教え頂いたとおりにやりましたら無事に成功しました!ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 各ボタン毎にADODB.CONNECTIONと書く

    各ボタン毎にADODB.CONNECTIONと書いています AccessでVBAを書いています。 Formが3つあるとします。 ・Form1 ・Form2 ・Form3 各フォームにボタンが3個あるとします。 ・Btn1 ・Btn2 ・Btn3 各ボタンをクリックすると、テーブルの更新・追加・削除等の振る舞いをします。 そこで問題が、私は各ボタンのイベント毎に、下記のようなコードを必ず書いています。 フォームが3つ、ボタンが3つの計9つのイベントに書いています。 Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Set objADOCON = Application.CurrentProject.Connection Set objADORS = New ADODB.Recordset objADORS.Open "T", objADOCON, adOpenDynamic, adLockOptimistic objADORS.Close objADOCON.Close Set objADORS = Nothing Set objADOCON = Nothing 書いているうちに、同じ事を書いているので無駄のような気がしてきました。 これを解決するには何か良い方法はないでしょうか? 自分で書いていて無駄だなと思っています・・・

  • ACCESSでレコード数の取得の仕方

    Aテーブルのレコード数を取得しようと思い、次のPGを考えました。(Aテーブルには10件のデータが入っています。)ですが、「-1」という数値が返ってきます。なぜでしょうか? Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Set objADOCON = Application.CurrentProject.Connection strSQL = "SELECT * FROM Aテーブル" Set objADORS = objADOCON.Execute(strSQL) MsgBox objADORS.RecordCount , vbOKOnly, "レコード数"

  • Access VBAでのデータ抽出の仕方

    Access VBAでのデータ抽出の仕方 Access VBAでデータを抽出して、テキストボックスにデータを配置したいと思います。 Formにtxt1~txt10までのテキストボックスが10個あります。 テーブルからデータを引っ張ってきてレコードセットにいれます。 Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Dim SQL As string SQL = "Select * from Table1" Set objADOCON = Application.CurrentProject.Connection Set objADORS = objADOCON.Execute(SQL) これでレコードセットを取得しました。このレコードセットは「ID」列があり、プライマリーキーを設定しています。またZAIKOという列もあります。 ID=001の時、在庫は100 ID=002の時、在庫は200 といったように条件を絞って、テキストボックスに値を入れたいと思います。 objADORS.Filter = "[ID] = '001'" txt1.value = objADORS!ZAIKO objADORS.Filter = "[ID] = '002'" txt2.value = objADORS!ZAIKO ..... を10回繰り返せば条件毎に値がセットするのはわかります。 ただし、あまりスマートなやり方ではなく、もっといい方法があるんじゃないかと思うのですが考えつきません。 何か良い方法、手段がありましたらお教え下さい。 よろしくお願いします。

  • サブフォームのレコード削除

    サブフォーム(帳票)のレコード削除をしたいのですが、レコードセクレタをクリックして選んだレコードではなく、テーブルの最初のレコードから順番に削除されてしまいます。 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim ret As Integer '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset rs.Open "T支店", cn, adOpenKeyset, adLockOptimistic '削除 ret = MsgBox("表示中のレコードを削除しますか?", vbYesNo + vbQuestion, "削除") Select Case ret Case vbYes rs.Delete Me!sub支店.Form.Requery Case vbNo Exit Sub End Select '終了 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing WINDOWS98、ACCESS2000をしようしています。よろしくお願いします。

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

  • SQL文の最後に「;」はいらないのでしょうか?

    VBAのADOについて質問です。 SQL文の最後には「;」を付けなくちゃいけないものだと思っているのですが ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub test_Click() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM Tテーブル" ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ でも問題なくコードが動きました。 SQL文の最後に「;」はいらないのでしょうか? ちなみに SQL = "SELECT * FROM Tテーブル;" でもエラーになりませんでした。

  • レコードは2行あるのに「-1」が返ってくる

    accessです。 テーブル1にレコードは2行あるのに、下記のコードを実行すると「-1」が返ってきます。 なぜでしょうか? ------------------------------------------------------------ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = cn.Execute("SELECT * FROM テーブル1") MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub ------------------------------------------------------------ ご教示よろしくお願い致します。

  • サブフォームのレコードセットをメインフォームで処理したい

    [Access2003] サブフォームのレコードソースをメインフォームでレコードセットとして取得し、処理したいと思い、 Private Sub cmd選択_Click() Dim RS As New ADODB.Recordset Set RS = Me!F_Sub.Form.RecordsetClone End Sub とやってみたのですが、型が一致しません。"とエラーになります。 WEB上でのサンプルも上のコードでいけるような感じで説明がありましたが何が問題なのでしょうか?

  • VBA 抽出条件でデータ型が一致しません

    Access 2003について教えて下さい。環境はWin XPです。 Table1 ID(メモ型),日付(日付/時刻型 書式 日付(S)) 001,2012/08/10 002,2012/08/10 Form1 フォームにはテキストボックス、 txt_Dateがあります。 書式は日付(S)です。 ここには、yyyy/mm/ddの形式で値を打ち込む、またはカレンダーから選択します。 同じくボタン、btn_exeがあります。 これをクリックすると処理がはじまります。 Dim getDate As Date Dim strSQL As String Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset getDate = txt_Date.Value strSQL = "select * from Table1 where 日付 = '" & getDate & "'" objADORS.Open strSQL, objADOCON, adOpenKeyset, adLockOptimistic 質問1. where 日付 = '" & getDate & "'" でやると下記のメッセージが表示されます。 抽出条件でデータ型が一致しません where 日付 = " & getDate でやると、エラーメッセージは起こりません。 何故このようなメッセージが表示されるのでしょうか? 質問2. Table1には2012/08/10というデータが日付フィールドに存在します。 where 日付 = " & getDate ではエラーメッセージが出ないので、 次のレコードセット取得時、レコード取得件数が0件です。 条件文が上手くいっていないような気がします。なぜでしょうか? ちなみに、 strSQL = "select * from Table1 では問題なくレコードセットを取得できています。 宜しくお願いします。

  • VBAでレコードセットの総レコード数を取得する方法

    Dim con As ADODB.Connection Dim rsData As ADODB.Recordset Dim DNSname$,USERname$,PASSw$,cnt&  Set con = CreateObject("ADODB.Connection")  con.Open "DSN=" & DNSname & "; UID= " USERname & "; PWD=" & PASSw  Set rsData = New ADODB.Recordset  rsData.Open SQL, con  Do While Not rsData.EOF   rsData.MoveLast   cnt=rsData.RecordCount   rsData.First  LOOP といいコードで総レコード数が取得できるかなとやってみたところ、rsData.MoveLastのところで、「行セットは逆フェッチをサポートしていません」というエラーが出ました。 なにかほかの方法で総レコード数を取得する方法があるのでしょうか? 自分で他に試したことは、rsData.EOFまでrsData.MoveNextでもっていきrsData.EOF-1レコードの.RecordCountを取得すしようと試みましたが、最後のレコードまできても.RecordCountは「-1」のまま変化しませんでした。レコードセットの呼び込み方が不味いのでしょうか?

ACアダプタが壊れてしまった
このQ&Aのポイント
  • 御社の外付けハードディスクで使用しているACアダプタを壊してしまったので、購入させていただくことはできませんか
  • ACアダプタ LA-24W12S-01が壊れてしまいました。新しいACアダプタを購入したいのですが、ご提供いただけますか
  • 外付けハードディスクのACアダプタが故障しました。代替のACアダプタを手に入れる方法を教えてください
回答を見る