SQLite3でのUPDATE FROM
あーなんかUPDATE FROMの文法でSQL書きたいなー
って日がたまにありますよね。
嘘です。
この度、SQLite3のバージョン3.33から、
UPDATE FROM が使えるようになったそうなので
遊びでさわってみました。
やっぱりゾロ目はいいですね。
(すでにバージョン3.34になってましたが)
で、先に結論を書いておくと、できなかった!という内容になります。
試したことを書いているので、詳しい方どなたか教えてください!!
環境の話
さて、まずは以前から触っていた環境説明から。
というほどでもないのですが、念のため書いておきます。
1.Windows 10
2.Excel 2016(マクロ起動でDB操作)
3.SQLite3 バージョン3.34
4.ODBCデータソース(64ビット) ← よく分からない
5.A5:SQL Mk-2 Version 2.15.0
で、実行してます。
処理内容
まず、やりたいSQLを簡略して書くと…
UPDATE
tableA
SET
columnA = tableB.columnB
FROM (
SELECT
columnKey
, tableC.columnC + tableD.columnD AS columnB
FROM
tableC
, tableD
WHERE
省略
) AS tableB
WHERE
省略
AND tableA.columnKey = tableB.columenKey
こんな感じで、UPDATE FROM の形です。
で、こんな感じのSQLをExcelのシートに入力された内容に応じて、
マクロがinsertやら、updateやらを実行してくれる系のものがあったりします。
A5での動作確認
マクロを起動してできたSQLをまずはA5で実行。
実行前にA5の参照しているSQLite3.dll を差し替え忘れずにね!
で、既存のDBファイルの差し替え方が分からず・・・
まあいいやと、create table 等のSQLは残してあったので、
新規でDB作成+テーブル作成でDBファイルごと差し替えてしまった。
で実行したところ・・・
無事想定通り更新ができていた!
VBAでの動作確認
じゃあ早速マクロに組み込んで実行したところ、
near"FROM": syntax error(1)
あら、FROM 前後にスペース入れ忘れ(SQL動的作成あるある)か?と思ったが、違う様子。。。
試しに、debug.printにて出力した結果をA5にて実行したところ、
あれーうまく出来てるぞと・・・
VBAで実行しているSQLite3.dllを探して
あぁ、VBA側のSQLite3.dll差し替えてないじゃん!
おじさん気づいちゃったよ。
と思い探してみたところ、どこや…?となり、
とりあえずパスが通っているところをかたっぱしから探したところ、
Cドラのある場所にいたので差し替え。
ダメでした。
うーん…!
!!
odbcデータソース経由してるから、そっちの参照先か!
と思いましたが、それっぽいものは見当たらず。。
google先生にも聞いてみましたが、残念ながら記憶の奥底にしまってしまった様子。
私では探しだせませんでした。
結局
大人を舐めるなよ!!と言わんばかりに旧スタイルのSQLをマクロに実装。
ちょっと切なくなった夜でした。
どなたかVBAとSQLite3の関係を教えてください。
~雑談~
切なくなった日は「Can't take my eyes off you」を見て元気を出してます。
皆さんもぜひ!