• 締切済み

ACCESS どこがおかしいのか?

ACCESSで。クエリからフォームを作成し、検索フォームを作成しようとしています。 AND条件とOR条件を作り検索(抽出)を行いたいのですが、何が間違っているのか、 検索をかけるとすべて「登録がありません」になってしまいます。 どこが間違っているのか、もしくは代替案を教えていただけますでしょうか。 以下は記述した、VBAコードです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim stFil As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Autoweb", dbOpenDynaset) 'オプションボタンで条件を選択 If 検索条件 = 1 Then rs.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else rs.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If Set rs = rs.OpenRecordset Set Me.Recordset = rs If rs.EOF = True Then MsgBox "登録がありません" Else Me.ID = rs!ID Me.案件名 = rs!案件名 Me.タイトル = rs!タイトル Me.本文 = rs!本文 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub よろしくお願いします。

みんなの回答

  • kosamon
  • ベストアンサー率47% (11/23)
回答No.5

#1です。 >ルックアップ列を一部含んでいますので、数値型が混じっています。 少し意味不明なので、そこをもう少し詳しく^^;(IDの事?) 最低限でも[タイトル]と[本文]のデータ型について教えてください。 できれば、差しさわりのない範囲でデータの内容なんかもあるとわかりやすいです。 また、NO3で私が提示した件について検証されましたでしょうか? それと、少し気になったのでもう一点。 >そのオブジェクト内に、検索フォーム(?と言えるのかな?)を用意しています 検索フォームとはテキストボックスの事でしょうか? もしかして、「詳細部分」にあったりなんかします?

  • kosamon
  • ベストアンサー率47% (11/23)
回答No.4

#1です。前回投稿分カキコ中に補足がアップされているのを見て あわてて、カキコしてます。 まずはじめにきちんとお聞きしなければならなかったのですが、 各フィールドのデータ型はどうなっていますでしょうか? >そこから特定のカテゴリを抽出するために、クエリで各カテゴリ分オブジェクトをつくりました。 抽出条件を設定したクエリを基にフォームを作成された、という解釈でよろしいでしょうか? それと検索条件は完全一致?部分一致? はじめに提示されたコードを拝見する限り完全一致とお見受けしますが再確認の意味も込めてお聞かせください。

arimasouitirou
質問者

補足

>#1です。前回投稿分カキコ中に補足がアップされているのを見て >あわてて、カキコしてます。 あ。すみません;;(>◇<)ゞ >各フィールドのデータ型はどうなっていますでしょうか? ルックアップ列を一部含んでいますので、数値型が混じっています。 あれ。もしかしてそれが原因ですか?;; >それと検索条件は完全一致?部分一致? 完全一致です。 >抽出条件を設定したクエリを基にフォームを作成された、という解釈でよろしいでしょうか? あ、そうです。 本当は、コンボボックスなどでカテゴリを分けたかったのですが、そうすると検索(抽出)条件が 面倒なような気がして、クエリで先にカテゴリ別にわけちゃったんです。 ご迷惑おかけします。

  • kosamon
  • ベストアンサー率47% (11/23)
回答No.3

#1です、続けざまに失礼します。 少し検証してみたのですが、「入力用」か否かは関係なさそうですね。 入力用の状態でもきちんと抽出できました。 そこで、問題を少し切り分けてみませんか? me.Filter = "[タイトル]='" & タイトル検索 & "'" me.FilterOn=True 上記のみの記述とした場合きちんと抽出されますでしょうか?

  • kosamon
  • ベストアンサー率47% (11/23)
回答No.2

#1です。 うーん、投稿前に確認済なのですが・・・。 私のほうは問題なく、期待どうりの結果を得ることができてます。 コピペしてもダメってことでしょうか? >FilterOn=true してますよね? ボタンクリック前にはちゃんと全データ表示されてる状態ですよね? もしかして、フォームが入力用になってるとか? >変わらない ということは >MsgBox "登録がありません の状態なのですね? どういう手順で、どうダメなのかもう少し詳しく書いていただけますか?

arimasouitirou
質問者

補足

ありがとうございます。 えっと、まず、元のデータ数百件が記入されたテーブルがあります。 そこから特定のカテゴリを抽出するために、クエリで各カテゴリ分オブジェクトをつくりました。 そのオブジェクト内に、検索フォーム(?と言えるのかな?)を用意しています。 テキストボックスを二つ。一つはタイトルの中から検索するもの。もう一つは本文の中から検索するものです。 その隣にはオプショングループでAND と OR のラジオボタンがあり、後は検索ボタンです。 その検索ボタンのクリックイベントで、上記のコードを記入しました。 するとメッセージボックスが表示→「登録がありません」となりました。 そこでご相談させていただき、コードをコピペしてみたのですが、 エラー内容は変わりません。 唯一変わったのは、抽出結果が、はじめ#N/Aが表示されていたのですが、コードを変えると、空白になりました。

  • kosamon
  • ベストアンサー率47% (11/23)
