よろしくお願いいたします。
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
現時点では、
エラーが起きて困っている ⇒ ソース提示して原因を教えてください
という丸投げ状態の質問になってしまっているので的確な回答がつけられません。
エラー状況の説明はたくさん記載してくれているし、自分で調べたけどわからない
ということなので自分は丸投げとは取りませんが、回答に必要な情報が不足しています。
なにをしたいSQLなのか?
・どのテーブルから、どのカラムを、どんな条件で抽出したいのか
の説明さえあればすぐに的確な回答がつくと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
+1
Q_m_kokyaku_shohinがクエリー名だとすると、
LIKEの対象はそのクエリーに含まれるフィールド名(カラム名)でなければならないはず。
WHERE Q_m_kokyaku_shohin.field_a LIKE '*%'
みたいな。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
strSQL = "SELECT * FROM Q_m_kokyaku_shohin"
strSQL = sSql & " WHERE Q_m_kokyaku_shohin like '*%'"
Q_m_kokyaku_shohin:テーブル名ですか?フィールド名(カラム名)ですか?
私自身は、この様な名付けはしないので。
文字列の中に、全角スペースが居たりしませんか?
可能であれば、
SELECT *
は使わずに、フィールド名を書出して使用します。
- では、フィールドの順番は保証されません。
’
投稿してから、情報の追加・修正の依頼をする が、
出ているのに気が付いたので、とりあえずこのまま。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
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 ... となっており、検索するテーブル名とカラム名が全く同じ、であっていますでしょうか。
テーブル名とカラム名は異なりますが、すべてのカラムを取得後一覧表示したく、このように表記していました。
誤りであればご指摘いただきたく存じます。
返信が少々遅れて失礼いたしました。
ご回答いただければ幸甚です。