VBScriptを利用したプログラムは、SubプロシージャやFunctionプロシージャを利用してモジュール分割ができる。
今回は、ASP(Classic ASP)とVBScriptを利用してSQL Serverに接続するプログラムのうち、SQL Serverからユーザーデータリストを取得する部分をSubプロシージャで分割してみたので、そのプログラムを共有する。
なお、SubプロシージャでなくFunctionプロシージャを利用すると、戻り値を返却することができる。
前提条件
下記記事のASP(Classic ASP)とVBScriptを利用してSQL Serverに接続するプログラムの作成が完了していること。
ASP(Classic ASP)とVBScriptを利用してSQL Serverに接続するプログラムを作成してみたASP(Classic ASP)内でVBScriptを利用するプログラムにおいて、データベースに接続するプログラムを作成することができる...
サンプルプログラムの作成

なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。
ユーザーデータリストに設定する各値を定義したプログラムの内容は以下の通りで、privateなインスタンス変数とそのGetter/Setterに該当するメソッドをそれぞれ定義している。
<%
Class UserData
private id
private name
private birthDay
private sex
private memo
Public Sub setId(paramId)
id = paramId
End Sub
Public Function getId()
getId = id
End Function
Public Sub setName(paramName)
name = paramName
End Sub
Public Function getName()
getName = name
End Function
Public Sub setBirthDay(paramBirthDay)
birthDay = paramBirthDay
End Sub
Public Function getBirthDay()
getBirthDay = birthDay
End Function
Public Sub setSex(paramSex)
sex = paramSex
End Sub
Public Function getSex()
getSex = sex
End Function
Public Sub setMemo(paramMemo)
memo = paramMemo
End Sub
Public Function getMemo()
getMemo = memo
End Function
Public Sub toString()
Response.Write "UserData(id=" & id & ", name=" & name & ", birthDay=" _
& birthDay & ", sex=" & sex & ", memo=" & memo & ")"
End Sub
End Class
%>また、Subプロシージャで定義したプログラムの内容は以下の通りで、userData.incを読み込むと共に、SQL Serverからユーザーデータリストを取得している。
<!-- #include file="userData.inc" -->
<%
Sub GetUserDataList(ByRef userDataList)
'ユーザーデータリストを初期化する
Set userDataList = CreateObject("System.Collections.ArrayList")
'SQL Serverに接続する
Dim objCon
Dim objRS
Set objCon = CreateObject("ADODB.Connection")
objCon.Open "Driver={SQL Server};server=localhost;" _
& "database=master;uid=USER01;pwd=USER01;"
'USER_DATAテーブルから全データを取得する
Set objRS = objCon.Execute("SELECT * FROM dbo.USER_DATA")
Do Until objRS.EOF
'ユーザーデータを生成し、取得したデータを設定する
Dim userData
Set userData = New UserData
userData.setId(objRS("id").Value)
userData.setName(objRS("name").Value)
userData.setBirthDay(objRS("birth_year").Value & "年" _
& objRS("birth_month").Value & "月" _
& objRS("birth_day").Value & "日")
Dim sexVal
If objRS("sex").Value = "1" Then
sexVal = "男"
ElseIf objRS("sex").Value = "2" Then
sexVal = "女"
Else
sexVal = ""
End If
userData.setSex(sexVal)
userData.setMemo(objRS("memo").Value)
'ユーザーデータを追加する
userDataList.add userData
Set userData = Nothing
'次のレコードに進む
objRS.MoveNext
LOOP
'SQL Serverから切断する
objCon.Close
Set objRS = Nothing
Set objCon = Nothing
End Sub
%>さらに、ASPのプログラムの内容は以下の通りで、sub.incを読み込むと共に、Subプロシージャで取得したユーザーデータリストを画面に表示している。
<%@ LANGUAGE="VBScript" %>
<!-- #include file="sub/sub.inc" -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="Shift_JIS"/>
<title>SQLServer接続</title>
</head>
<body>
SQL Serverのユーザーデータテーブル(USER_DATA)から、全データを取得します。<br/><br/>
<%
'USER_DATAテーブルから全データを取得する
Dim userDataList
Call GetUserDataList(userDataList)
%>
<!-- ユーザーデータを表示する -->
<!-- データが無い場合は、メッセージを画面表示し終了する -->
<% If userDataList.Count = 0 Then %>
ユーザーデータテーブルにデータはありません。
<% Else %>
<table border="1" cellpadding="5">
<tr>
<th>ID</th>
<th>名前</th>
<th>生年月日</th>
<th>性別</th>
<th>メモ</th>
</tr>
<%
Dim user
For Each user In userDataList
%>
<tr>
<td><%= user.getId() %></td>
<td><%= user.getName() %></td>
<td><%= user.getBirthDay() %></td>
<td><%= user.getSex() %></td>
<td><%= user.getMemo() %></td>
</tr>
<% Next %>
</table>
<% End If %>
<%
'ユーザーデータリストをクリアする
userDataList.Clear
Set userDataList = Nothing
Set user = Nothing
%>
</body>
</html>サンプルプログラムの実行結果
以下の前提条件に記載した記事の、サンプルプログラムの実行結果と同じ結果になること。
ASP(Classic ASP)とVBScriptを利用してSQL Serverに接続するプログラムを作成してみたASP(Classic ASP)内でVBScriptを利用するプログラムにおいて、データベースに接続するプログラムを作成することができる...
要点まとめ
- VBScriptを利用したプログラムは、SubプロシージャやFunctionプロシージャに分割することができる。
- Subプロシージャの定義は、拡張子に.incをもつ別ファイルに定義し、呼び元のASPで「」を指定することで呼び出すことができる。
- VBScriptでは、Classを利用してprivateなインスタンス変数とそのGetter/Setterに該当するメソッドをそれぞれ定義できる。





