データベースのアプリからの制御サンプル(PostgreSQL+VBScript)

タイトルの通り、初心者学習用のデータベース制御プログラミングのサンプルになります。

Windowsマシンとインターネットに接続出来る環境があれば出来るようにWindows10で作業してみたログとして残しておきます。

開発環境概要
- DBMS:PostgreSQL
- 制御API:Open Database Connectivity (ODBC)
- 使用言語:VBScript
PostgreSQLとODBCの インストール作業
①PostgreSQLのインストーラををダウンロードする
https://www.postgresql.orgを開いて
Downloadをクリック

「Windows」リンクをクリック

「Download the installer」リンクをクリック

最新Ver(2019/01/12時点では11.1)行の
「Windows x86-64」列の「Download」をクリックするとインストーラのDaownloadが始まる。

インストーラの*.exeファイルを任意のディレクトリに保存する。
(※ファイルサイズ結構大きいのでDL時間数分くらいかかるかも)

②PostgreSQLのインストーラを実行してPostgreSQLをインストールする
①でDownloadした「postgresql-11.1-1-windows-x64.exe」を
右クリック→"管理者として実行"で実行する。
「このデバイスに変更を加えますか?」みたいなダイアログが出ても「はい」で進める。

PostgreSQLのセットアップダイアログが出る
「Next」クリック

Insallation Directoryのダイアログが出る
インストール先のディレクトリがデフォルトのパスで良ければそのまま「Next」
(パスを変えたい場合は変更して「Next」)

Select Componentsダイアログが出る。
すべてのコンポーネントがチェックされている状態のまま「Next」

Data Directoryダイアログが出る。
データ保存のパスがそのままでよければ「Next」
(データはデータベースを大量に保存すると大きなサイズが必要なので別HDDやSSDを指定したい場合は変更して「Next」)

Passwordダイアログ
(スーパーユーザである「postgres」アカウントのパスワードを設定する)
2か所のPasswordBoxに同じ「postgres」を設定して「Next]

Portダイアログ
(PostgreSQLとの間で通信を行う場合のポート番号を指定する。通常は5432のままとしておく。)

Advanced Optionsダイアログ
Localeプルダウン選択肢から"Japanese, Japan"を選択して「Next」

Pre Installation Summaryダイアログ
これまでの設定を確認して変更したいものがなければ「Next」

Ready to Installダイアログ
「Next」でインストール開始

(インストールが終わるまでしばらく待機。。)

完了ダイアログが出たら"Launch Stack Builder at exit?"のチェックを付けて「Finish」で完了

引き続きStackBuilderのダイアログが立ち上がるのでODBCドライバをインストールする
スタックビルダダイアログで中央のプルダウンから「PostgreSQL 11(x64) on port 5432」を選択して「次へ」

カテゴリ
-Database Driversを開く
-psqlODBC(64bit) v10.02.0000-1にチェックを入れて「次へ」

「次へ」でODBCドライバのダウンロードが始まる

「次へ」でSetupのダイアログに移行する

「Next」をクリック

「Next」をクリック

「Next」をクリックでODBCドライバのインストール開始

「Finish」をクリックでODBCドライバのインストール完了

「終了」をクリックでPostgreSQLとODBCドライバのインストール完了




ODBCドライバの接続確認テスト
ウインドウズボタン+Rでファイル名を指定して実行ダイアログを出す
controlと入力してリターンでコントロールパネルを開く

コントロールパネルが起動したら右上の検索入力に「管理ツール」と入力してリターン

「ODBCデータソース(64ビット)」をダブルクリックで開く

「システムDNS」タブをクリックして、「追加」をクリック

データソースの新規作成ダイアログでデータソースのドライバーの一覧から
「PostgreSQL ODBC Driver (ANSI)」を選択して「完了」をクリック

PostgreSQL ANSI ODBC セットアップダイアログで
「port」に"5432"を入力
「ユーザ名」に"postgres"を入力
「パスワード」に"postgres"を入力
※データソース名の"PostgreSQL30"は後述のデータベースOpen時の引数に指定する。
「テスト」をクリックして接続をテストする

接続テスト成功なら下記のダイアログが出る。
「OK」クリックしてダイアログを閉じる。

「保存」をクリックして設定保存後、ダイアログを閉じて完了

実装編
下記のような内容のVBScriptの処理をテキストエディタに張り付けて
00_create_table.vbs
という名前で保存する
(syacyo_sampleというテーブルをCreateする処理)
'変数宣言ミスを防ぐおまじない
Option Explicit

