はじめに

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

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

2020年11月26日木曜日

VBA : SQLSelectSelected マクロ : バインド変数対応

 すでに公開した、Excel のみで SQL を実行できる、自画自賛の SQL 検証ツールだ。

 今回は、実行する SQL文でバインド変数を使えるように改修してみたぞ。

 

 ex.

   while sheet1@テストマスタ.項番 = sheet2%param1

   

 sheet2 の任意セルに、範囲がsheet2の"名前" を定義すれば、当該セルの内容を param1 として SQLに渡すことができる

 

 注意点

 ・範囲がブックの"名前"は処理されない

 ・テーブル名と同様に、SQL文と同一シートにある"名前"はシート名を省略して記載できる

   ... sheet1 の SQL で sheet1 の"名前" param2 を使う ⇒ "sheet1%param2" or "%param2"

 

 ・"名前"のセル範囲中、左上のセルの値が受け渡される

 ・"名前"の示すセルの表示形式が文字列(@)の場合、SQLにはシングルクォート(')の引用符が自動付加される

 

 以下、バインド変数を付加し、リテラルの確認を付加したSQLのサンプルだ

 

 select 本人.項番

  ,本人.氏名 as 本人氏名

  ,家族.*

  ,'123abc' as リテラル

  ,"123abc" as リテラル2

 from sheet1@testtable as 本人

 INNER JOIN sheet2@家族 as 家族

 on 本人.項番 = 家族.社員番号

 where 本人.項番 = '1'

 and 家族.項番 > sheet1%param1

 

 

 バインドに直接関係ないが、本マクロSQLやExcelSQLの文法上の制限をまとめた

 本マクロのSQL文法は、ExcelSQL文法(AccessSQL)にテーブル名指定法とバインド変数指定法を拡張したものだ

 

 ・本マクロのSQL文法/テーブル指定法

     [<シート名>]@<excelテーブル名>

 

 ・本マクロのSQL文法/バインド変数指定法

     [<シート名>]%<シート範囲の"名前">

 

     シート名、テーブル名は半角英数、全角カタカナひらがな漢字、半角アンダーバーが使用できる

     全角認識はアバウトなので許してくれ

 

 ・ExcelSQL文法/変数型

     基本的にバリアント型なので、数値のように扱えば数値、文字のように扱えば文字としてふるまう

     しかし、SQL中にリテラルを記述する場合、明確に文字列として記載するので、テーブル項目側も型を明確にする必要がある

     具体的には、Excelテーブル(表組)中で文字列として扱う項目のデータは、表示形式を文字型に設定しなくてはいけない

     

     1.バリアントのままSQLで使用する場合

         data = ABC

         

     2.文字型であることを明確にする場合

         data = 'ABC' または data = "ABC"

         

 ・ExcelSQL文法/引用符

     ダブル/シングルクォート("),(')のどちらでも使用できるが、文字列型バインド変数の場合シングルクォートを付加している

     ただしセル中では先頭のシングルクォートは非表示となり、実際のデータからも排除される

     先頭にシングルクォートを記載しなくてはいけない場合、手前に1文字の半角スペースを付加して、シングルクォートが消えないように留意しろし


Ora2MsSQL.bas ※2020/11/27更新

SQL.bas ※2020/11/27更新

 

0 件のコメント:

コメントを投稿