ASP(VBScript)でACCESSデータベースを操作する際のエラーについて
- ASP(VBScript)からAccessデータベースのデータを表示させるWEBアプリケーションを作っている際、特定のフィールドがWHERE句に入るとエラーが発生する問題が発生しています。
- フィールドの中にある特定の値でクエリを組み立てることはできるが、sectionとgroupのフィールドがWHERE句に入るとエラーが発生するようです。
- 問題の原因が分からず困っているので、ASP(VBScript)でAccessデータベースを操作する際のエラーについて知識のある方からのアドバイスを求めています。
- ベストアンサー
ASP(VBScript)からACCESSデータベースを操作
WEBページのフォームに入力された値からクエリを組み立てて、ASP(VBScript)からAccessデータベースのデータを表示させるWEBアプリケーションを作っているのですが、WHERE句に特定のフィールドが入った時にだけ、必ずエラー終を起こしてしまい、困っています。 ID address first_name last_name department section group type というフィールドがあって、typeはブール型、IDは数値型、それ以外はテキスト型です。 例えば、 SELECT * FROM memberlist WHERE type=true AND department='営業部' AND first_name LIKE '%山%' ORDER BY ID なら、営業部で苗字に「山」を含むレコードが取得できますが、 SELECT * FROM memberlist WHERE type=ture AND section='営業推進課' ORDER BY ID や、 SELECT * FROM memberlist WHERE type=true AND group='管理係' ORDER BY ID など、section と group のフィールドがWHERE句の中に入ったらエラーになります。 何が原因なのか全く分からず、困っております。 対処法をご存知の方がいらっしゃいましたら、ご教授ください。 宜しくお願い致します。
- seventhang
- お礼率40% (11/27)
- Microsoft ASP
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは ANo.1です >Accessの予約語ということでしょうか? http://support.microsoft.com/kb/286335/ja これ↑ によると 「section」「group」「type」は予約語でしょうか? >予約語の可能性も考えて、フィールド名変更も試したのですが、うまくいきませんでした うーん、私の環境では、動くんだけど ^^; とりあえず、これ↓は動かないけど ^^ >SELECT * FROM memberlist WHERE type=ture AND section='営業推進課' ORDER BY ID type=ture → type=true だから
その他の回答 (1)
- Rel
- ベストアンサー率70% (7/10)
はじめまして Access の予約語でしょうか? フィールドの「group」、「section」の名前を変えてみたらどうでしょう? または、[]でくくるとか? SELECT * FROM memberlist WHERE type=ture AND [section]='営業推進課' ORDER BY ID SELECT * FROM memberlist WHERE type=true AND [group]='管理係' ORDER BY ID 今後どんなエラーが出るか判らないので、名前変更が良いと思いますが...
お礼
ありがとうございます。 予約語の可能性も考えて、フィールド名変更も試したのですが、うまくいきませんでした。 ご回答の通り、[]でくくるとエラーを起こさず、レコードを取得できました。 []でくくらなかった場合に表示されるエラーですが、 エラー:80004005 と表示されるだけです。 []でくくるとうまくいったということは、やはりAccessの予約語ということでしょうか?
関連するQ&A
- SQLの書き方を教えて!
select name,SUM(kingak) from where date between 150221 and 150320 group by frjpc.trcd のようにSUMで集計を行うSQLを発行する時に,同時にkingak順にsortすることは可能なのでしょうか? select name,SUM(kingak) from where date between 150221 and 150320 group by frjpc.trcd order by SUM(kingak) としたいところですが,これではエラーになりますね。 SQLでは解決できないんでしょうか?
- ベストアンサー
- その他(データベース)
- SQL文作成のお願い
前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?
- ベストアンサー
- PostgreSQL
- データを昇順に並べるには
$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku where"; と書いてDBから正常にデータが取得できています。これを (1)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku order by kakaku"; (2)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku order by kakaku asc"; (3)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku [where where_definition] order by kakaku";(このやり方はPHPプロというサイトで教えてもらいました) これら三つどれを書いてもエラーになります。どうしたら良いでしょうか??
- ベストアンサー
- PHP
- 重複データからの取得方法を教えてください
id s_no s_name ---------------- 1 001 aaaa 2 005 bbb1 3 005 bbb2 4 002 cccc 5 005 bbb3 6 005 bbb4 上のものがテーブルの内容です。取得したい結果が ---------------- 1 001 aaaa 4 002 cccc 5 005 bbb3 です。 試したSQLは select distinkd on (s_no) id,s_name from shain where id>=5 order by id desc select id,s_no,s_name from shain where id>=5 group by s_no order by id desc などです。 データベースがmdbなのでdistinkd onは使えませんでした。 もしかすると書式が違うのでしょうか?
- 締切済み
- その他(データベース)
- select文でGROUP BYの正しい使い方
下記のselect文は問題ないでしょうか?テーブルには5つのフィールド(id,name,age,gender,office)が存在します。 select * from テーブル名 where age >= '40' GROUP BY gender 実際に試したところ、うまく動いているのですが、GROUP BY句で指定されたフィールド名はSELECT句のフィールド指定をすべて含んでいなくてはならないと書かれているのを見つけました。 上記のselect文は正しいのでしょうか。
- ベストアンサー
- PHP
- Oracle8のトップN解析
質問させていただきます。 Oracle8iの場合、トップN解析ということで select id, name from (select id, name from tmp order by id desc) where rownum <= 3; というSQLを作成してidを前から3つだけ検索できますが、 Oracle8の場合、インラインビューでの[order by]が 無効なので、困っています。 よければ、ほかの方法はないものでしょうか?
- 締切済み
- その他(データベース)
- よければ教えて頂きたいです。
先ほど教えて頂いた 'SELECT kid,id,name,day,tday FROM em WHERE kid='.$_SESSION["kid"].' AND (name,day) IN (SELECT name,MAX(day) FROM em GROUP BY name)'; だと正常に表示されましたが指摘通り最大値が同じ日があれば二つ表示されるのを防ぐためスタート時間も加えてみました。 'SELECT kid,id,name,day,tday,st FROM em WHERE kid='.$_SESSION["kid"].' AND (name,day,st) IN (SELECT name,MAX(day),MAX(st) FROM em GROUP BY name)'; stという部分です。これを加えたところ、一つの名前が表示されなくなりました。 表示されなくなったデータと他のデータを比べても差異がないので、原因がよくわからないのですが、。。
- ベストアンサー
- PHP
- サブクエリに関して()
$sql2 = 'SELECT ki,id,name,day,tday,st FROM tim WHERE (ki,name,day,st) IN (SELECT ki,name,day,max(st) FROM tim WHERE (ki,name,day) IN (SELECT ki,name,MAX(day) FROM tim where ki='.$_SESSION['ki'].' GROUP BY id) group by id)' ; IDごとにカラムday,stの最大値を出力するもです。(以前おしえていただきました) これに更にsvの最大値も条件にいれたい場合どうしたらいいでしょうか?;
- 締切済み
- PHP
- ROW_NUMBER()を使用したデータ取得
ROW_NUMBER()を使用してORDERした結果の5行目から10行目を 取得したい場合、どこのサイトを参照しても下記(1)のように NOで並び替えたデータをインラインビューとして WHERE RNUM BETWEEN 5 AND 10 と条件を絞っていますが、(2)のように直接条件を指定した場合と どのような違いがあるのか教えてください。 (1) SELECT NO, NAME FROM ( SELECT NO, NAME, ROW_NUMBER() OVER (ORDER BY NO) RNUM FROM ROWNUM_TEST ) WHERE RNUM BETWEEN 5 AND 10 (2) SELECT NO, NAME,ROW_NUMBER() OVER (ORDER BY NO) RNUM FROM ROWNUM_TEST WHERE RNUM BETWEEN 5 AND 10
- 締切済み
- Oracle
- クエリの遅さの原因
下記のクエリーをそれぞれ試してみたところ、圧倒的に下の方が遅くなってしまいました。 $rs = mysql_query("select * from A INNER JOIN B ON B.cat = A.id order by B.id desc LIMIT 1, 10 ;",$con); $rs = mysql_query("select * from A INNER JOIN B ON B.cat = A.id where B.name is not null group by B.area order by B.id desc LIMIT 1, 10 ;",$con); where B.name is not null group by B.area この処理はそれほど負荷が掛かってしまうのでしょうか。 他に良い書き方(方法)がありましたら教えてください。
- ベストアンサー
- MySQL
お礼
こんばんは。 ご回答ありがとうございます。 確かに、リストの中にありますね。 勉強不足ですみません。 > type=ture → type=true だから これは転記ミスでした。 とりあえず、現在は問題なく動いている様子ですので、質問は締め切りとして、勉強することにしたいと思います。 ありがとうございました。