0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLファイルを外部化してVBAコードをスッキリさせる方法【A5:SQL Mk-2活用】

0
Posted at

目次

  1. はじめに
  2. A5:SQL Mk-2とは
  3. A5:SQL Mk-2の特徴
  4. 実務での活用例
  5. まとめ

はじめに

VBAでSQLを扱う際、文字列として埋め込むとコードが長くなり、デバッグが非常にしづらいとい感じていました。また、SQLの動作確認のたびにプログラムを実行するのは、効率的ではありません。そこで、SQLを事前に作り込んで動作確認できるツールの必要性を感じ、A5:SQL Mk-2(エーファイブ エスキューエル マークツー)という便利なツールを発見できたので、備忘録としてまとめておきます。

A5:SQL Mk-2とは

A5:SQL Mk-2は、データベースに接続してSQL文を実行できる無料のツールです。「とりあえずSQLを実行したい」というニーズに応えるシンプルなツールで、プログラムにSQLを組み込む前の動作確認やSQL文の作成に便利です。

Windows向けに開発されており、Oracle、MySQL、PostgreSQL、SQLiteなど、主要なデータベースに対応しています。開発も活発に行われており、定期的にアップデートされているため、安心して使用できます。

【インストール方法】

A5:SQL Mk-2には、Microsoft Storeから入手する方法と、ZIPファイルをダウンロードして展開する方法があります。Microsoft Store版はボタンを押すだけでインストールが完了し、新しいバージョンが出ると自動で更新されるため、初めて使う場合はこちらが手軽だと考えています。

Microsoft Store版の対象は、64ビット版のWindows 10・Windows 11です。

  1. スタートメニューから「Microsoft Store」を起動

    Microsoft Store
    
  2. 画面上部の検索欄にA5:SQL Mk-2と入力して検索

    A5:SQL Mk-2
    
  3. 検索結果から「A5:SQL Mk-2」を選択

  4. 「入手」を選択
    ※インストールが終わると、ボタンの表示が「開く」に変わる

  5. 「開く」を選択、またはスタートメニューから「A5:SQL Mk-2」を起動

    ※初めて起動すると、「ワークスペースの起動と管理」という画面が表示されます。ワークスペース(登録したデータベースや画面の設定をまとめて保存する単位)を選んでから起動する仕組みで、初回はまだ1つもないため一覧が空になっています。

    image.png

  6. 画面左下の「追加」を選択

  7. ワークスペース名を入力し、「OK」を選択
    ※sampleなど自由な名前でよい。空欄のまま「OK」を選ぶと、名前のないデフォルトワークスペースになる

    image.png

  8. 一覧に追加されたワークスペースを選択し、「起動」を選択

    ※画面左下の「起動時に表示する」のチェックを外しておくと、次回からはワークスペースの画面を飛ばして、すぐにメイン画面が開きます。

    image.png

画面上部の「ワークスペース情報の保存先」では、A5:SQL Mk-2の設定をどこに保存するかを選びます。

【ワークスペース情報の保存先の選択肢】

  • レジストリ: Windowsの設定を保存する場所であるレジストリに保存する。初期値で、このままでよい
  • 設定ファイル(ポータブルモード): A5M2.exeと同じフォルダ内のファイルに保存する。フォルダごとUSBメモリなどにコピーすれば、別のPCでも同じ設定のまま使える

Microsoft Store版は、インストール先のフォルダに書き込みができない仕組みのため、ポータブルモードは選べず灰色で表示されます。ポータブルモードは、ZIPファイル版だけで使える機能です。

「起動」を選ぶとメイン画面が開き、続けて「最初に接続するデータベースを登録します。」という案内が表示されます。

image.png

アンインストールしたい場合は、スタートメニューのアイコンを右クリックし、「アンインストール」を選択します。

Microsoft Storeが使えない場合

会社のPCなどでMicrosoft Storeが使えない場合は、ZIPファイル版を利用できます。ZIPファイル版は、公式サイトに掲載されているVectorのダウンロードページから入手します。

Vectorのダウンロードページは、以下から直接開くこともできます。

