ASP/VBScript

ASP(Classic ASP)とVBScriptを利用したプログラムをSubプロシージャに分割してみた

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を利用するプログラムにおいて、データベースに接続するプログラムを作成することができる...

サンプルプログラムの作成

サンプルプログラムの構成は、以下の通り。
サンプルプログラムの構成_1

サンプルプログラムの構成_2

なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

ユーザーデータリストに設定する各値を定義したプログラムの内容は以下の通りで、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に該当するメソッドをそれぞれ定義できる。