パソコン情報

【Access】VBA内のSQLで抽出後更新すると「抽出条件でデータ型が一致しません」

rakuten_design="slide"; rakuten_affiliateId="0f23ea38.2569a462.0f23ea39.89564f16"; rakuten_items="ctsmatch"; rakuten_genreId="0"; rakuten_size="600x200"; rakuten_target="_blank"; rakuten_theme="gray"; rakuten_border="on"; rakuten_auto_mode="on"; rakuten_genre_title="off"; rakuten_recommend="on"; rakuten_ts="1786427094851";

VBA内でSQLを使って抽出後更新するというシンプルな処理に、

ココに注意

「抽出条件でデータ型が一致しません」

っとなって中々先に進めませんでした。

いつものように、カンマやダブルコーテーションの問題になるのですが、過去の備忘録にもない方法だったので追加備忘録です。

文字列か数値かで記述が違う

過去の備忘録から文字列か、数値かで書き方が違う事は知っていましたので、表示上は数値ですが、文字列フィールドになっていることは分かっていました。

参考
【緊急報告】このブログサイトでも「次へ」からサポート詐欺へ誘導事例確認

当ブログのGoogleアドセンス広告内で「次へ」「表示」ボタンを悪用したサポート詐欺への誘導を確認。詐欺画面が表示された際の正しい対処法(ブラウザ閉じる等)と、ブログ運営者側で行う広告レビューセンターでのブロック手順を解説します。

続きを見る

 

文字列でのSQLでの抽出なので下記のようにしました。

SQL = "SELECT * FROM dbo_order WHERE arrange_date = " & Me!arrange_id & ""

 

「抽出条件でデータ型が一致しません」

となりました。

debug.print SQL で確認すると、

SELECT * FROM dbo_order WHERE arrange_date = 20200806113923

 

となっています。

ちゃんと数値も入って検索できるはずだと思いますが、何で???

 

試しに、数値型で実行しても同じエラーで先に進めません。

SQL = "SELECT * FROM dbo_order WHERE arrange_date = " & arrange_id

結局、今回はシングルコーテーデョン

結局今回は、シングルコーテーションを入れることで回避できました。

 

SQL = "SELECT * FROM dbo_order WHERE arrange_date = '" & arrange_id & "'"

'" & arrange_id & "'"

という感じですね。

同じく

debug.print SQL で確認すると、

SELECT * FROM dbo_order WHERE arrange_date = 20200806113923

エラーが出た時と同じじゃねぇ!

 

ココがポイント

デバッグでの表示内容は、同じなのに、エラーがでる場合と出ない場合との違いがある

のです。

次から無駄な時間をかけないように、この方法も備忘録に残しておきます。

 

 

追記)カンマやらダブルコーテーションやら???

ちょっとしたことで抽出されなかったり検索されない事があるので、都度、この下に遭遇した時に追記していきます。

※抽出や検索コードでうまく行ったものだけを記載しています。

 

rs.Filter = "NO = " & NO_edit

SQL = "SELECT * FROM dbo_message WHERE dbo_message.NO = " & Forms![message]![no]