ExcelSQLServerツール

テーブル定義を登録したExcelワークブックからスクリプト等を作成します。
機能を集約することができました。   前項の「Excelテンプレート・アドイン作成」もそうですが、従来ExcelVBAで各ワークブックに仕込んでいた方法をやめて、VB.NETでのプログラムに集約させる作業をしていました。
このページの機能内容は「SQLServerテーブル定義ツール」としてExcelVBAのバージョンで紹介しているものとほぼ同等ですが、いろいろサブシステムが増えていくとワークブックも増えていってしまって、もしVBAのメンテが入った場合に煩雑になってしまいます。
Excel2003以前の「*.xls形式」の撤廃の作業に併せて、個々のワークブックに登録していたVBAを廃止し、VB.NETプログラムに集約移行させたものです。
ExcelVBAで説明している「SQLServerテーブル定義ツール」はいずれは廃止することになると思うので、重複する説明についても記述いたします。
これは「開発者」向けのツールと位置づけています。
Excelシート上でテーブル構成やフィールド定義を考えて登録できたら、実際のデータベース上に即座にテーブル構築ができたら便利だと思うのは誰でも同様だと思います。 ExcelVBAVB.NETを使って社内で必要な機能の実装ができる状況であれば、このことは痛感できると思います。

私の会社だけだとは思いませんが、何にしても「仕組み」を構築する時に事前にすべての要件が出そろうことはありません。 しかも社内製造でできるとなると、要件の揃え方に甘さがあっても後から変更できるという「甘え」も出るわけです。
従って、作成する「仕組み」も最初はプロトタイプであって、本番稼働させる仕組みの段階でやり直せるように考えて作成します。
データベースのテーブル定義も「テスト用データベース」と「本番データベース」が分かれていたり、やり直しがあったりするわけですから、定義書に従って誤りなく「やり直せる」仕組みが必要なわけで、 そういった要求にご利用いただけるのではないでしょうか。

本ツールを使用していただければ、Excelシート上でのテーブル構成やフィールド定義が作成・確認された時点ですぐに実際のSQLServer上のテーブルが作成できる段取りが可能となります。

このツールの機能は以下の通りです。
機能 内容
Excelの「SQLテーブル定義」の内容をチェックします。 項目名称、フィールドID、属性(データ型)の不揃いの他、属性(データ型)に対するサイズ、小数桁などの必要項目の指定有無などをチェックします。
※本機能の指定は必須となっています。
Excelの「SQLテーブル定義」に従ってSQLServer用のテーブル作成スクリプトを出力します。 実際のSQLServer上のテーブルを直接作成するものではなく、「CREATE TABLE」「CREATE INDEX」を含めたスクリプトファイルを出力します。
このスクリプトファイルを「Microsoft SQL Management Studio」上のクエリ画面で実行することによりテーブルが作成されるものです。
これにより、Excelの「SQLテーブル定義」と実際のSQLServer上の実際のテーブルと「同期」が取れているということを確保するのが目的です。
SQLテーブル定義」には該当データベースの全テーブルを登録するのが一般的だと思いますが、本プログラムでも登録されている全シート分のテーブル作成スクリプトが出力されます。 一部のテーブルのみの追加やフィールド追加の場合は出力されたスクリプトファイルをテキストエディタで編集してご利用下さい。
Excelの「SQLテーブル定義」に従ってVisualBasic(.NET)プログラムからSQLServerにアクセスする時の テーブル情報のソース記述をテキストファイルに出力します。 出力されるのは「テーブルID」の定数定義と「フィールドIDテーブル」「フィールド項目タイプテーブル」の定義記述です。
これらが「SQLテーブル定義」に従って出力されることにより、これらの利用プログラム側のテーブル内容と実際のSQLServer上の実際のテーブルと「同期」が取れているということを確保するのが目的です。

