DB안의 내용을 웹상에 보여주기 - list.asp 작성

폼태그를 이용하여 웹상에서 방문자에게 어떤 정보를 입력 받아 이것을 Inset.asp 문서로 전달하고 Insert.asp 에서는 전달받은 정보를 지정된 DB안에 저장하였다. 이제 우리는 DB안의 내용을 꺼내와서 웹상에서 출력시키는 문제를 해결 해야 한다. 다음의 소스를 list.asp 라는 이름으로 작성한다.


<!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library"
      FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"  
-->
<%
Option Explicit
Dim strConnect
strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\DataStore\board.mdb"
Dim objConn,SQL,objRS
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnect
SQL = "select * from MyBoard"
Set objRS = objConn.Execute(SQL)

Response.Write "<table border=1 width=500>" & _
               "<tr>" & _
               "<td align=center>이름</td>" & _
               "<td align=center>제목</td>" & _
               "<td align=center>내용</td>" & _
               "</tr>"
Do while Not objRS.EOF
   Response.Write "<tr>" &_
              "<td align=center>" & objRS("b_name") & "</td>" & _
              "<td align=center>" & objRS("b_title") & "</td>" & _
              "<td align=center>" & objRS("b_comment") & "</td>" & _
              "</tr>"
    objRS.MoveNext
Loop
Response.Write "</table>"
Set objRS = nothing
Set objConn = nothing
%>


브라우저로 list.asp를 확인하면 다음과 같이 나온다. 참고로 list.asp를 확인하기 전에 먼저 write.html를 이용하여 몇개의 글을 DB안에 먼저 저장 놓도록 하자. 다음은 두 개의 글이 이미 저장되어 있는 것을 확인한 결과이다.



[소스에 대한 설명]

list.asp 문서는 우리가 만들고 있는 게시판의 최종 목적으로 방문객이 게시판을 보면 처음으로 접하는 부분이다. 물론 지금까지 작성한 게시판은 그 기능에 있어 아주 형편없는 것이지만 단순하게 방문자의 이름과 글제목, 글의 내용을 묻는 폼태그문서를 작성할 줄 알고 이것을 DB안에 삽입시키는 list.asp 문서와 출력을 담당하는 list.asp 문서를 이해하면 게시판 만들기의 가장 기초의 기초는 어느정도 이루어졌다고 봐도 무관하다. 이후에는 몇가지 기능을 추가하고 다른 고급기능을 추가하는 부분으로 진행이 될 것이다. 우선 list.asp 문서를 이해해보자.

list.asp 문서는 DB안의 내용을 웹상에 뿌려주는 것을 담당한다. 따라서 제일 먼저 해야 할 일을 DB안의 내용을 가져오는 것이고 두 번째는 이것을 뿌려주는 것이다.

DB안의 내용을 가져오는 방법은 간단하다 일단 DB에 DB안의 원하는 레코드셋에 접근하는 것이다. - 이 부분을
담당하는 개체가 바로 ADO의 RecordSet 개체이다. 따라서 우리는 이 개체를 이용하기 위하여 먼저 이 개체의
인스턴스값을 생성하고 이 개체를 사용하기 위한 대표이름에 대입한다.

strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\DataStore\board.mdb"
Dim objConn,SQL,objRS
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnect
SQL = "select * from MyBoard"
Set objRS = objConn.Execute(SQL)



자 이제 가져왔으므로 웹상에 뿌려주기만 하면 된다. 웹상에 뿌려주기 전에 먼저 어떻게 보여지게 할까를 결정한다. 예제 소스의 결과를 브라우저로 확인하면 테이블형태로 맨 상단에는 DB안의 필드꼴로 글쓴이의 이름과 제목, 글 내용을 보여지게 할 의도로 구성되어 있다. 그리고 DB안의 내용을 그 아래로 같은 순서를 지키며 반복해서 보여지고 있다는 것을 인식해야 한다. 따라서 전체적인 구조는 테이블로 만들어 주고 테이블안의 내용을 DB안의 내용으로 채워주면 그만이다.  먼저 전체적인 테이블의 구조를 만든다.

Response.Write "<table border=1 width=500>" & _
               "<tr>" & _
               "<td align=center>이름</td>" & _
               "<td align=center>제목</td>" & _
               "<td align=center>내용</td>" & _
               "</tr>"
Response.Write "</table>"



이 부분이 어떻게 보여지는가는 html 의 기본만 알면 금방 이해 할 수 있을 것이다. 그 다음 이름 아래에는 DB안의 이름필드의 내용이 보여지고 제목 아래에는 역시 DB안의 제목 필드가 보여지게 하면 된다. 즉 다음과 같이 해주면 간단하다.

Response.Write "<table border=1 width=500>" & _
               "<tr>" & _
               "<td align=center>이름</td>" & _
               "<td align=center>제목</td>" & _
               "<td align=center>내용</td>" & _
               "</tr>"
Response.Write "<tr>" & _
               "<td align=center>DB안의 이름필드내용</td>" & _
               "<td align=center>DB안의 제목필드내용</td>" & _
               "<td align=center>DB안의 내용필드안의 내용</td>" & _
               "</tr>"
Response.Write "</table>"



여기서 DB안의 내용은 각각의 필드명으로 구별하게 되는데 우린 이미 레코드셋에 DB안의 내용을 가져와 있으므로 레코드셋의 대표이름 objRS를 이용하여 objRS("b_name"), objRS("b_title"), objRS("b_comment")을 사용하면 그 값을 얻을 수 있다. 따라서 다음과 같이 바꿀 수 있다.

Response.Write "<table border=1 width=500>" & _
              "<tr>" & _
              "<td align=center>이름</td>" & _
              "<td align=center>제목</td>" & _
              "<td align=center>내용</td>" & _
              "</tr>" & _
              "<tr>" & _
              "<td align=center>" & objRS("b_name") & "</td>" & _
              "<td align=center>" & objRS("b_title") & "</td>" & _
              "<td align=center>" & objRS("b_comment") & "</td>" & _
               "</tr>"
Response.Write "</table>"



위와 같이 하면 레코드 셋중에서 맨 상위에 있는 레코드들의 정보만 보여주게 한다. 우리가 원하는 것은 DB안의 내용을 단순무식하게 모두 보여지게 하는 것이 목적이므로 우린 커서를 이용해서 처음 레코드의 정보를 출력하고 커서를 다음 레코드로 옮겨 다시 출력하고 ... 이것을 반복하다가 레코드셋의 마지막을 지나면 커서속성 EOF가 TRUE가 될 때 멈추게하면 그만이다. 이것을 소스와 같이 Do While 문을 이용해서 작성하였다.

Do while Not objRS.EOF
...
Loop



커서의 속성 EOF가 TRUE가 아닌동안 루프를 반복한다. 따라서 루프 안에 우리가 원하는 DB안의 내용출력부분을 삽입하면 레코드셋의 내용이 지정된 순서에 맞게 마지막 레코드의 내용까지 출력하게 되는 것이다.

처음 레코드의 내용을 출력하였으면 커서를 다음 레코드로 옮기는 방법은 objRS.MoveNext를 사용하면 된다.

Do while Not objRS.EOF
    Response.Write "<tr>" &_
              "<td align=center>" & objRS("b_name") & "</td>" & _
              "<td align=center>" & objRS("b_title") & "</td>" & _
              "<td align=center>" & objRS("b_comment") & "</td>" & _
                   "</tr>"
    objRS.MoveNext
Loop