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

ASPとAccessを使用しています。
フォームから複数の値を入力させ、Access(複数のテーブル)を参照し、結果を表示させたいのですが、SELECT文でエラー表示。

初心者に毛の生えた程度しかしりませんので、教えていただきたく、お願いいたします。

以下3つのテーブルがあります。テーブルAの「検索用ID」(主キー)をテーブルB・Cの「検索用ID」にリレーションシップでつなげています。
tebleA--------------
検索用ID 名前 備考
-----------------------

tebleB--------------
検索用ID 地域
-----------------------

tebleC--------------
検索用ID 職業
-----------------------

フォームで入力させるのはテーブルBの「地域」とテーブルCの「職業」
の値です。
その「地域」と「職業」からOR条件でテーブルAのデータを抽出したいのです。

SQL = "SELECT tebleA.* FROM tebleA,tebleB,tebleC WHERE tebleB.地域 = "& Request.QueryString("地域の値") &" OR tebleC.職業 = "& Request.QueryString("職業の値") &""

SQLに自信がありません・・・よろしくお願いいたします。

A 回答 (8件)

Accessはよく知らないのですが、普通のSQLであれば、


テーブルA~Cを検索用IDで紐付けてあげる必要があると思います。

=========================================================
SELECT
tebleA.*
FROM
tebleA,
tebleB,
tebleC
WHERE
(
tebleB.地域 = "& Request.QueryString("地域の値") &"
OR
tebleC.職業 = "& Request.QueryString("職業の値") &"
)
AND
(
tebleA.検索用ID=tebleB.検索用ID
AND
tebleA.検索用ID=tebleC.検索用ID
)
=========================================================

あと、関係ないですが、tebleじゃなくてtableだと思います…

この回答への補足

回答ありがとうございます。
実際のテーブル名や変数名に書き換え以下のようになりました。

gaiqerRec ="SELECT A_name.* FROM A_name,B_kinmu,B_gyosyu WHERE (B_kinmu.gaitoNO = "& Request.QueryString("place") &" OR B_gyosyu.gaitoNO = "& Request.QueryString("biz") &") AND ( A_name.srchNO = B_kinmu.srchNO AND A_name.srchNO = B_gyosyu.srchNO )"

すると、下記のエラーが表示されます。
Microsoft VBScript runtime エラー '800a01a8'
Object required: 'SELECT A_kyujin.* FR'

FROMの途中で切れていますが、書き換えた際にSQL文を間違っているのでしょうか・・・よく確認したはずですが・・・
お分かりになればお教えいただけますでしょうか。

補足日時:2008/05/15 23:50
    • good
    • 0

Area = Request.QueryString("地域の値")


Work = Request.QueryString("職業の値")
WHR = ""
SQL = "SELECT A.* FROM (tebleA As A"
SQL = SQL & " Inner Join tebleB As B"
SQL = SQL & " On A.検索用ID=B.検索用ID)"
SQL = SQL & " Inner Join tebleC As C"
SQL = SQL & " On A.検索用ID=C.検索用ID)"
If Area <> "" Or Work <> "" Then
  SQL =SQL & " Where "
  If Area <> "" Then
    Area = Replace(Area, "'", "''")
    'SQL = SQL & "B.地域 Like '" & Area & "*'"
    SQL = SQL & "B.地域='" & Area & "'"
  End If
  If Work <> "" Then
    If Area <> "" Then SQL = SQL & " And "
    Work = Replace(Work, "'", "''")
    'SQL = SQL & "C.職業 Like '" & Work & "*'"
    SQL = SQL & "C.職業='" & Work & "'"
  End If
End If

1行にゴチャゴチャと書かずに、複数行に分けましょう。
上記は地域、職業とも文字型と仮定しています。
曖昧検索の場合はLike演算子を使った(コメント化してある)ほうの
ステートメントを使用してください。尚、地域や職業が数値の場合は
SQL = SQL & "C.職業=" & Work
のようにアポストロフィを付けないようにします。Replaceは不要で、
Likeは使えません。

この回答への補足

回答ありがとうございます。
私の頭の志向回路的にも分かりやすいSQL文で凄く納得しながら、拝見させていただいていたのですが、なぜか下記文でエラーが表示されます。

Microsoft VBScript コンパイル エラー (0x800A0408)
文字が正しくありません。
  SQL = SQL & " Where "

なぜ、こんなところでつまづいているんでしょうか・・・
ただの代入文のはずなのですが・・・

補足日時:2008/05/16 01:05
    • good
    • 0

テーブルの関係等が分からないのでアレですが、



gaiqerRec ="SELECT A_name.* FROM (A_name LEFT JOIN B_kinmu ON A_name.srchNO = B_kinmu.srchNO) LEFT JOIN B_gyosyu ON A_name.srchNO = B_gyosyu.srchNO WHERE ((B_kinmu.gaitoNO = " & Request.QueryString("place") & ") OR (B_gyosyu.gaitoNO = " & Request.QueryString("biz") & "))"

みたいな感じじゃないでしょうか?

Accessで、適当なWHERE条件を入れてクエリを作ってみて、そのSQL文を元に書き換えてみればいいのではないでしょうか?
(クエリの表示を SQLビュー(?) ってのに切り替えればSQL文が表示されるはず)