この機能を利用した使用サンプルとしては、Visual BasicSQLServerで試してみます。」をご覧下さい。 この利用ページはソースコードの記述がかなり長いのですが、例えば登録済のマスタ情報を呼び出して一部の項目を変更して再登録させる場合、 中段くらいにある「GP_MakeUpdateSqlS」「GP_MakeUpdateSqlH」プロシージャを見ていただくと判りますが、変動があったフィールドだけをUPDATE文に編集するようになっているのです。
この時に活躍するのが本プログラムで作成された「フィールドIDテーブル」「フィールド項目タイプテーブル」なのです。 このプロシージャに関して言えば、フィールド数がもっと多いテーブルだったとしても、データタイプの種類分以外には行数が増えることはないのです。
Excelの「SQLテーブル定義」に従ってVBA(Excel等)プログラムからSQLServerにアクセスする時の テーブル情報のソース記述をテキストファイルに出力します。 上記VisualBasic(.NET)プログラムからのテーブル情報のソース記述テキストファイル出力と内容は同じですが、これをVBA(Excel等)プログラム用として出力します。
VBAでは「フィールドIDテーブル」「フィールド項目タイプテーブル」についてその変数宣言と初期値のセットを同一行に記述できない上、 初期値のセットはモジュールレベルには記述できません。 当方でも従来はVisualBasic(.NET)プログラム用に出力されていたテキストから転用させて作成していたのですが、需要が多いことから機能として実装しています。
Excelの「SQLテーブル定義」内のページ設定を再設定する。 Excelの「SQLテーブル定義」内の各シートごとに登録フィールド数に対する印刷範囲等を再設定を行ないます。
Excelの「SQLテーブル定義」を一括印刷する。 Excelの「SQLテーブル定義」内の各シートごとにページ数設定を行なって、全シートを印刷します。

操作は簡単です。
インストールして起動させると、オプションメニューしかない単純なダイアログ形式のフォームが表示されます。

ExcelSQLServerツール(起動画面)

ここにSQLServerのテーブル定義を登録したExcelワークブックをドラッグさせると、テーブル作成スクリプトの出力などが行なわれます。

ExcelSQLServerツール(オプションメニュー)

SQLServerのテーブル定義を登録するためのワークシートは項目配置が決まっています。 これはオプションメニューの「Excelテンプレート表示」のメニューでテンプレートが表示されるようになっています。

ExcelSQLServerツール(テーブル定義テンプレート)

これがSQLServerテーブル定義のテンプレートです。
この「原紙」シートをコピーして必要な各テーブルを1テーブル1シートとして作成します。

ExcelSQLServerツール(テーブル定義サンプル)

このようになります。(このサンプルはインストーラのZIPファイルに同梱されています)

作成したSQLServerテーブル定義のExcelワークブックを起動した本プログラム(先頭の画像のもの)上にドラッグさせると、

ExcelSQLServerツール(サブメニュー)

このようなサブメニューが表示されますので必要なアクションをチェックボックスで選んで操作します。
「各シートの入力内容チェック」は必須としており、チェックを外すことはできません。 その他については必要の応じてチェックを付けてから「処理開始」ボタンをクリックして下さい。

「テーブル作成スクリプトの出力(*.sql)」「VB.NETプログラム用項目定義テーブル記述の出力」「VBAプログラム用項目定義テーブル記述の出力」については、対応するファイル名項目が入力できるようになります。 デフォルトで表示されるファイル名で問題がある場合はここで変更できます。 ここでのファイル名の指定はパスを含まないファイル名で、出力フォルダについては起動時に指定されているExcelの「SQLテーブル定義」ワークブックのフォルダとなります。

メインはもちろん「テーブル作成スクリプトの出力(*.sql)」です。
処理が完了すればスクリプトファイルが作成されます。

ExcelSQLServerツール(作成したスクリプト)

作成されたスクリプトファイルはこのようになっています。

これを「SQL Server Management Studio」の「新しいクエリ」の画面に貼り付け(ドラッグさせても良い)て実行させればテーブルが作成されます。

SQL Server Management Studioの画面

スクリプトファイル上では、Excelシート上で表現できていないプロパティについて固定させているものもありますが、必要であればスクリプトファイルのテキスト上で変更させてご利用下さい。
データベース名は先頭行のUSE句のみですので本番/テストでデータベースが区別されている場合でも、この部分の変更のみで済むようになっています。