'/*-------------------------------------------*/
'/*           DataBaseに接続する              */
'/*-------------------------------------------*/
    'DataBaseのインスタンス格納用変数を宣言
    Dim db
    'ODBCのAPIのCreateObjectメソッドでDataBaseのインスタンス取得(=db変数に保存)
    set db = CreateObject ("ADODB.Connection")
    'DataBaseのインスタンスに対してOpenメソッドを呼び出してDataBaseをOpenする
    '引数はDSN=PostgreSQL30 UserID=Password=postgres : インストール作業などで設定した値で接続する
    db.Open "dsn=PostgreSQL30;uid=postgres;pwd=postgres;"

'/*-------------------------------------------*/
'/*           テーブルをCreateする            */
'/*-------------------------------------------*/
    'テーブル作成
    'sql query格納用変数を宣言
    Dim sql
    'SQL query設定
    sql = "CREATE TABLE syacyo_sample (" _ 
          &"番号 varchar(10)," _ 
          &"名称 varchar(40)," _
          &"Primary Key(番号))"
    'SQL query発行
    db.Execute sql

'/*-------------------------------------------*/
'/*           DataBaseを接続解除する          */
'/*-------------------------------------------*/
    'ODBC 接続解除
    db.Close
    'Connection オブジェクトの Close メソッドを使用すると、
    'Connection オブジェクトとデータベースとの間の接続を明示的に終了できます。

    'テーブルCreate完了ダイアログを表示
    MsgBox ("Hello World!" & vbcr & "Teble Create Complete!")
下記のような内容のVBScriptの処理をテキストエディタに張り付けて
01_insert_record.vbs
という名前で保存する
(syacyo_sampleというテーブルにRecordをInsertする処理)
'変数宣言ミスを防ぐおまじない
Option Explicit

'/*-------------------------------------------*/
'/*           DataBaseに接続する              */
'/*-------------------------------------------*/
    'DataBaseのインスタンス格納用変数を宣言
    Dim db
    'ODBCのAPIのCreateObjectメソッドでDataBaseのインスタンス取得(=db変数に保存)
    set db = CreateObject ("ADODB.Connection")
    'DataBaseのインスタンスに対してOpenメソッドを呼び出してDataBaseをOpenする
    '引数はDSN=PostgreSQL30 UserID=Password=postgres : インストール作業などで設定した値で接続する
    db.Open "dsn=PostgreSQL30;uid=postgres;pwd=postgres;"

'/*-------------------------------------------*/
'/*           RecordをInsertする              */
'/*-------------------------------------------*/
    'データ追加
    '事前にレコード削除
    db.Execute "DELETE FROM syacyo_sample"
    '番号と名称の組をInsertしていく
    db.Execute "INSERT INTO syacyo_sample VALUES ('0001','東京都')"
    db.Execute "INSERT INTO syacyo_sample VALUES ('0002','神奈川県')"
    db.Execute "INSERT INTO syacyo_sample VALUES ('0003','埼玉県')"
    db.Execute "INSERT INTO syacyo_sample VALUES ('0004','千葉県')"
    db.Execute "INSERT INTO syacyo_sample VALUES ('0005','群馬県')"

'/*-------------------------------------------*/
'/*           DataBaseを接続解除する          */
'/*-------------------------------------------*/
    'ODBC 接続解除
    db.Close
    'Connection オブジェクトの Close メソッドを使用すると、
    'Connection オブジェクトとデータベースとの間の接続を明示的に終了できます。

    'Record Insert完了ダイアログを表示
    MsgBox ("Insert Record Complete!")
下記のような内容のVBScriptの処理をテキストエディタに張り付けて
02_selectrecord.vbs
という名前で保存する
(syacyo_sampleというテーブルからRecordをSelectする処理)
'変数宣言ミスを防ぐおまじない
Option Explicit

'/*-------------------------------------------*/
'/*           DataBaseに接続する              */
'/*-------------------------------------------*/
    'DataBaseのインスタンス格納用変数を宣言
    Dim db
    'ODBCのAPIのCreateObjectメソッドでDataBaseのインスタンス取得(=db変数に保存)
    set db = CreateObject ("ADODB.Connection")
    'DataBaseのインスタンスに対してOpenメソッドを呼び出してDataBaseをOpenする
    '引数はDSN=PostgreSQL30 UserID=Password=postgres : インストール作業などで設定した値で接続する
    db.Open "dsn=PostgreSQL30;uid=postgres;pwd=postgres;"

