• 締切済み
  • 困ってます

アクセス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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数339
  • ありがとう数1

みんなの回答

  • 回答No.2
  • mshr1962
  • ベストアンサー率39% (7416/18946)

>”カレントレコードがありません。” ということは、該当がないということで rs.Filter = "[telnum] = ' " & str & " ' " で、文字列変数のstrの前後に余分なスペースが入るため不一致になってます。 rs.Filter = "[telnum] = '" & str & "'" とすれば良いかと。。。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

解決です。 ありがとうございました。

関連するQ&A

  • 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がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • レコード件数が返らない理由がわからない

    テーブル1にはレコードが5件入ってるのですが Private Sub レコード件数() Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT * FROM テーブル1;" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Debug.Print rs.RecordCount End Sub これをすると1が返るのですがなぜでしょうか? レコードの数が返ると思ってるのですが違うのでしょうか?

  • 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を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。

  • 回答No.1
  • f_a_007
  • ベストアンサー率20% (955/4565)

Private Sub テキスト2_BeforeUpdate(Cancel As Integer)   Dim db As DAO.Database   Dim rs As DAO.Recordset      Set db = CurrentDb   Set rs = db.OpenRecordset("顧客台帳", dbOpenDynaset)   rs.Filter = "[telnum] = '0123456789'"   MsgBox (rs!氏名) End Sub これで動作します。質問者のミスはレコードセットを再定義したことです。 【電話番号で顧客氏名を検索表示するサンプルコード】 Private Sub 電話番号_BeforeUpdate(Cancel As Integer)   Dim strPhoneNumber As String   Dim strCustomerName As String   Dim strSQL     As String      strPhoneNumber = Me.電話番号 & ""   If Len(strPhoneNumber) = 10 Then     strSQL = "SELECT 氏名 FROM 顧客台帳 WHERE PhoneNumber ='" & strPhoneNumber & "'"     strCustomerName = DBLookup(strSQL, "")     MsgBox strCustomerName   Else     MsgBox "電話番号が正しく入力されていません。"   End If End Sub 普通は、Filter 機能は利用しないで SELECT文を書きます。 Public Function DBLookup(ByVal strQuerySQL As String, _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim rst As ADODB.Recordset   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • AccessVBAでIBM特殊文字を調査

    Access2000でテーブルにある氏名から特殊文字が使用されているか調査したいのです。 テーブルやVBAは下記の通りです。 顧客テーブルがあり、内容はキー番号(半角10バイト)、漢字氏名(全角50バイト)、カナ氏名(半角50バイト)です。 漢字氏名フィールドを調査して特殊文字コードが存在した場合エラーメッセージを表示したいのです。ロジックを以下の通り作成したのですが、すべての漢字氏名がエラーとなってしまいます。 なぜでしょうか?教えていただけますでしょうか。お願いいたします。 Public Sub 調査()   Dim DB As DAO.Database   Dim RS As DAO.Recordset   Dim Moji As String   Set DB = CurrentDb()   Set RS = DB.OpenRecordset("顧客テーブル", dbOpenDynaset) Do Until RS.EOF   If RS!漢字氏名 Like "*[" & Chr("&hFA40") & "-" & Chr("&hFC4B") & "]*"   Then    Msgbox RS!漢字氏名   End If   RS.MoveNext Loop   RS.Close: Set RS = Nothing   DB.Close: Set DB = Nothing 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を介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • DAO エクセルvbaからアクセスのレコードの件数

    DAOで、エクセルvbaからアクセスのレコードの件数を取得したいのですが Dim ac As Object Dim db As DAO.Database Dim rs As DAO.Recordset Set ac = CreateObject("Access.Application") Set db = ac.DBEngine.OpenDatabase("D:\あああ.accdb", False, True) Set rs = db.OpenRecordset("SELECT * FROM Tマスタ WHERE masterkey like '*四*';") i = rs.RecordCount Debug.Print rs("masterkey") rs.Close: Set rs = Nothing db.Close: Set db = Nothing ac.Quit: Set ac = Nothing をすると、抽出するレコードが1000件でも、必ず1が返ります。 masterkeyフィールドは文字列型です。 なぜ実際はたくさんのレコードがあるのに、1が返るのでしょうか?

  • 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

  • アクセスのVBAのご相談

    初めて質問をいたします。よろしくお願いいたします。 Win 2007/Access 2007なのですが、 以下の記述のアドバイスをいただけないでしょうか。 症状は、レコード数を表示させたいフォームのテキストボックスに何も表示されない状況です。 <凡例> テーブルA テーブルB テーブルC テーブルD があります。 テーブルAはテーブルBとaにてリンク テーブルBはテーブルCとbにてリンク テーブルCとテーブルDはcにてリンクしているものとします。 <やりたいこと> フォームAのテキストボックスX、Y、Zを参照し、コマンドボタンをきっかけに、フォーム内部のWのテキストボックスに取得したbのカウント数を、再計算後に表示させたいと思っています。 <その他> Xはテキストボックス名でテキスト型 Zはテキストボックス名で日付型です。 Wはテキストボックス名で数値型です。 ★はbのカウント数です。 *は、数値型のレコードです。 +は、テキスト型のレコードです。 @は、日付型のレコードです。 <以下質問コード> Private Sub Form_Open(Cancel As Integer) Dim db As DAO.Databese Dim rs As DAO.Recordset Dim SQL As Variant Set db = CurrentDb SELECT Count(C.b) AS ★ FROM A INNER JOIN ((B INNER JOIN C ON B.b = C.b) INNER JOIN D ON C.c = D.c) ON A.a = B.a WHERE (((A.*)=1) AND ((D.+)=X) AND ((B.@)="0000-00-00 00:00:00") AND ((A.@) Between Y And Z)); Set rs = db.OpenRecordset(SQL) Me.W = rs!★ Set rs = Nothing Set db = Nothing End Sub <以上質問コード> 退職者が作ったアクセスデーターベースなのですが、 テキストボックスWに計算されたデータ数が表示がされなくなり、 自分なりに過去の質問をさぐってみたのですが、 いまだに、ゴールに行きつきません・・・。 質問の仕方が間違えていましたら申し訳ありません。 どうか、アドバイスのほど、よろしくお願いいたします。

  • Access VBA 日付で抽出できない?

    次の質問にお答えいただけませんか。 フォームで抽出条件を入力しテーブルから抽出をするとき Dim db As DAO.Database Dim rs As DAO.Recordset Dim mySQL As String Set db = CurrentDb() mySQL = "SELECT * FROM T_明細 " _ & "WHERE 顧客ID = " & CStr(Me!txtKey) & ";" Set rs = db.OpenRecordset(mySQL, dbOpenDynaset) 上記のような記述をしました。 テーブル名:T_明細   フィールド:顧客ID  日付 金額  フォームの抽出条件入力テキストボックス:txtKey このとき顧客IDでの抽出は問題なく出来ましたが "WHERE 顧客ID = を "WHERE 日付 = に変更して日付で抽出をしたいのですがうまくいきません。 テーブルの日付フィールドは 書式をgee-mm-dd 定型入力を>L99\-99\-99;0;# で書き込みました。 フォームのtxtKeyテキストボックスのプロパティも書式をgee-mm-dd 定型入力を>L99\-99\-99;0;#に設定してあります。 このようなときは mySQL = "SELECT * FROM T_明細 " _ & "WHERE 日付 = " & CStr(Me!txtKey) & ";" の、記述を何か変更しないといけないような気もしますが 対処の方法を教えていただけませんか。

  • Access VBAでクエリーのレコード件数を取得したいのですが

    Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。 構文又は手法が間違っているのでしょうか。 Dim db As Database Dim rs As Recordset Dim cnt As Long Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = rs.RecordCount ※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

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

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

  • テーブルのレコードが0件時にmsg表示(アクセス)

    とてつもない初歩的な質問で すみません! フォーム1をメニュー画面として、 フォーム1にある「ボタン」を押すと テーブルにレコードが追加され、処理が走る・・・という仕様を作っています。 ですが、 このテーブルにレコードが追加されなかった=0件 の場合の回避策を どうしたら良いのかが わかりません。 ちなみに、 Private Sub ボタン_Click() On Error GoTo errmsg DoCmd.SetWarnings False Dim DB As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim i As Long Set DB = CurrentDb Set rs1 = DB.OpenRecordset("テーブル1") Set rs2 = DB.OpenRecordset("テーブル2", dbOpenDynaset) rs1.MoveFirst Do Until rs1.EOF If rs1!フィールドA1 = rs1!フィールドA2 Then rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = rs1!フィールドA1 rs2!B = rs1!フィールドB rs2!C = rs1!フィールドC rs2.Update End If If rs1!フィールドA1 < rs1!フィールドA2 Then For i = rs1!フィールドA1 To rs1!フィールドA2 Step 1 rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = i rs2!フィールドB = rs1!フィールドB rs2!フィールドC = rs1!フィールドC rs2.Update Next i End If rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing DB.Close: Set DB = Nothing Call 次処理 errmsg: MsgBox "元データが未投入です。" End Sub としたのですが、 これでは データが投入され、処理が成功=完了した場合にも エラーメッセージが出てしまいました。 ご教示いただけますと幸いです。 お手数をおかけしますが、よろしくお願い致します。