この回答への補足

アドバイスありがとうございます。

お教えいただいたSQL文も#1さんと同じエラーが表示されます。

Microsoft VBScript runtime エラー '800a01a8'
Object required: 'SELECT A_name.* FR'

なぜ、こんな中途半端なところまでしか表示されないんでしょうか・・・
このようなエラーは始めて経験します。
さっぱりですね・・・(笑)

補足日時:2008/05/16 01:13
    • good
    • 0

#3です。



ごめんなさい
#2さんのご回答と内容がかなりかぶってしまいました。
(#2さんの回答が親切ですので、私の回答は軽く流してください)

この回答への補足

ご親切にありがとうございます。
1つの命令を色んなSQL文で見ると、とても勉強になります!

頑張って、抽出したいと思います。

補足日時:2008/05/16 01:17
    • good
    • 0

#3です。



> Microsoft VBScript runtime エラー '800a01a8'
> Object required: 'SELECT A_name.* FR'

SQL文のみのご提示なので推測できませんが、
どこでエラーが出ているのでしょうか?
SQL文がおかしいとかいう以前の問題な気がしますね。
入力値とか関係なく、
gaiqerRec = "SELECT * FROM A_name WHERE srchNO=1"
のようなシンプルなSQL文にしてみたら正常に動作するのでしょうか?

この回答への補足

何度もありがとうございます!
説明不足ですいません。

> Microsoft VBScript runtime エラー '800a01a8'
> Object required: 'SELECT A_name.* FR'

エラーがでているのは、SQL実行文の場所(下記)です。
gaiqerRec.Open gaiqerSQL,objConn,adOpenStatic

簡単なSQL文は他でも使用していますし、
今回原因の場所で簡単なSQL文で確認しましたが動作いたしました。

よろしくお願いいたします。

補足日時:2008/05/16 23:09
    • good
    • 0

#2です。

もしかして、モロにコピペしませんでしたか?
このサイトでは前方の空白は除去されてしまうので、Ifの内側など
漢字空白でインデントしています。
手で打ち直すか、別のテキストエディタにコピペし、漢字空白を
半角スペース×2に変換してから再度、コピペしてみてください。

この回答への補足

追加でご指摘ありがとうございます。
しりませんでした・・・

名前を修正のみして試しておりました・・・
修正後、当エラーは出なくなりました。ありがとうございます。

しかし、SQL実行文でエラーが出ます。
Microsoft VBScript 実行時エラー (0x800A01A8)
オブジェクトがありません。: 'SELECT A.* FROM (A_n'

エラーが出ているのは下記文です。
gaiqerRec.Open gaiqerSQL,objConn,adOpenStatic

よろしくお願いいたします。

補足日時:2008/05/16 23:23
    • good
    • 0

#2です。

間違いが2点
(1)WHR = ""
 WHRは使っていないので、削除してください。
(2)If Area <> "" Then SQL = SQL & " And "
 地域と職業はORでしたね。以下のように訂正してください。
 If Area <> "" Then SQL = SQL & " OR "

あと、地域と職業の属性は何ですか?(文字型 OR 数値型)

この回答への補足

何度もアドバイスありがとうございます。
修正させていただきました。

地域と職業の属性は両方とも文字型です。
よろしくお願いいたします。

補足日時:2008/05/16 23:18
    • good
    • 0
この回答へのお礼

ご助力のおかげで動作させることができました。
本当にありがとうございます。

お礼日時:2008/05/17 15:42

#3です。



>gaiqerRec.Open gaiqerSQL,objConn,adOpenStatic
ADOですよね。
つかぬことをお伺いしますが、#1の補足で、

> 実際のテーブル名や変数名に書き換え以下のようになりました。
> gaiqerRec ="SELECT A_name.* FROM A_name,B_kinmu,B_gyosyu ......

と書いてありますが、
gaiqerRec.Open gaiqerSQL,objConn,adOpenStatic
ということでしたら、「gaiqerRec = "SELECT ......"」ではなく、
「gaiqerSQL = "SELECT ......"」ではないでしょうか?

(補足を受けて、#3での私の回答も、「gaiqerRec = "SELECT ......"」にしましたが。。。)
また、地域と職業は、「gaitoNO」なので、数値なのだろうと推測していたのですが、
文字型とのことですので、#3を書き直すと、

gaiqerSQL ="SELECT A_name.* FROM (A_name LEFT JOIN B_kinmu ON A_name.srchNO = B_kinmu.srchNO) LEFT JOIN B_gyosyu ON A_name.srchNO = B_gyosyu.srchNO WHERE ((B_kinmu.gaitoNO = '" & Request.QueryString("place") & "') OR (B_gyosyu.gaitoNO = '" & Request.QueryString("biz") & "'))"

となります。ご参考までに。
(LEFT JOIN か INNER JOIN かはテーブルの構造や関係が分からないので適当です。とりあえず LEFT JOIN にしているだけです)
    • good
    • 0
この回答へのお礼

本当に何度もありがとうございます!
正常に動作いたしました!!

すごい凡ミスですね・・・
いつから変更し間違えてたのかすら・・・
本当にありがとうございます。

LEFT JOIN 、INNER JOIN まだまだ勉強が必要ですね。
ありがとうございました。

お礼日時:2008/05/17 15:08

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