Vectorのページ上部にある大きな青い「ダウンロード」ボタンは、ブラウザーの拡張機能の広告で、A5:SQL Mk-2のダウンロードではありません。押さないように注意が必要です。A5:SQL Mk-2本体は、ページを下にスクロールした「ダウンロード」の欄から入手します。

image.png

  1. ページを下にスクロールし、緑色の見出し「ダウンロード」の欄を表示

  2. ソフト名が「A5:SQL Mk-2(x64 edition)」になっている枠の、緑色の「ダウンロードページへ」を選択
    ※ファイル名がa5m2_バージョン番号_x64.zipになっていることを確認

    image.png

【「ダウンロード」欄に並ぶ版の違い】

  • x64 edition: 64ビット版のWindows向け。現在のほとんどのPCはこちら
  • x86 edition: 32ビット版のWindows、または32ビット版のODBCドライバー(データベースに接続するための部品)を使う場合向け
  • AI無効化版: AIアシスタント機能を取り除いた版。会社の規則などでAI機能を使えない場合向け

ZIPファイル版はインストール作業が不要で、ZIPファイルを展開したフォルダ内のA5M2.exeを起動するだけで使えます。

【データベースへの接続設定】

A5:SQL Mk-2でSQLを実行するには、まず接続先のデータベースを登録する必要があります。登録時に入力する内容は、データベースの種類によって異なります。

【データベースの種類による違い】

  • サーバー型(データベース本体を別途動かしておく方式): MySQL、PostgreSQL、SQL Server、Oracleなど。本体のインストールと起動が事前に必要
  • ファイル型(データベース全体を1つのファイルに保存する方式): SQLite、Accessなど。接続時はファイルを指定するだけで済む

データベースをインストールした経験がない場合は、SQLiteを使うのがおすすめです。A5:SQL Mk-2にはSQLiteを扱うためのライブラリ(プログラムの部品をまとめたもの)が同梱されているため、SQLite本体を別途インストールする必要がありません。A5:SQL Mk-2の画面上で、データベースファイルを新しく作るところから始められます。

【SQLiteのデータベースを作成して登録する】

データベースファイルの保存先には、C:\sqlのような同期されないフォルダを使うのがおすすめです。ドキュメントフォルダなど、OneDriveと同期しているフォルダに置くと、同期のタイミングでファイルが使用中になり、エラーの原因になることがあります。

  1. 「データベースの追加と削除」画面で「追加」を選択

    image.png

  2. データベースの種類の一覧から「SQLite (sqlite3.dll経由)」を選択

    image.png

  3. 「データベース」欄にC:\sql\sample.dbと直接入力
    ※欄の右にあるフォルダのアイコンは既存のファイルを選ぶためのもので、新しく作る場合は使わない

    image.png

  4. 「データベースファイルがない場合作成する」にチェックを入れ、「OK」を選択

  5. 一覧にsample.db (SQLite)と表示されたことを確認し、「閉じる」を選択

    image.png

  6. エクスプローラーで「PC」→「ローカルディスク(C:)」を開き、sqlフォルダを作成
    ※A5:SQL Mk-2はデータベースファイルを自動で作成するが、保存先のフォルダは作成しないため、接続する前に用意する必要がある

登録が終わると、画面左側のデータベースツリー(登録したデータベースの一覧)にsample.dbが表示されます。

サーバー型のデータベースに接続する場合

MySQLやPostgreSQLなどのサーバー型のデータベースでは、手順3でそれぞれの種類を選び、主に次の情報を入力します。

  • ホスト名: データベースが動いているコンピューターの場所。自分のPCで動かしている場合はlocalhost
  • ポート番号: データベースの受付窓口の番号。MySQLは3306、PostgreSQLは5432が初期値
  • ユーザー名・パスワード: データベースに登録したユーザーの情報
  • データベース名: 接続先のデータベースの名前

