はじめに

多量の行が表示されないように、このブログは1コンテンツしか表示されない。ブログアーカイブから、他の記事を捜してくれ。

環境作れし。
・gawk 3.1.5 for Windows をググッて入手。
・gawk.exeをpathの通ったフォルダにぶち込めし。
 (「windows パスを通す」ググッて)
 (面倒なら、C:\windowsにぶち込む)
・環境変数「awkpath」にスクリプトを保存するフォルダを設定。
 (「環境変数 設定 windows」ググッて)
 (面倒なら、C:\windowsに、紹介されているスクリプトぶち込む)

2020年11月18日水曜日

VBA : Oracle2MsSQL : Oracle⇒Access SQL変換ワークシート関数

300ステップに近い大物マクロだぞ。

セル範囲をパラメタにして、変換結果を返す関数だ。

「なんちゃって変換」なので、変換できない文もあるぞ。

変換作業の一次変換だと割り切って使ってくれ。

以下のOracle関数、Oracle文に対応している。


SUBSTR ⇒ mid

LENGTH ⇒ len

SYSDATE ⇒ now

TO_NUMBER ⇒ CInt

  単純置換。


TO_CHAR ⇒ str

  数値から文字への変換のみ対応。日付のTO_CHARはNG


NVL ⇒  iif

  iif関数にパラメタ追加し変換

  

DECODE ⇒ iif

  iif関数の入れ子に変換

  

CASE ⇒ iif

  iif関数の入れ子に変換

  "CASE WHEN xxx=yyy" , "CASE xxx WHEN yyy" 両方に対応。

  CASE文の入れ子も変換できるが、そもそもそんな汚いSQL書くなし。


いずれかの変換で誤変換される場合、内部関数、Ora2MsSqlText中にフラグがあるので、false立てて機能を切ってくれ。


Macroのつぼ
「VBAのバグじゃね?」と、思わずヒイたぞ。
例えば、For i = 10 to 0 Step -1 のループ中で、添え字"i"を11に変えてループ継続させてみた。
※ループ中特定条件で、ループを最初からやり直す処理だな。
ループのNext前処理として、Step -1 が実行され、i=10で実行されるところ、i=11のままだった。
※2020/11/20 最適化したので、ループ添え字書き換えロジックは排除された
 
Forループの中で、脱出条件やループ添え字を変えるような、汚いことはするなというMSのお達しだ。
当該処理にはdo,while,until,loopを使えし。CASE文の変換はOSのメモリ状態次第で、数秒~数十秒掛かる場合があるぞ。
1ブックにこの関数を多用すると再描画でもどってこないから気を付けろし。

ソースコードに "OR2MSSQL.bas" とか名前を付け保存し、XLMS(マクロ対応ワークブック)のVBAエディタからインポートしてくれ。

※2020/11/19 最適化の為一部修正 
 

0 件のコメント:

コメントを投稿