質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.37%

Access ADO接続 実行時エラー「キーワード’WHERE'付近に不適切な構文があります」

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 8,768

nekomura

score 132

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

Accessのフォーム上のボタンイベントで、SQLserverよりテーブルデータを取得するイベントプロシージャを書いています。
しかし、実行時エラーが起きてしまい、下記コードの

Rs.Open strSQL, Cn, adOpenForwardOnly, adLockReadOnly


に黄色のカーソルがフォーカスされます。

エラー内容は、
「実行時エラー'2147217900(80040e14);
キーワード'WHERE'付近に不適切な構文があります。」

でした。

原因及び修正方法が調べても特定できません。
有職者の皆様にお知恵をいただきたく存じます。

Private Sub クエリ取得_Click()

    Dim Cn As New ADODB.Connection
    Dim Rs As New ADODB.Recordset
    Dim strSQL As String
    Dim strConnectionString As String  'SQLServer接続文字列


    strConnectionString = CStr(DLookup("connectionString", "接続文字列テーブル", "ID= 2"))
 //Access自身のテーブルに、接続文字列を入れて、その値を変数に代入しています

    strSQL = "SELECT * FROM Q_m_kokyaku_shohin"
    strSQL = strSQL & "  WHERE Q_m_kokyaku_shohin  like '*%'"

    Cn.ConnectionString = strConnectionString
    Cn.Open
    Rs.Open strSQL, Cn, adOpenForwardOnly, adLockReadOnly //エラーのデバッグポイントはここ

    Set Me.Recordset = Rs


    '    Rs.MoveFirst
    '    Do Until Rs.EOF
    '
    '
    '    Rs.MoveNext
    '    Loop


    Rs.Close
    Cn.Close

    Set Rs = Nothing
    Set Cn = Nothing



End Sub

また、「Q_m_kokyaku_shohin」は、クエリです。
ODBCでSQLserverより接続したリンクテーブルを、二つ使用して作っています。

このクエリをの全データの中から、任意の一文字の前方一致検索に対応するデータを
取得したい
です。

また、初めの一文字はユーザーが入力する任意の値を想定している為、「*」を使用しています。
こちらも何か問題のある記述でしょうか。。。
ネットで調べると、「初めがAの前方一致検索」など、特定のを使う方法しか出てこないもので…。
細かい部分の記述の仕方がわからず困っています。
どうかお知恵をお貸しください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • A-pZ

    2016/05/09 18:57

    strSQL = sSql & " WHERE Q_m_kokyaku_shohin like '*%'" の部分、sSqlは、strSQLではないでしょうか。

    キャンセル

  • A-pZ

    2016/05/09 19:00

    連投申し訳ありません。SQL文にて、SELECT * FROM Q_m_kokyaku_shohin WHERE Q_m_kokyaku_shohin like ... となっており、検索するテーブル名とカラム名が全く同じ、であっていますでしょうか。

    キャンセル

  • nekomura

    2016/05/10 10:41

    A-pz様
    >sSqlは、strSQLではないでしょうか。
    おっしゃるとおりでした。ご指摘に感謝いたします。

    >SELECT * FROM Q_m_kokyaku_shohin WHERE Q_m_kokyaku_shohin like ... となっており、検索するテーブル名とカラム名が全く同じ、であっていますでしょうか。
    テーブル名とカラム名は異なりますが、すべてのカラムを取得後一覧表示したく、このように表記していました。
    誤りであればご指摘いただきたく存じます。
    返信が少々遅れて失礼いたしました。
    ご回答いただければ幸甚です。

    キャンセル

回答 3

+2

現時点では、
エラーが起きて困っている ⇒ ソース提示して原因を教えてください
という丸投げ状態の質問になってしまっているので的確な回答がつけられません。

エラー状況の説明はたくさん記載してくれているし、自分で調べたけどわからない
ということなので自分は丸投げとは取りませんが、回答に必要な情報が不足しています。

なにをしたいSQLなのか?
・どのテーブルから、どのカラムを、どんな条件で抽出したいのか
の説明さえあればすぐに的確な回答がつくと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/10 10:56

    jawa様
    的確なご指摘ありがとうございます。
    早速本文内容も修正をしようと思います。

    >・どのテーブルから、どのカラムを、どんな条件で抽出したいのか
    ODBCでSQLserverより接続したリンクテーブルを、二つ使用して作ったクエリが
    Q_m_kokyaku_shohinです。
    このクエリをの全データの中から、任意の一文字の前方一致検索に対応するデータを
    取得したいです。
    また、初めの一文字はユーザーが入力する任意の値の為、「*」を使用しています。
    こちらも何か問題のある記述でしょうか。。。
    ネットで調べると、「初めがAの前方一致検索」など、特定のを使う方法しか出てこないもので…。
    お返事が遅くて失礼いたしましたが、ぜひ今一度お教えをいたければ幸甚です。

    キャンセル

checkベストアンサー

+1

Q_m_kokyaku_shohinがクエリー名だとすると、
LIKEの対象はそのクエリーに含まれるフィールド名(カラム名)でなければならないはず。
WHERE Q_m_kokyaku_shohin.field_a LIKE '*%'みたいな。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/10 11:35

    m6u様
    ご回答ありがとうございます。
    当該エラーは出なくなりました!

    別のエラーが出るようになってしまいましたので、また同内容で質問を新たに上げる予定です。
    またご教示をいただければ幸いです。

    キャンセル

+1

strSQL = "SELECT * FROM Q_m_kokyaku_shohin"
strSQL = sSql & "  WHERE Q_m_kokyaku_shohin  like '*%'"


Q_m_kokyaku_shohin:テーブル名ですか?フィールド名(カラム名)ですか?
           私自身は、この様な名付けはしないので。
文字列の中に、全角スペースが居たりしませんか?
可能であれば、
SELECT * 
は使わずに、フィールド名を書出して使用します。

  • では、フィールドの順番は保証されません。

    投稿してから、情報の追加・修正の依頼をする が、
    出ているのに気が付いたので、とりあえずこのまま。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/10 10:47

    daive様
    ご指摘ありがとうございます。
    返答が遅れましたが、再度ご回答いただければ大変ありがたく存じます。
    >Q_m_kokyaku_shohin:テーブル名ですか?フィールド名(カラム名)ですか?
    これは、ODBCでSQLserverより接続したリンクテーブルを、二つ使用して作ったクエリです。(後ほど質問内容を訂正いたします。わかりづらくて申し訳ありませんでした。

    >SELECT *
    >は使わずに、フィールド名を書出して使用します。
    select カラム名,カラム名,…
    としていくということでしょうか?

    何度もお手数をおかけいたしますが、ご教示いただければ幸いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る