【SQLを実行して動作を確認する】

  1. 起動時から開いているSQLエディタ(SQLを入力して実行する画面)の「Query-1」で、上部の欄からsample.dbを選択

    image.png

    ※「Query-1」を閉じた場合は、メニューの「ファイル」→「新規」→「新規SQL」で開く

  2. 下記のSQLを入力

    -- 動作確認用のテーブルを作成し、データを追加して検索する
    
    -- usersテーブルを作成
    CREATE TABLE users (
        -- ユーザーID(主キー)
        id INTEGER PRIMARY KEY,
        -- ユーザー名
        name TEXT
    );
    
    -- データを2件追加
    INSERT INTO users (id, name)
        VALUES (1, '山田'), (2, '佐藤');
    
    -- 追加したデータを検索
    SELECT id, name
        FROM users;
    
  3. CREATE TABLE文の行にカーソルを置き(添付画像4行目)、Ctrl+Enterキーを押して実行
    ※カーソルがある1文だけが実行される

    image.png

  4. 初回の実行時に表示されるログイン画面で、ユーザーIDとパスワードを空欄のまま「接続」を選択
    ※SQLiteにはユーザーの仕組みがないため、入力は不要。この接続のタイミングでC:\sqlにsample.dbが作成される

    image.png

  5. INSERT文(12行目)、SELECT文(16行目)の順に、それぞれの行にカーソルを置いて同じ操作で実行(Ctrl+Enterキー押下)

PRIMARY KEYは主キー(行を一意に識別する列)を表す指定で、同じidを持つ行を重複して登録できなくなります。

最後のSELECT文を実行すると、SQLエディタの下側にidとnameの2列、山田さんと佐藤さんの2行が表で表示されます。あわせて開くコンソール(実行結果のメッセージを表示する画面)には、CREATE TABLE文の実行時に「2 件のレコードを操作しました。」、INSERT文の実行時に「2 件のレコードを挿入しました。」と表示されます。この結果が表示されれば、SQLの作成と動作確認できる環境が整っています。

image.png

【つまずきやすいエラーと対処】

手順の途中でエラーが出た場合、エラー画面にはSQLiteが返す英語のメッセージが表示されます。よく出る2つのメッセージと、その原因は次のとおりです。

【エラーメッセージと原因】

  • unable to open database file: 保存先のフォルダが存在しない。C:\sqlフォルダを作成してから、もう一度実行する
  • no such table: users: usersテーブルを作る前にINSERT文やSELECT文を実行した。カーソルのある1文だけが実行されるため、CREATE TABLE文から順に実行する

特にno such tableは、SQLをすべて入力したあと、最後の行にカーソルがある状態でCtrl+Enterを押すと起こりやすいエラーです。入力直後のカーソルは最後のSELECT文の中にあるため、そのまま実行すると、テーブルがない状態で検索することになります。

A5:SQL Mk-2の特徴

A5:SQL Mk-2には、SQL実行ツールとして以下のような特徴があります。

  • 高速・軽量 - 起動が速く、動作が軽いため、ストレスなく使用できます
  • 開発が活発 - 定期的にアップデートされており、新しいデータベースへの対応や機能改善が継続的に行われています
  • 無料で使える - 商用利用も含めて無料で使用できます
  • 複数のデータベースに対応 - Oracle、MySQL、PostgreSQL、SQL Server、SQLiteなど、主要なデータベースを幅広くサポートしています

特に軽量であることは、日常的にSQLの動作確認を行う際に大きなメリットです。重たいツールだと起動に時間がかかり、ちょっとした確認作業でもストレスになりますが、A5:SQL Mk-2はすぐに立ち上がって作業を始められます。

初心者でも使いやすい

A5:SQL Mk-2は、複雑な設定なしで使い始められます。データベースへの接続設定さえできれば、すぐにSQL文を実行できるシンプルな設計になっています。

実務での活用例

A5:SQL Mk-2は、プログラムにSQLを組み込む前の準備ツールとして活用できます。特に、VBAやPython、Javaなどのプログラム内でSQLを扱う際に便利です。

【VBAでの活用パターン】

VBAでSQLを扱う場合、以下のような流れで開発すると効率的です。

  1. A5:SQL Mk-2でSQL文を作成し、動作確認を行う
  2. 動作が確認できたSQLをファイルとして保存する
  3. VBAからそのSQLファイルを読み込んで実行する

