VBSとVBAでSQL Serverのレコードを操作する

はじめに

SQL Serverを構築して、データベース、テーブル、そしてレコードも挿入した。

今回はVBSとVBAを使い、このSQL Serverに対してレコードの操作を行ってみたいと思う。

VBSとVBAで若干書き方が異なるので、その違いを確認しながら実行してみたいと思ったのです。

 

SQL Serverの構築について

SQL Serverの構築については下の記事でまとめている。

SQL Server Express 2017をインストールしリモート接続を可能にする

SQL ServerにSQLでデータベースを作成

SQL Serverにデータベースを作成する手順(SQL)については下の記事に書いた。

【SQLServer】データベース作成~データ挿入。一通りのSQL文(外部キー)

 

テーブルのデータ

SQL Server上のテーブルのデータは下記の通りとなっている。これからSQL文を実行していくので、少し頭に入れておいていただくと助かる。

[Users]テーブル

UserID GivenName FamilyName Age JoinDate FactoryID
U001 John Smith 33 NULL F001
U002 Raymond Non 45 NULL F002
U003 Bob Cruise 23 NULL F003




SELECT文でレコードを参照する

さて、まずはSELECT文でレコードを参照したいと思う。VBSとVBAのコードはそれぞれ下に書く。

内容は、[UserID]列が「U001」の[GivenName]列の値を参照する内容だ。「John」が表示されるはずだね。

VBS(SELECT文)

下を見てくれ。表示された。

VBA(SELECT文)

こちらも下を見てくれ。表示された。

 

INSERTでレコードを追加する

さて次はINSERT文で、レコードを追加してみたい。

下のレコードを追加することにする。ちなみに内容は適当なので気にしないでくれ。

UserID GivenName FamilyName Age JoinDate FactoryID
U004 Atie Kruga 53 NULL F002

VBS(INSERT文)

実行したら、さっそくSSMSでテーブルの状態を確認してみる。レコードが追加されたことが確認できる。

VBA(INSERT文)

結果の確認は同じだが、追加されたことが確認できる。当たり前だが、VBSで追加したレコードはDelete文で消してから、VBAを実行した。




UPDATE文でレコードを更新する

さて次はUPDATE文でレコードを更新してみよう。UsersテーブルのRaymondさんの[JoinDate]に今日の日付(2020/2/24)を入れる(更新)してみようと思う。

UserID GivenName FamilyName Age JoinDate FactoryID
U002 Raymond Non 45 NULL F002

⇓  ⇓  ⇓  ⇓  ⇓  ⇓  ⇓  ⇓  ⇓

UserID GivenName FamilyName Age JoinDate FactoryID
U002 Raymond Non 45 2020-02-24 F002

VBS(UPDATE文)

下を見てくれ。更新された。

VBA(UPDATE文)

実行してエラーが出なければOKだ。こちらもしっかりと更新してくれた。

 

Delete文でレコードを削除

さて、Delete文だね。ここだけの話だが、一回Where句を指定するのを忘れて、テーブルのデータをすべて消してしまった。ここだけの話だぜ。

くだらないジョークは置いといて、さっそくコードにいってみよう。Bobさんを消すぜ。

VBS(Delete文)

エラーは発生せず。Usersテーブルの全データを見てみるとちゃんと消えている。

VBA(Delete文)

こいつもうまくいった。エラーは発生せず、Bobのレコードが削除された。




まとめ

以下の違いがあるんじゃないか。

VBS VBA
オブジェクト変数の宣言
(ADODB.Connection)
Dim ‘変数名’
Set ‘変数名’ = CreateObject(“ADODB.Connection”)
Dim ‘変数名’ As New ADODB.Connection
データベースへの接続 同じ
SQL文の実行 ADODB.Commandオブジェクトを使用する。 ADODB.Commandオブジェクトを使用しない。