アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前にも似たような質問をして、その時は解決したのですが、また同じようなことでつまづいて、以前の回答をみて、
そのとおりにやってるつもりなのに、できなくて…。

テーブル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
の行が黄色になります。

A 回答 (6件)

SELECT * FROM [テーブル1] WHERE [(Val(Mid(テーブル1.情報,9)) between 10.3 and 10.5)]



ごめんなさい、#5の回答で書いたSQLの [ ] の記号は
書き換えてもらう部分をはっきりさせるためにつけただけであって
実際のSQLには [ ] の記号そのものは不要です。

SELECT * FROM テーブル名 WHERE 条件式

という形でクエリを作成して実行してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

すいません、勘違いしてたみたいですね(^^;

[]をとってみたところ、少し前進?しまして、クエリーのデザインビューはみれるようになりました。
(型が一致しません、というエラーは出てしまいますが。)

もうだんだん分からなくなってきてしまったので(>_<)今回はボタンひとつでの検索を諦めて、
クエリーを一旦挟んだ検索にしようかと思ってきました。
これなら無事思うように検索できました…。

お礼日時:2005/02/18 14:48

(Val(Mid(テーブル1.条件,9)) between 10.3 and 10.5)



↑コピーしていただいたこの文字列なら
(テーブル名・フィールド名が間違っていなければ)条件式として問題はないように見えます。

クエリを新規作成し、SQLビューで

SELECT * FROM [実際のテーブル名] WHERE [Debug.Print condKensakuで出力された文字列のコピペ]

※[ ]の部分はそちらの環境に合わせて置き換えてください。

というSQLを入力し、そのクエリが正しく動くかどうか
期待した結果が得られるかどうかを確認してみてください。

正しく動かないようであればやはり
・テーブル、フィールドの構造
・実際にテーブルに格納されているデータの内容
・condKensakuとして作成された条件式
のいずれかに問題があると思われますが
そのクエリが正しく動くのであれば、どこか他の部分に原因があると思われますので
これ以上こちらで判断できそうにはありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

クエリを作成し、以下をSQL文にいれてみました。

SELECT * FROM [テーブル1] WHERE [(Val(Mid(テーブル1.情報,9)) between 10.3 and 10.5)]

クエリを実行しようとすると、そのクエリが見つかりません、というエラーが出てきました。
ということはやはりどこかが違うということですね…

もうちょっと見直してみたいと思います。

お礼日時:2005/02/18 14:01

(Val(Mid(テーブル.情報,9)) between 10 and 12)



↑今度の文字列はイミディエイトウィンドウからコピーしたものですか?
テーブルの名前は「テーブル1」(数字は全角)ではなかったのですか?

カンマの数が違っていたり、半角/全角が違っていたり、テーブルの名前が違っていたり...
書き込まれる度に内容が変わっており
それぞれプログラムとしてはまるで違う意味になってしまうため
これでは正確な原因を判断しようがありません(^^;;;

Debug.Print condKensaku
を実行して、イミディエイトウィンドウに出力された文字列と
テーブル、フィールドの正確な名称を
手で入力するのではなく、コピー&ペーストで貼り付ける形でお教えください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

これがコピーしたものです。
3
5
(Val(Mid(テーブル1.条件,9)) between 10.3 and 10.5)

(テーブル名や、フィールド名は実際に行っているものと、質問した文では変わっているため、それを直し忘れなどで多少違うこともありますが、テーブル名の指定等は名前は間違っておりません)

お礼日時:2005/02/18 10:55

Debug.Printの結果の



(Val(Mid(テーブル1.情報,9)) between 3 and 15)

↑この文字列が、イミディエイトウィンドウからコピペしたものであるならば
括弧の記号が全角になっている部分があります。
※最初の3つと最後の1つ

条件式の中で全角括弧が使われているならば、エラーの原因はそれだと思われます。
※全角の括弧は特別な意味を持つ記号ではなく、単なる文字と見なされてしまいます。
    • good
    • 0
この回答へのお礼

すいません、写し間違いというか、自分で入力をしたので全角になっていました。
実際は半角です。

(Val(Mid(テーブル.情報,9)) between 10 and 12)

お礼日時:2005/02/18 09:23

#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行を追加して、イミディエイトウィンドウに表示される結果を確認してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ためしに
検索1→3
検索2→15
を入力して、実行して、イミディエイトウィンドウに表示されたものを確認すると

3
15
(Val(Mid(テーブル1.情報,9)) between 3 and 15)

となっています。
(MidとValの位置は変更しました。)

見た感じなんとなくあってるような気はしないでもないんですが。。
どこか間違ってるでしょうか?

お礼日時:2005/02/17 18:15

どうも、せっかくなのでこちらにも回答させて頂きますね。



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となっているか
といったあたりを確認してみてくださいね。
    • good
    • 0
この回答へのお礼

再度回答ありがとうございます。

こちらが使用しているAccessは2002です。

すいません、写し間違いで、
DoCmd.OpenForm "フォーム2", acNormal, , WhereCond
と,が2個入ってました。
ちなみにこれを1個にしてみると、フォームは表示されましたが、検索条件は無視されているようです。

>・テーブル1の情報に半角数字、半角ピリオド(小数点)以外の文字が入っていないか

入っていたので、他へ移動させて、数字・ピリオドのみにしました。

>・フォーム1の検索1、検索2の欄に半角数字、半角ピリオド以外の文字が入っていないか

はい、大丈夫です。入っていません。

>・フォーム2のレコードソースがテーブル1となっているか

はい、なっています。
他の検索の箇所の結果としてこのフォーム2を使っていて、他の検索ではちゃんとなっているので、フォーム2に異常はなさそうです。

上記をやってみましたが、やはり同じメッセージが!

お礼日時:2005/02/17 17:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!