この方法には、以下のようなメリットがあります。

  • デバッグが容易 - SQLの動作確認をVBAの実行環境とは別に行えるため、問題の切り分けがしやすくなります
  • コードの可読性向上 - VBAのコード内に長いSQL文を文字列として埋め込まないため、コードが読みやすくなります
  • メンテナンス性向上 - SQL文の修正が必要になった際、SQLファイルを編集するだけで対応できます

SQLをプログラム内に埋め込む問題点

VBA内でSQL文を文字列として扱うと、以下のような問題が発生します。

sql = "SELECT users.id, users.name, orders.order_date " & _
      "FROM users " & _
      "INNER JOIN orders ON users.id = orders.user_id " & _
      "WHERE users.status = 'active' " & _
      "AND orders.order_date >= '2024-01-01'"

このように文字列を結合する形になり、SQLが長くなるほど可読性が低下します。また、構文エラーがあっても実行するまで気づきにくく、デバッグに時間がかかります。

【SQLファイルを読み込む方法】

A5:SQL Mk-2で作成したSQL文をファイルとして保存し、VBAから読み込む基本的な流れは以下の通りです。

' SQLファイルを読み込む関数
Function ReadSQLFile(filePath As String) As String ' 戻り値: ファイル内のSQL文

    ' 空いているファイル番号を取得
    fileNum = FreeFile
    Dim fileNum As Integer

    ' 読み込みモードでファイルを開く
    Open filePath For Input As #fileNum

    ' ファイルサイズ分をまとめて読み込み
    Dim sqlText As String
    sqlText = Input$(LOF(fileNum), fileNum)

    ' ファイルを閉じる
    Close #fileNum

    ' 読み込んだSQL文を戻り値に設定
    ReadSQLFile = sqlText

End Function

' 使用例
' SQLファイルの中身を変数に格納
sql = ReadSQLFile("C:\sql\get_user_orders.sql")

この方法を使えば、SQL文の修正はSQLファイルを編集するだけで済むため、VBAコードに手を加える必要がありません。

fileNumをInteger型で宣言している理由

FreeFile(フリーファイル: 空いているファイル番号を返す関数)の戻り値は、Integer型(インテジャー型: 整数を扱う型)と決まっており、Long型(ロング型: Integer型より広い範囲の整数を扱う型)に変えることはできません。今回のコードでは、戻り値を受け取るfileNumもこれに合わせてInteger型で宣言しています。

なお、受け取る側の変数をLong型で宣言しても、値は自動で変換されるためエラーにはなりません。ファイル番号は1〜511の範囲に収まるため、どちらの型でも扱えます。今回は、戻り値の型と変数の型をそろえたほうが読み取りやすいと考え、Integer型にしています。

【ファイル番号に付く「#」の意味】

VBAでOpenを使ってファイルを開くと、そのファイルにはファイル番号(開いたファイルを識別する番号)が割り当てられます。以降の読み込みや閉じる処理では、ファイル名ではなくこの番号で対象のファイルを指定します。

FreeFileは、その時点で使われていない番号を返します。番号を1のように直接書くこともできますが、同じ番号ですでに別のファイルが開かれているとエラーになります。FreeFileで取得しておくと、番号の重複を避けられます。

#は、後ろに続く値がファイル番号であることを示す目印です。Open filePath For Input As #fileNumは「filePathのファイルを読み込みモードで開き、ファイル番号fileNumを割り当てる」、Close #fileNumは「ファイル番号fileNumのファイルを閉じる」という意味になります。

この#は省略できます。今回のコードでも、Input$の第2引数は#を付けずにfileNumと書いていますが、OpenやCloseと同じファイル番号を指しています。#の有無で別のものを指しているように見えて戸惑いやすい点ですが、付けても付けなくても意味は変わりません。

一方、LOF(エルオーエフ: ファイルのサイズを返す関数)の引数には#を付けられません。#を書ける箇所は構文ごとに決まっており、LOF(#fileNum)と書くとエラーになります。

「#」のほかの使われ方

VBAでは、#がファイル番号以外の場面でも使われます。

  • 日付リテラル: #1/1/2024#のように日付を#で囲み、日付リテラル(コード内に直接書いた日付の値)として扱う
  • 型宣言文字: Dim price#のように変数名の末尾に付け、型宣言文字(変数の型を表す記号)としてDouble型(ダブル型: 小数を扱う型)の変数を宣言する

