MS Accessで変数を使用して検索する方法

このQ&Aのポイント
  • MS Accessで変数を使用して検索する方法について説明します。具体的な例として、ある用語(ここではAA111とします)を検索する場合を考えます。変数を使用することで、柔軟な検索が可能です。
  • MS Accessでは、変数を使用することで検索条件を動的に設定することができます。例えば、上記の例では、変数「KI」に検索したい用語「AA111」を代入し、その変数を検索条件として使用しています。
  • しかし、質問のコードでは、変数「KI」をそのまま検索条件として使用してしまっています。正しく動作させるためには、変数「KI」の値をシングルクオーテーションで囲む必要があります。変数を使用する際は、値をシングルクオーテーションで囲むことに注意しましょう。
回答を見る
  • ベストアンサー

用語を変数に入れて検索するには?MS Access

こんにには。 MS Accessで、ある用語(ここではAA111とします)を検索しようとして下記にようにしました。 Dim daoDB As DAO.Database Dim daoRS As DAO.Recordset DBnm = Me.KENSAKU.Value KI = "AA111" Set daoDB = CurrentDb Set daoRS = daoDB.OpenRecordset(DBnm, dbOpenDynaset) daoRS.FindNext "ID = KI" するとエラーとなりました。 daoRS.FindNext "ID = KI" を daoRS.FindNext "ID = 'AA111'" とするとOKでした。変数を使用することは出来ないのでしょうか? 宜しくお願いいたします。

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

  • ベストアンサー
  • ytsg
  • ベストアンサー率58% (7/12)
回答No.1

""でくくられている条件部分は文字列扱いなので、変数は外に置きます。 また、変数が文字列なので'も必要です。 daoRS.FindNext "ID = '" & KI & "'" (変数が数値なら daoRS.FindNext "ID = " & KI となります)

hidemari
質問者

お礼

ytsgさん、こんにちは。 ありがとうございます。 'AA111'を変数KIに置き換えるのではないんですね。 勉強になりました。 エクセルVBAは長いこと扱ってましたが、アクセルVBAはまだ日が浅く、これからも初歩的な質問をさせていただくと思いますが、宜しくお願いします。

関連するQ&A

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

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

    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から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を介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • VBAのコード

    参考書に従って次のようなコードを書きました。 Private Sub previewButton_Click() Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Q_ラベル印刷", dbOpenDynaset)* if me!......................以下略 *印のところで「パラメーターが少なすぎます。1を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。

  • OpenRecordSet  他について

    Accessプロジェクトを使用しています。 Dim strSQL As String Dim DBS As Database Dim RST As DAO.Recordset Set DBS = CurrentDb Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset,dbReadOnly) 「実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。」 と出てきます。デバッグを押すと、 上記最終行でSTOPします。 次のように変更しても同じでした。 Set RST = DBS.OpenRecordset("TESTDATA") 又は Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset) ヘルプ等を見ると、Jetワークスペースでのみ 使用可と出てきます。 ADO,DAO,OpenRecordset等が理解しきれていないように思うのですが、 Access97(DAO?)では 何も出てこなかった上記のような内容、 何故Accessプロジェクトでは 上手くいかないのでしょうか?

  • DAOでレコード数を取得したい(ACESSVBA)

    レコードの行数は複数あるのに --------------------------------------------------------- Sub あ() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_test", dbOpenDynaset) MsgBox rs.RecordCount Set rs = Nothing Set db = Nothing End Sub --------------------------------------------------------- これでレコード数を取得しようとすると1がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • ACCESS2000でテーブルをVBAからテーブルを読み込む方法

    ACCESS2000を使っています。 以下の指定をした場合、「ユーザ定義型は定義されていません」のメッセージが出て、コンパイルが通りません。 なにかインストールや設定が必要なのでしょうか? Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル名", dbopendynaset) ヘルプ等を自分なりに参照してみたのですが、わかりません。教えてください。

  • Access VBA 添付型フィールド

    Access VBAで添付型フィールドからファイル名を取りだしたいのですが、どのようにすればいいでしょうか? Private Sub Sample() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim SQL As String   Set DB = CurrentDb SQL_1 = "SELECT * FROM ボランティア情報 ORDER BY 分野 & 団体名読み;" Set RS = DB.OpenRecordset(SQL_1, dbOpenDynaset) With RS   Do While Not .EOF   MsgBox (!写真.FileName)  ←ここでエラーが出ます。 .   MoveNext   Loop End With RS.Close Set RS = Nothing Set MDB = Nothing End Sub

  • access2003 自社カレンダーを作りたい

    現在、access2003で注文書を出力するプログラムを作成中です。 自社の営業日カレンダーを表示させたいのですが、 開く時のイベントプロシージャでエラーになって先に進みません。 エラーメッセージは 【イベントプロパティに指定した式 開く時でエラーが発生しました:プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。】です。 開発が初めてなので、どなたか教えていただけませんか?よろしくお願いします。   下記のイベントプロシージャの書き方に問題がありますか?  Function Form_Open(F As Form) Dim DB As DAO.Database Dim rs As DAO.Recordset Dim F As Form Set DB = CurrentDb Set F = Forms!カレンダA Set rs = DB.OpenRecordset("calen", dbOpenDynaset) End Function

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。