プロが教える店舗&オフィスのセキュリティ対策術

システム:
Microsoft Windows XP
Professional
Version 2002
Service Pack 3

データベース:
Microsoft(R) Access 2000

言語:
Microsoft Visual Basic 6.0
For 32-bit Windows Development

で、以下のSQLを実行すると、実行時エラー'3075'が発生します。
xSQL1 = xSQL1 & " WHERE ((条件2 = '1' OR 条件3 = '1') "
xSQL1 = xSQL1 & " AND (((int(使用現場数) >= 2) "
xSQL1 = xSQL1 & " OR ((使用現場数 = '1' AND 調査年数 >= '1' "
xSQL1 = xSQL1 & "AND ((最新の場所 in ('自社倉庫','自社空地','貸倉庫','借地','その他')))"
xSQL1 = xSQL1 & "OR ((処分日 is not null) or 処分日 <> """")) ))"
xSQL1 = xSQL1 & " AND (機械コード番号2 = '4401' OR 機械コード番号2 = '4402'"
xSQL1 = xSQL1 & " OR 機械コード番号2 = '4702' OR 機械コード番号2 = '4703'"
xSQL1 = xSQL1 & " OR 機械コード番号2 = '4704' OR 機械コード番号2 = '4705'"
xSQL1 = xSQL1 & " OR 機械コード番号2 = '4706' OR 機械コード番号2 = '4707'"
xSQL1 = xSQL1 & " OR 機械コード番号2 = '4708' OR 機械コード番号2 = '4709'"
xSQL1 = xSQL1 & " OR 機械コード番号2 = '4710' OR 機械コード番号2 = '4713'"
xSQL1 = xSQL1 & " OR 機械コード番号2 = '4309' OR 機械コード番号2 = '4701'))"
xSQL1 = xSQL1 & " OR (((int(使用現場数) >= 3)"
xSQL1 = xSQL1 & " OR ((使用現場数 = '2' AND 調査年数 >= '1'"
xSQL1 = xSQL1 & " AND ((最新の場所 in ('自社倉庫','自社空地','貸倉庫','借地','その他')))"
xSQL1 = xSQL1 & " OR ((処分日 is not null) or 処分日 <> """")) ))"
xSQL1 = xSQL1 & " AND (機械コード番号2 <> '4401' AND 機械コード番号2 <> '4402'"
xSQL1 = xSQL1 & " AND 機械コード番号2 <> '4702' AND 機械コード番号2 <> '4703'"
xSQL1 = xSQL1 & " AND 機械コード番号2 <> '4704' AND 機械コード番号2 <> '4705'"
xSQL1 = xSQL1 & " AND 機械コード番号2 <> '4706' AND 機械コード番号2 <> '4707'"
xSQL1 = xSQL1 & " AND 機械コード番号2 <> '4708' AND 機械コード番号2 <> '4709'"
xSQL1 = xSQL1 & " AND 機械コード番号2 <> '4710' AND 機械コード番号2 <> '4713'"
xSQL1 = xSQL1 & " AND 機械コード番号2 <> '4309' AND 機械コード番号2 <> '4701'))))"

何がおかしいのでしょうか?
ご教授願います。

A 回答 (4件)

SQLステートメントの末尾の閉じ括弧”)”が1つ多くないですか?

    • good
    • 0
この回答へのお礼

すみません。おっしゃる通り")"を1つ削ったら上手く動きました。
こんな初歩的なミスをおかして、お騒がせして申し訳ございませんでした。
皆様、本当にアドバイスありがとうございました。

お礼日時:2011/02/09 16:05

最近、Access は、いじっていないので、明確なことは、言えませんが、参考までに投稿してみます。



>> accessでSQLを実行してみたところ、『演算子がありません』とのエラーメッセージが表示されました。
との、コメントですが、

xSQL1 = xSQL1 & " OR ((使用現場数 = '1' AND 調査年数 >= '1' "
← この部分で、'1' を、' で、くくっていますが、[調査年数]フィールドの型は、文字列ですか ?
つまり、「1」の文字より大きい値を、判断させているような気がします。

xSQL1 = xSQL1 & "OR ((処分日 is not null) or 処分日 <> """")) ))"
← この部分で、[処分日]フィールドのNull値を判断させているようですが、[処分日]フィールドの型は、文字列ですか ?
気持ちは、解りますが、「処分日 <> """"」のような SQL の記載方法で、小生自身、以前、失敗した経験があります。

あと、各々のフィールドの型は、未明ですが、フィールドの型と、判断させる値の型は、一致してますか?

最後に、小生自身、エックス線管の名版作成の歳、Access をデータベースに利用した経験があります。
その際、テーブル名称とフィールド名称を日本語の文字を利用した際、[]で、くくると、うまく動作したことがありました。

的が、外れていたらごめんなさいね。

-以 上-
    • good
    • 0

実行時エラー'3075'で検索すれば、SQLの文法が間違っているという


レベルで共通だけど、その原因は複数あることが分かります。
Access のエラーメッセージが返ってきたのをそのまま表示している
だけだと思われるので、エラーメッセージに日本語で原因を書いて
くれてませんか?
「クエリー式'XXX'の文字列の構文エラーです」とか
「演算子がありません」とか。
それに合わせて修正したらいいと思います。

実際に実行されているSQL(提示のものは条件句のみですよね?)
をテキスト出力して、Accessで直接実行してみて下さい。
その時点で動かないはずです。

この回答への補足

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

accessでSQLを実行してみたところ、『演算子がありません』とのエラーメッセージが表示されました。ですが、演算子が足りない箇所はないように見えるのですが。。

ちなみに、vbでのエラーメッセージが表示されるダイアログボックスにメッセージが入りきっていないのですが、どうすればすべてのエラーメッセージを読めるのでしょうか?

基本的なこともわかっていなくて申し訳ないのですが、ご回答をお願い致します。

補足日時:2011/02/09 11:34
    • good
    • 0

実行時エラー'3075'が具体的に何を表すかは不明です。


(おそらくSQL文の構文エラー関係のエラーと思われる)

処理日のデータ型が何かわからないが、その比較文は正しいのでしょうか?

この回答への補足

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

以前は、以下のSQLを実行していましたが、上手く動作していましたので、処分日の比較は正しいと思います。


xSQL1 = ""
xSQL1 = "SELECT * "
xSQL1 = xSQL1 & " FROM 金額表示一覧表"
If FrmHikaku.Chk_genba Then
xSQL1 = xSQL1 & " WHERE (条件2 = '1' OR 条件3 = '1') "
xSQL1 = xSQL1 & " AND (使用現場数 >= '1' AND 調査年数 >= '1') "
Else
xSQL1 = xSQL1 & " WHERE (条件2 = '1' OR 条件3 = '1') "
xSQL1 = xSQL1 & " AND ((int(使用現場数) >= 2) "
xSQL1 = xSQL1 & " OR ((使用現場数 = '1' AND 調査年数 >= '1' "
xSQL1 = xSQL1 & "AND ((最新の場所 in ('自社倉庫','自社空地','貸倉庫','借地','その他')))"
xSQL1 = xSQL1 & "OR ((処分日 is not null) or 処分日 <> """")) ))"
End If

すみませんが、ご回答をお願い致します。

補足日時:2011/02/09 09:22
    • good
    • 0

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