どちらも今回のコードの#とは別物です。ファイル番号の目印になるのは、OpenやCloseの中でファイル番号の前に置かれた場合です。

【ファイルサイズを返すLOFの役割】

LOFは、Openで開いたファイルのサイズをバイト数で返す関数です。名前はLength Of File(レングス オブ ファイル: ファイルの長さ)の頭文字から来ています。引数にはファイル番号を渡し、戻り値はLong型です。

今回のコードでは、LOF(fileNum)で取得したサイズをInput$の第1引数(読み込む文字数)に渡しています。ファイル全体の大きさを先に調べ、その分をまとめて読み込むことで、ファイルの中身を1回の呼び出しでsqlTextに入れています。

LOFはファイル番号で対象を指定するため、Openでファイルを開いた後でないと使えません。開く前のファイルのサイズを調べたい場合は、ファイルのパスを引数に取るFileLen(ファイルレン: 開いていないファイルのサイズを返す関数)を使います。

全角文字を含むファイルを読み込む場合の注意点

LOFが返すのはバイト数ですが、Input$の第1引数は文字数です。半角文字だけのファイルであれば1文字が1バイトのため、バイト数と文字数が一致し問題なく読み込めます。

一方、Shift_JIS(シフトジス: 日本語Windowsで標準的な文字コード)のファイルでは、全角文字は1文字が2バイトになります。SQLファイルに日本語のコメントなどが含まれていると、文字数がバイト数より少なくなり、Input$がファイルの終わりを超えて読み込もうとしてエラーになります。

全角文字を含むファイルを読み込む場合は、文字数ではなくバイト数で読み込むInputB(インプット ビー: 指定したバイト数分を読み込む関数)と、StrConv(ストリング コンバート: 文字列の形式を変換する関数)を組み合わせる必要があります。

' 全角文字を含むファイルをバイト単位で読み込み、文字列に変換する例

' LOFで取得したバイト数分をInputBで読み込み、
' vbUnicodeを指定したStrConvでVBAの文字列に変換
sqlText = StrConv(InputB(LOF(fileNum), fileNum), vbUnicode)

【Input$に付く「$」の意味】

Input$は、開いたファイルから指定した文字数分を読み込む関数です。第1引数に読み込む文字数、第2引数にファイル番号を渡します。今回のコードでは、第1引数にLOF(fileNum)を渡し、ファイルのサイズ分をまとめて読み込んでいます。

$は、関数の戻り値がString型(ストリング型: 文字列を扱う型)であることを示す記号です。$を付けないInputも同じように使えますが、戻り値はVariant型(バリアント型: どんな型の値も入る型)になります。Left$やMid$のように、文字列を返す組み込み関数の多くに$付きと$なしの2種類が用意されています。

今回のReadSQLFile関数は、As Stringで戻り値を文字列型と決めており、読み込んだ内容を入れるsqlTextもStringで宣言しています。Input$を使うと最初から文字列型の値を受け取れるため、宣言した型と一致し、Variant型から文字列型への変換を挟まずに済みます。

「$」のほかの使われ方

$は、関数名だけでなく変数名の末尾にも付けられます。Dim sqlText$と書くとDim sqlText As Stringと同じ意味になり、String型の変数として宣言されます。この使い方は、#(Double型)と同じ型宣言文字の仕組みです。

【その他の活用場面】

A5:SQL Mk-2は、VBA以外にも以下のような場面で活用できます。

  • データの確認 - データベースに格納されているデータを手軽に確認できます
  • テーブル構造の把握 - データベースのテーブル一覧やカラム情報を視覚的に確認できます
  • SQLの学習 - SQL文を実際に実行しながら学習できます

特にデータベースの構造を把握する際は、テーブル一覧やER図(テーブル間の関係を示す図)を表示する機能が便利です。

まとめ

A5:SQL Mk-2は、SQLの動作確認やプログラムに組み込む前のSQL作成に適した軽量ツールで、VBAなどでSQLを扱う際の開発効率を大きく向上させることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?