回答No.1

もっとシンプルに。 'オプションボタンで条件を選択 If 検索条件 = 1 Then me.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else me.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If me.FilterOn=True me.Recordset.RecordCountで件数が取得できるので、 if me.Recordset.RecordCount=0 Then ~ こんな感じかな。

arimasouitirou
質問者

補足

さっそくの回答ありがとうございます。 でも、うまくいかないです;;さっきと状況、変わりません;;

関連するQ&A

  • AccessのフォームでAND検索

    Accessで今、土地物件を検索するものを作っています。 物件はテーブルに200件くらいあります。 そのテーブルのフィールドに「土地面積(坪)」と「価格」いう名前のフィールドがあるのですが、この2つは【○○~○○】という具合にフォームでボタンを押せば範囲検索が出来るようになっています。 だけど、OR条件になってしまいます。 出来れば、それをAND条件で検索できる様にしたいのです。 ソースは今このようになっています↓↓ テキスト:「tubo1」「tubo2」「kakaku1」「kakaku2」 Private Sub コマンド55_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("物件情報", dbOpenDynaset) If tubo1 <> "" Then If tubo2 <> "" Then    rs.Filter = "[土地面積(坪)] >=" & tubo1 & " And [土地面積(坪)] <=" & tubo2 Else rs.Filter = "[土地面積(坪)] =" & tubo1 End If If kin1 <> "" Then If kin2 <> "" Then rs.Filter = "[価格] >=" & kakaku1 & " And [価格] <=" & kakaku2 Else rs.Filter = "[価格] =" & kakaku1 End If End If End If Set rs = rs.OpenRecordset Set Me.Recordset = rs Me.Requery Set rs = Nothing Set db = Nothing End Sub です。宜しくお願い致します。 ちなみにAccess2007です。

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

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

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

  • 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

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

    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のDoCmd.SendObjectについて

    AccessVBA初心者(ExcelVBAはまあまあ経験有)の者です。 下記のようにプログラムを組んで実行してみたのですが、 複数レコードあるクエリを読んでいるにもかかわらず、 メールを一通しか送信してくれません。 色々と試してみたのですが、メール本文が短いと送信できるようです。 (送りたいメール本文は1KByte弱で、それだと失敗しますが、メール本文を「test」の四文字だけにするときちんとレコード数だけメール送信してくれます。) 回避策はあるでしょうか。 ---------------------------------------- Public Function メール送信Sub() Dim db As DAO.Database Dim rs As DAO.Recordset Dim 件名 As String Dim 本文 As String Set db = CurrentDb Set rs = db.OpenRecordset("022.メール送信用クエリ", dbOpenForwardOnly, dbDenyWrite) Do Until rs.EOF '件名の作成 件名 = "御注文品発送のご連絡" '本文の作成 本文 = rs!メール本文 ' 本文 = "test" 'メールの送信 DoCmd.SendObject , , acFormatTXT, rs!購入者Eメールアドレス, "(CC用メールアドレス)", , 件名, _ 本文, False rs.MoveNext Loop rs.Close: Set rs = Nothing End Function ----------------------------------------

  • ExcelからAccessデータを検索するマクロ

    Excel、Accessとも初心者です。 下記を参考にさせて頂いております。 http://okwave.jp/qa/q441987.html これを、(1)~(3)に対応させたいのですが どのように書き換えればよろしいのでしょうか? (1)A1→ A列の最後まで (2)対応するレコードフィールド2   → 規定した複数のレコードフィールド     (例えば、フィールド3とフィールド5とフィールド8) (3)Excel, Accessともに2007です。 (4)検索の経過は表示させない  (少しでも早く処理したい。ひとつひとつ検索結果を表示すると遅くなると聞ききました) ・・・・・・・・・・・・・・・・・・・・・・・・・ Sub Macro1() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = OpenDatabase("c:\abc.mdb") Set rs = db.OpenRecordset("tbl_a", dbOpenDynaset) rs.FindFirst "[フィールド1]='" & Range("A1").Value & "'" If rs.NoMatch Then   Range("B1").Value = "" Else   Range("B1").Value = rs![フィールド2] End If rs.Close Set rs = Nothing Set db = Nothing End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・ よろしくご教授お願いします。

  • 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 よろしくお願いします。

専門家に質問してみよう