VisualBasicプログラム用項目定義テーブル記述の出力
VB.NETプログラム用項目定義テーブル記述の出力」というメニュー(チェックボックス)を用意しています。 ご利用は自由ですが、これは私の方の開発方法では重要な役割を果たしています。
このメニューにチェックを付けて実行すると、VisualBasicプログラム用項目定義テーブル記述のファイルが作成されます。

ExcelSQLServerツール(作成したVB用項目定義テーブル記述)

このような内容ですが、VB.NETではデータベースからのデータの読み込みはDataTableで行ないますから配列操作となるのが一般的です。

ここで作成されるVisualBasicプログラム用項目定義テーブルの利用サンプルとしては、SQLServerで試してみます(VisualBasic)などが該当します。 「配属情報の登録・変更画面のソースコード」の中の「GP_MakeInsertSqlS」「GP_MakeInsertSqlH」「GP_MakeUpdateSqlS」「GP_MakeUpdateSqlH」の各プロシージャで 利用されています。

このサンプルのようなマスタの保守(新規・変更・削除)という処理を考えた場合、変更であればフォーム画面上で変更した項目以外はUPDATE文で不要な項目をSET句に記述させたくないと考えました。 更新SQL文の総長の短縮もそうですが、例えばこれをログ的に保持させるようにすればどのフィールドを更新したのかなどを後から追跡できるようにもなります。
フォーム上の各入力コントロールから得た各フィールドの値をテーブル定義の並びと合わせた配列に格納し、元々読み込んでいた(あるいは更新直前に読み直した)DataTableの各フィールドと比較させれば、変更があったフィールドのみを配置したUPDATE文が作成できるわけですが、 これにはそのフィールドの名前も定数的な配列として作成させておく必要があったため、このようなメニューを用意したものです。 サンプルのように、INSERT文でのフィールド名の列挙にも使用できます。

これらの機能により、Excelシート上のテーブル定義と実際に作成されたデータベース上のテーブルの構造、そしてそれを利用するために作成されたプログラムでフィールドの同期が取れていることが約束されるため、 高品質な仕組みを手早く提供させることができると思います。

Ver1.0.4.0より、VBA(Excel等)用の項目定義テーブル記述の出力機能も追加されています。

インストールについて
下記の「ダウンロード」からインストーラが収容されたZIP形式の圧縮ファイルがダウンロードできます。



動作環境はMicrosoft .NET Framework 4.*(4.5~4.8)です。
本アプリケーションは32ビット版ですが、Windows64ビット版でも問題ありません。



当然ながら、Microsoft Excel(32ビット版のみ対応)がインストールされていることが利用の前提条件となります。

解凍してから「ExcelSqlServerTool1_Setup.exe」を起動することでインストールが行なわれます。インストール後はスタートメニューの「すべてのプログラム」から「Excelでお仕事!VisualStudioツール」の中にある「ExcelSQLServerツール」を起動して下さい。 なお、デジタル証明書は搭載していないので、インストール中の確認画面で発行元は「不明」と表示されます。

アンインストールを行なう場合は、コントロールパネルの「プログラムと機能(プログラムの追加と削除)」から「ExcelSQLServerツール」を選択して「削除」を実行します。
本ソフトではレジストリは使用していません。画面モードの設定保存はMicrosoft .NET Frameworkの設定保持機能を使っています。

著作権等について
本ソフトの著作権は「Excelでお仕事!(井上 治)」が所有しています。
フリーソフトですのでご自由にダウンロードしてご利用いただけます。 但し、動作確認は充分に行なっておりますが、このソフトを使ったことによって損害が発生しても一切の責任は負えません。

本記事内容の転載についてはアーカイブに変更を加えないことを条件に、転載は自由にして頂いて構いませんが、必ずご連絡いただくようにお願いします。 連絡については当サイトの「意見・質問」ペ-ジが利用できます。
また、不具合や改善点などについてもご連絡いただけると幸いです。

バージョン情報

