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に自信がありません・・・よろしくお願いいたします。
No.1
- 回答日時:
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文を間違っているのでしょうか・・・よく確認したはずですが・・・
お分かりになればお教えいただけますでしょうか。
No.2
- 回答日時:
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 "
なぜ、こんなところでつまづいているんでしょうか・・・
ただの代入文のはずなのですが・・・
No.3
- 回答日時:
テーブルの関係等が分からないのでアレですが、
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'
なぜ、こんな中途半端なところまでしか表示されないんでしょうか・・・
このようなエラーは始めて経験します。
さっぱりですね・・・(笑)
No.4
- 回答日時:
#3です。
ごめんなさい
#2さんのご回答と内容がかなりかぶってしまいました。
(#2さんの回答が親切ですので、私の回答は軽く流してください)
No.5
- 回答日時:
#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文で確認しましたが動作いたしました。
よろしくお願いいたします。
No.6
- 回答日時:
#2です。
もしかして、モロにコピペしませんでしたか?このサイトでは前方の空白は除去されてしまうので、Ifの内側など
漢字空白でインデントしています。
手で打ち直すか、別のテキストエディタにコピペし、漢字空白を
半角スペース×2に変換してから再度、コピペしてみてください。
この回答への補足
追加でご指摘ありがとうございます。
しりませんでした・・・
名前を修正のみして試しておりました・・・
修正後、当エラーは出なくなりました。ありがとうございます。
しかし、SQL実行文でエラーが出ます。
Microsoft VBScript 実行時エラー (0x800A01A8)
オブジェクトがありません。: 'SELECT A.* FROM (A_n'
エラーが出ているのは下記文です。
gaiqerRec.Open gaiqerSQL,objConn,adOpenStatic
よろしくお願いいたします。
No.7
- 回答日時:
#2です。
間違いが2点(1)WHR = ""
WHRは使っていないので、削除してください。
(2)If Area <> "" Then SQL = SQL & " And "
地域と職業はORでしたね。以下のように訂正してください。
If Area <> "" Then SQL = SQL & " OR "
あと、地域と職業の属性は何ですか?(文字型 OR 数値型)
この回答への補足
何度もアドバイスありがとうございます。
修正させていただきました。
地域と職業の属性は両方とも文字型です。
よろしくお願いいたします。
No.8ベストアンサー
- 回答日時:
#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 にしているだけです)
本当に何度もありがとうございます!
正常に動作いたしました!!
すごい凡ミスですね・・・
いつから変更し間違えてたのかすら・・・
本当にありがとうございます。
LEFT JOIN 、INNER JOIN まだまだ勉強が必要ですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのテーブルを解除する...
-
Excel複数シートをaccessへ一括...
-
他のMDBのテーブルに追加したい
-
【ADO】「Execute」を使うと...
-
Accessで別mdbのテーブルをコピー
-
DataGridViewで変更した値を反...
-
ExcelVBAからAccessMDB内のテー...
-
COBOLのINVALID KEYが理解でき...
-
『列名 '担当者CD' があいま...
-
VBとアクセスでSQL文に変...
-
VB.NET データセットとADOレコ...
-
DAOでフィールドのデータ型を変...
-
AccessからExcelへエクスポート...
-
SQLを発行とは?クエリの作成と...
-
WORD VBA プログラム修正をお願...
-
★クリスタルレポートの元になる...
-
DataGridの中身をDataSetにテー...
-
手動または分散トランザクショ...
-
CSVファイルのエクスポートでソ...
-
ACCESS2010 実行時エラー 2766
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WORD VBA プログラム修正をお願...
-
VBとアクセスでSQL文に変...
-
Accessで別mdbのテーブルをコピー
-
『列名 '担当者CD' があいま...
-
他のMDBのテーブルに追加したい
-
ExcelVBAからAccessMDB内のテー...
-
手動または分散トランザクショ...
-
SQLを発行とは?クエリの作成と...
-
DataGridViewに複数テーブルの...
-
CSVファイルのエクスポートでソ...
-
AccessからExcelへエクスポート...
-
エクセルのテーブルを解除する...
-
Excel複数シートをaccessへ一括...
-
HTMLのテーブルの行数が多くな...
-
COBOLのINVALID KEYが理解でき...
-
アクセステーブル、リンクとロ...
-
ACCESSのテーブル名をリストに...
-
ACCESS2010 実行時エラー 2766
-
DataGridの中身をDataSetにテー...
-
【ADO】「Execute」を使うと...
おすすめ情報