'/*-------------------------------------------*/
'/*    RecordをSelectしてMessageBoxに表示      */
'/*-------------------------------------------*/
    'TableからSELECT文で取り出したRecordSet格納用変数を宣言
    Dim rs
    'RecordSet取得
    'Recordset オブジェクト. レコードセットは、Windows CE ベースの
    'デバイス上にある実際のデータベース テーブルでのフィールドおよび行の
    'サブセットに対応するフィールドと行を持つ仮想データベース テーブルです
    'Recordset オブジェクトを作成すると、Recordset オブジェクトのプロパティ
    'およびメソッドを使用してデータを読み取ったり操作したりできます。
    set rs = db.Execute("SELECT * FROM syacyo_sample")
    'MessageBox表示用の文字列用変数を宣言
    Dim strRecord
    'RecordSetに順次アクセスしてMessageBox表示用の文字列を生成する(1Record毎に改行コードを挟む)
    'RecordSetの最終レコードまでループ開始
    do until rs.EOF
    '           前のrecord+ 番号       + Tab   + 名称       + 改行
    strRecord = strRecord & rs("番号") & vbTab & rs("名称") & vbCr
    'RecordSetの次レコードに移動
    rs.MoveNext
    'ループ端
    loop
    'MessageBoxに読みだした各Recordを表示する
    MsgBox (strRecord)
'/*-------------------------------------------*/
'/*           DataBaseを接続解除する          */
'/*-------------------------------------------*/
    'ODBC 接続解除
    db.Close
    'Connection オブジェクトの Close メソッドを使用すると、
    'Connection オブジェクトとデータベースとの間の接続を明示的に終了できます。

    'Select Record完了ダイアログを表示
    MsgBox ("Select Record Complete!")
下記のような内容のVBScriptの処理をテキストエディタに張り付けて
03_delete_table.vbs
という名前で保存する
(syacyo_sampleというテーブルからRecordをSelectする処理)
'変数宣言ミスを防ぐおまじない
Option Explicit

'/*-------------------------------------------*/
'/*           DataBaseに接続する              */
'/*-------------------------------------------*/
    'DataBaseのインスタンス格納用変数を宣言
    Dim db
    'ODBCのAPIのCreateObjectメソッドでDataBaseのインスタンス取得(=db変数に保存)
    set db = CreateObject ("ADODB.Connection")
    'DataBaseのインスタンスに対してOpenメソッドを呼び出してDataBaseをOpenする
    '引数はDSN=PostgreSQL30 UserID=Password=postgres : インストール作業などで設定した値で接続する
    db.Open "dsn=PostgreSQL30;uid=postgres;pwd=postgres;"

'/*-------------------------------------------*/
'/*           テーブルをDeleteする            */
'/*-------------------------------------------*/
    'テーブル作成
    'sql query格納用変数を宣言
    Dim sql
    'SQL query設定
    sql = "DROP TABLE IF EXISTS syacyo_sample"
    'SQL query発行
    db.Execute sql

'/*-------------------------------------------*/
'/*           DataBaseを接続解除する          */
'/*-------------------------------------------*/
    'ODBC 接続解除
    db.Close
    'Connection オブジェクトの Close メソッドを使用すると、
    'Connection オブジェクトとデータベースとの間の接続を明示的に終了できます。

    'テーブルDelete完了ダイアログを表示
    MsgBox ("Drop Table Complete!")
実行結果編
00_create_table.vbsをダブルクリックして実行する
結果、テーブルが生成されて下記のダイアログが出る

01_insert_record.vbsをダブルクリックして実行する
結果、テーブルにRecordがInsertされて下記のダイアログが出る

02_selectrecord.vbsをダブルクリックして実行する
結果、テーブルからSelectされたRecord内容が下記のダイアログに表示されて、Select処理完了のダイアログが出る

03_delete_table.vbsをダブルクリックして実行する
結果、テーブルがDropされて下記のダイアログが出る


あとがき
DataBaseの勉強を頑張っている未経験者が、その勉強が実務でどう役に立つのか、という観点で一例としてプログラムでこんな風に制御できますよ、という事を体験することでより実践的に理解して、勉強に意義を持たせるという目的で本記事を書いてみました。未経験の方がエンジニアになる一助となればいいなと思います。




この記事が気に入ったらサポートをしてみませんか?