更新日 Ver 内容
2015/02/20 1.0.0.0 新規作成
2015/02/20 1.0.1.0 非表示シートは処理の対象から除外する対応を追加
2015/02/20 1.0.1.0 「連番と印刷範囲設定」のメニューを追加
2015/02/20 1.0.1.1 概要説明の改修
2015/12/15 1.0.1.2 最終行判定をフィールドID以外の列でも行なうように修正
2016/01/17 1.0.1.2 Windows10での動作確認を行なったので記載を変更
2016/03/06 1.0.1.3 メニューのToolTipガイドの追加対応
2016/07/09 1.0.1.4 マルチスクリーン時のフォーム制御の改善
2016/10/22 1.0.1.5 Excelを新規インスタンス固定で扱うように修正
メニュー毎にチェック動作が重複しないように修正
上書き警告メッセージを表示させないように修正
2016/12/06 1.0.1.6 COLLATE記述がある場合にこれをNULL(NOT NULL)記述の手前に移動させる対応
2018/03/03 1.0.2.0 VB用項目定義情報出力はテーブルID群と項目定義群で配置ブロックを分ける対応
メニュー画面を閉じた時に起動時の本体画面も閉じるように変更
2018/05/07 1.0.3.0 フォームデザインを再作成、複数の機能を一度に指定できるように変更
2018/05/30 1.0.4.0 VBAプログラム用項目定義テーブル記述の出力機能を追加
項目定義テーブル変数に表意するテーブルIDで先頭方向の除外桁数の指定機能を追加
処理概要に「SQLテーブル定義書と実際のデータベースの項目同期の重要性について」の説明を追加
1.0.4.1 各出力テキストファイルのファイル名重複チェックを追加
2018/10/06 1.0.5.0 DPI環境で起動時フォーム位置がスクリーン領域外になってしまうことが発生する件の対応
2018/11/04 1.0.5.1 画面位置保持機能について複数画面時の個別DPI指定に対応する修正②
2019/04/05 1.0.5.2 "timestamp"型を追加する対応
2019/04/07 1.0.6.1 フィールドの初期値投入記述(DEFAULT)対応
2020/05/03 1.0.6.2 概要記述の動作環境で.NETFrameworkの動作可能Verの記載誤りを訂正
1.0.6.3 INDEX作成時のスキーマが「dbo」に固定されてしまっている件を修正
2021/10/15 1.0.6.4 開発環境を「Microsoft Visual Studio 2010」から「Microsoft Visual Studio 2019」に変更
2021/11/29 1.1.0.1 フレームワーク環境を「.NET Framework4.x」に変更
(ターゲットフレームワークは「.NET Framework4.5」に設定)
2022/05/14 1.1.0.3 ・開発環境を「Microsoft Visual Studio 2022」に変更
Windowsスタートメニューメンバの整理(概要説明リンクの削除⇒本体メニューから呼び出し可能)
2023/01/15 1.1.1.0 独自メッセージボックス変更(マウス既定ボタンモード対応)

※バージョンアップでのインストール時に動作上は正常にインストールされるものの、EXEファイルが置き換わらない現象があるようです。 フォーム上の各コントロールをマウスでポイントするとツールチップでバージョンが表示されるので、新しいバージョンになっていない場合は一旦アンインストールさせてから再度インストールさせて下さい。

ダウンロードはこちら。

←ExcelSqlServerTool1_Setup.zip
      (1103KB)

VectorからもExcelSQLServerツール」でダウンロードできます。


.NET Frameworkの変更について   PCに搭載されている.NET Frameworkのバージョンはその有無を含めてWindows側の環境に依存します。
本プログラムは従来、古いWindowsへの対応から、.NET Framework2.0~3.5をターゲットとしていましたが、 現在では逆に.NET Framework3.5をインストールすることが必要となって余分な作業負荷となってしまってきているため、 Ver1.1.0.0より.NET Framework4.xに変更しました。



本プログラムを新規にインストールされる場合は必要な.NET Framework環境の確認だけでご利用いただけますが、 以前の.NET Frameworkバージョンから.NET Framework4.xにバージョンアップされる場合のみ設定やデータが引き継がれないのでご注意下さい。



手動作業での設定引き継ぎ(設定ファイルのコピー作業)バージョンアップ時の不具合については、こちらで説明しています。



一旦、.NET Framework4.x環境に移行した後の今後のバージョンアップについての設定内容は、自動的に引き継がれるようになります。