以前にも似たような質問をして、その時は解決したのですが、また同じようなことでつまづいて、以前の回答をみて、
そのとおりにやってるつもりなのに、できなくて…。
テーブル1とフォーム1・フォーム2があります。
フォーム1に入力された情報をもとに、テーブル1の内容を検索して、フォーム2に表示するものを作成しています。
テーブル1には「***.***.**.☆」(情報)という形の情報が入っています。
*の部分の桁数は固定で☆は不定形です。(テキスト形式)
フォーム1に入力された情報は「(***.***.)**.*」(検索1)や「(***.***.)**.**」(検索2)などです。
※()内は入力せず
テーブル1の情報の9文字目以降と、フォーム1に入力された情報を比べたくて、以下のようなものを作成しました。
(多少省略等があります)
condKensaku = "(Mid(Val(テーブル1.情報),9) between " & Val(Me!検索1.Value) & " and " & Val(Me!検索2.Value) & ")"
wherecond = condKensaku
DoCmd.OpenForm "フォーム2", acNormal, WhereCond
これを実行すると
実行時エラー '2501':
OpenForm アクションの実行はキャンセルされました。
と出て、デバッグを押すと、
DoCmd.OpenForm "フォーム2", acNormal, WhereCond
の行が黄色になります。
No.6ベストアンサー
- 回答日時:
SELECT * FROM [テーブル1] WHERE [(Val(Mid(テーブル1.情報,9)) between 10.3 and 10.5)]
ごめんなさい、#5の回答で書いたSQLの [ ] の記号は
書き換えてもらう部分をはっきりさせるためにつけただけであって
実際のSQLには [ ] の記号そのものは不要です。
SELECT * FROM テーブル名 WHERE 条件式
という形でクエリを作成して実行してみてください。
回答ありがとうございます。
すいません、勘違いしてたみたいですね(^^;
[]をとってみたところ、少し前進?しまして、クエリーのデザインビューはみれるようになりました。
(型が一致しません、というエラーは出てしまいますが。)
もうだんだん分からなくなってきてしまったので(>_<)今回はボタンひとつでの検索を諦めて、
クエリーを一旦挟んだ検索にしようかと思ってきました。
これなら無事思うように検索できました…。
No.5
- 回答日時:
(Val(Mid(テーブル1.条件,9)) between 10.3 and 10.5)
↑コピーしていただいたこの文字列なら
(テーブル名・フィールド名が間違っていなければ)条件式として問題はないように見えます。
クエリを新規作成し、SQLビューで
SELECT * FROM [実際のテーブル名] WHERE [Debug.Print condKensakuで出力された文字列のコピペ]
※[ ]の部分はそちらの環境に合わせて置き換えてください。
というSQLを入力し、そのクエリが正しく動くかどうか
期待した結果が得られるかどうかを確認してみてください。
正しく動かないようであればやはり
・テーブル、フィールドの構造
・実際にテーブルに格納されているデータの内容
・condKensakuとして作成された条件式
のいずれかに問題があると思われますが
そのクエリが正しく動くのであれば、どこか他の部分に原因があると思われますので
これ以上こちらで判断できそうにはありません。
回答ありがとうございます。
クエリを作成し、以下をSQL文にいれてみました。
SELECT * FROM [テーブル1] WHERE [(Val(Mid(テーブル1.情報,9)) between 10.3 and 10.5)]
クエリを実行しようとすると、そのクエリが見つかりません、というエラーが出てきました。
ということはやはりどこかが違うということですね…
もうちょっと見直してみたいと思います。
No.4
- 回答日時:
(Val(Mid(テーブル.情報,9)) between 10 and 12)
↑今度の文字列はイミディエイトウィンドウからコピーしたものですか?
テーブルの名前は「テーブル1」(数字は全角)ではなかったのですか?
カンマの数が違っていたり、半角/全角が違っていたり、テーブルの名前が違っていたり...
書き込まれる度に内容が変わっており
それぞれプログラムとしてはまるで違う意味になってしまうため
これでは正確な原因を判断しようがありません(^^;;;
Debug.Print condKensaku
を実行して、イミディエイトウィンドウに出力された文字列と
テーブル、フィールドの正確な名称を
手で入力するのではなく、コピー&ペーストで貼り付ける形でお教えください。
回答ありがとうございます。
これがコピーしたものです。
3
5
(Val(Mid(テーブル1.条件,9)) between 10.3 and 10.5)
(テーブル名や、フィールド名は実際に行っているものと、質問した文では変わっているため、それを直し忘れなどで多少違うこともありますが、テーブル名の指定等は名前は間違っておりません)
No.3
- 回答日時:
Debug.Printの結果の
(Val(Mid(テーブル1.情報,9)) between 3 and 15)
↑この文字列が、イミディエイトウィンドウからコピペしたものであるならば
括弧の記号が全角になっている部分があります。
※最初の3つと最後の1つ
条件式の中で全角括弧が使われているならば、エラーの原因はそれだと思われます。
※全角の括弧は特別な意味を持つ記号ではなく、単なる文字と見なされてしまいます。
すいません、写し間違いというか、自分で入力をしたので全角になっていました。
実際は半角です。
(Val(Mid(テーブル.情報,9)) between 10 and 12)
No.2
- 回答日時:
#1です。
そうなるとやはり怪しいのは検索条件の文字列ですね。
最初の質問に書かれていたように
Mid(Val(テーブル1.情報),9)
↓
Val(Mid(テーブル1.情報,9))
に変えて実行してみてください。
Valは文字列の先頭から数値と見なせる部分を取り出して数値化する関数なので
Val("123.456.78.9") だと戻ってくる値は 123.456 になります。
(※小数点が2個つくのは数値ではありえないため、数値とみなせるのは123.456まで)
その後でMidを実行しても数字は7桁しかないため空の文字列しか返ってきません。
クエリのSQLビューで
SELECT Mid(Val(テーブル1.情報),9), Val(Mid(テーブル1.情報,9)) FROM テーブル1
と入力して実行してみると違いが良く分かるかと。
それでもだめなら、Docmd.OpenFormのすぐ上に
Debug.Print Val(Me!検索1.Value)
Debug.Print Val(Me!検索2.Value)
Debug.Print condKensaku
の3行を追加して、イミディエイトウィンドウに表示される結果を確認してみてください。
回答ありがとうございます。
ためしに
検索1→3
検索2→15
を入力して、実行して、イミディエイトウィンドウに表示されたものを確認すると
3
15
(Val(Mid(テーブル1.情報,9)) between 3 and 15)
となっています。
(MidとValの位置は変更しました。)
見た感じなんとなくあってるような気はしないでもないんですが。。
どこか間違ってるでしょうか?
No.1
- 回答日時:
どうも、せっかくなのでこちらにも回答させて頂きますね。
ACCESSのバージョンに依存するかもしれませんが、まず単純に
DoCmd.OpenForm "フォーム2", acNormal, WhereCond
↓
DoCmd.OpenForm "フォーム2", acNormal, , WhereCond
に変えて実行してみてください。
Docmd.OpenFormの3番目の引数FilterNameは、フィルタ用として作成済みの「クエリの名前」を指定するものです。
つまりここにcondKensakuの文字列を入れてしまうと
「(Mid(Val(テーブル1.情報),9) between ~」という名前のクエリを探しにいってしまいます。
検索条件の式を文字列で作ったならば、それは4番目のWhereConditionの引数として渡す必要があります。
(以上はACCESS 2003での話です)
それで上手くいかないようであれば
・テーブル1の情報に半角数字、半角ピリオド(小数点)以外の文字が入っていないか
・フォーム1の検索1、検索2の欄に半角数字、半角ピリオド以外の文字が入っていないか
・フォーム2のレコードソースがテーブル1となっているか
といったあたりを確認してみてくださいね。
再度回答ありがとうございます。
こちらが使用しているAccessは2002です。
すいません、写し間違いで、
DoCmd.OpenForm "フォーム2", acNormal, , WhereCond
と,が2個入ってました。
ちなみにこれを1個にしてみると、フォームは表示されましたが、検索条件は無視されているようです。
>・テーブル1の情報に半角数字、半角ピリオド(小数点)以外の文字が入っていないか
入っていたので、他へ移動させて、数字・ピリオドのみにしました。
>・フォーム1の検索1、検索2の欄に半角数字、半角ピリオド以外の文字が入っていないか
はい、大丈夫です。入っていません。
>・フォーム2のレコードソースがテーブル1となっているか
はい、なっています。
他の検索の箇所の結果としてこのフォーム2を使っていて、他の検索ではちゃんとなっているので、フォーム2に異常はなさそうです。
上記をやってみましたが、やはり同じメッセージが!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(ブラウザ) Mycrosoft Edge フォームの履歴を完全に削除したい 3 2022/08/11 09:59
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
Acccessで2つのテーブルから1...
-
最新日のデータのみ抽出するク...
-
ACCESS テーブルを見比...
-
ACCESSでテーブルをコピーしよ...
-
Accessで、複数行を、別...
-
Access2007を同時に複数名で使...
-
Accessでリストの並び順を変更...
-
accessについて(超初心者です)
-
Microsoft Access 「Form」のボ...
-
アクセス・デザインビューのレ...
-
ACCESSユニオンクエリから新テ...
-
access vbaにてテンポラリーテ...
-
テーブルに表示されているもの...
-
アクセス2016 チェックボックス...
-
Accessのテーブルで、リンク?...
-
Accessのリンクされたテーブル...
-
クエリで同一テーブルの複数回...
-
Accessでリンクテーブルからロ...
-
アクセスVBA現在開いている全て...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
最新日のデータのみ抽出するク...
-
Acccessで2つのテーブルから1...
-
テーブルに表示されているもの...
-
Accessでリストの並び順を変更...
-
Accessのリンクされたテーブル...
-
クエリで同一テーブルの複数回...
-
access vbaにてテンポラリーテ...
-
Accessのテーブルで、リンク?...
-
ACCESS テーブルを見比...
-
ACCESSユニオンクエリから新テ...
-
accessのテーブルを閉じたとき...
-
アクセス2016 チェックボックス...
-
アクセス 部分一致の抽出
-
Accessで使用しているリンクテ...
-
ACCESSのODBCリンクテーブルの...
-
アクセス2000でのリンク先...
-
Microsoft Access 「Form」のボ...
-
ACCESSでリンクテーブルのデー...
-
access2000・・テーブルをデー...
おすすめ情報