글의 등록 날짜를 리스트 화면에 보여주도록 하자. 각각의 글을 올릴 때마다 올린 시간을 체크해서 DB에 저장해야 하므로 DB에 다음 그림처럼 글 등록 시간을 저장할 공간을 추가한다. 데이터형식은 날짜/시간으로 맞춘다.



글등록시간은 사용자가 입력폼에 정보를 입력하고 전송버튼을 눌러서 DB에 입력된 정보를 업데이트 시킬때의 시간을 잡아서 DB에 등록한다. 따라서 write.asp 문서는 손댈필요없고, 실제로 자료업시키는 문서 insert.asp 문서만 수정하고 등록된 시간을 리스트 모드에서 보여주면 된다. 먼저 insert.asp 문서를 다음과 같이 수정한다. 녹색부분이 추가된 부분이다.

<!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library" FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"  -->
<%
Option Explicit

Dim name, title, comment, email,home
name = Request.form("name")
title = Request.form("title")
email = Request.form("email")
home = Request.form("home")
comment = Request.form("comment")

Dim strConnect,objRS
strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\DataStore\board.mdb"
Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open "Myboard", strConnect, adOpenStatic, adLockPessimistic,adCmdTable

with objRS
.AddNew
.Fields("b_name") = name
.Fields("b_title") = title
.Fields("b_comment") = comment
      .Fields("b_ip") = Request.ServerVariables("REMOTE_ADDR")
      .Fields("b_email") = email
.Fields("b_home") = home
      .Fields("b_date") = now()
.Update
.Close
end with
Set objRS = nothing
Response.Write "insert ok"
%>


그 다음은 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><a href=mailto:" & objRS("b_email") & ">" & _
    objRS("b_name") & "</a></td>" & _
    "<td align=center><a href=./read.asp?key=" & _
    objRS("b_key") & ">" & objRS("b_title") & "</a></td>" & _
    "<td align=center>" & objRS("b_date") & "</td>" & _
    "</tr>"
    objRS.MoveNext
Loop

Response.Write "</table>"
Set objRS = nothing
Set objConn = nothing
%>


수정이 끝났으면 write.asp 문서를 브라우저로 로딩한후 글하나를 남긴다. 그리고 list.asp 문서를 보면 다음과 같음을 확인할 수 있다.



방금 쓴 글에만 날짜정보가 있고 이전에는 아무런 값도 없으므로 그림처럼 아무것도 나오지 않는다. 그리고 보시다시피 글쓴시간이 늦을수록 아래에 나온다는것을 알수 있다.

보통 게시판은 가장 최근에 쓴글이 가장 위에 나오게하는게 보통이니깐 여기서 list.aps 문서를 약간 수정하여 최근에 쓴글이 가장 먼저 나오도록 해보자. 그리고 list.asp 문서에서 글쓰기문서 write.asp문서를 링크시켜보다. 다음과 같이 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 order by b_key desc"
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><a href=mailto:" & _
    objRS("b_email") & ">" & objRS("b_name") & "</a></td>" & _
    "<td align=center><a href=./read.asp?key=" & _
    objRS("b_key") & ">" & objRS("b_title") & "</a></td>" & _
    "<td align=center>" & objRS("b_date") & "</td>" & _
    "</tr>"
    objRS.MoveNext
Loop

Response.Write "</table>"
Response.Write "<table border=0 width=500>" & _
               "<tr><td align=right><a href=write.asp>글쓰기</a></td></tr>" & _
               "</table>"


Set objRS = nothing
Set objConn = nothing
%>


다음은 수정후 list.asp 문서의 출력 결과이다. 우리가 원하던 대로 최근에 쓴글이 상단에 위치하고 있다.



그런데 여기서 날짜 부분의 출력이 너무 길다. 이 부분을 내가 원하는 형식의 날짜타입으로 바꾸어 보자. 예를 들어 2001/05/30 이라든지 2001:05:30 (16:40) 의 형식으라든지 또는 월과 일만 나오도록 하는 방법을 알아보자.

list.asp 문서에서 날짜를 얻는 방법은 레코드셋의 인스턴스값을 가진 변수 objRS 에 objRS("b_date") 하면 그 결과를 얻을 수 있다 이것을 이용하면 얻어지는 결과는 위의 그림에서와 같이 2001-05-13 오후 4:04:57의 형식으로 얻어지므로 우린 이것을 스트링 편집을 통해 원하는 대로의 시간형식을 얻어 낼 수 있다. 먼저 새로운 변수를 yymmdd라는 변수를 생성한다. 그리고 이 변수에 우리가 DB에서 얻은 시간을 대입한다.

Dim vDate,vYear,vMonth,vDay,vHour,vMin
vDate = objRS("b_date")
vYear = year(vDate)
vMonth = month(vDate)
vDay = day(vDate)
vHour = hour(vDate)
vMin = minute(vDate)

이렇게 하면 각각의 년,월,일,시,분을 새로운 변수에서 얻을 수 있다. year(vDate) 는 vDate 가 가지고 있는 부분에서 연도에 해당하는 부분만 리턴시킨다. 다른 부분도 마찬가지이다. 그런데 연도의 경우는 2001년 식으로 항상 4자리의 수를 가지고 있는 반면 달의 경우는 12월 11월 10월은 두자리 이지만 1월부터 9월은 한자리만 리턴된다. 이럴 경우 리스트 화면에 그냥 뿌려주면 자리수가 차이가 나는 경우 리스트화면이 볼상 스러워진다. 따라서 자리수를 같게 한다.

month(vDate) 하면 리턴되는 것은 1-12의 수가 리턴된다. 어떤 수가 리턴되던간데 무조건 0를 앞에 붙이고 뒤에서부터 두자리만 출력시킨다. 예를 들어 12 가 리턴되면 0를 앞에 붙이면 012 이것을 뒤에서 2자리만 출력시키면 12 가 된다. 또  1 이 리턴되면 앞에 0을 붙이고 01 역시 뒤에서 두자만 리턴시키면 01의 값을 얻을 수 있다. 이것은 right 함수를 이용한다. day 역시 마찬가지로 1-31 까지의 수가 리턴 가능하므로 역시 자리수를 맞추어 준다. 시간 역시 0에서 23까지 리턴 되므로 자리수를 맟추고 분 역시 0분에서 59까지 리턴되므로 역시 같은 방식으로 자리수를 맞춘다.

vYear = year(vDate)
vMonth = right("0" & month(vDate) , 2)
vDay = right("0" & day(vDate), 2)
vHour = right("0" & hour(vDate),2)
vMin = right("0" & minute(vDate),2)

하지만 최종적으로 출력하는 부분은 날짜 부분이므로 이것을 조합해서

vDate =  vYear & "/" & vMonth & "/" & vDay & " (" & vHour & ":" & vMin & ")"

의 형식으로 만들어 주면 된다. 이부분은 날짜가 출력되는 list.asp 문서에서 해주어야 한다. 자 또 수정하자 list.aps 문서를 다음과 같이 수정해본다.

<!--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 order by b_key desc"
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>"

Dim vDate,vYear,vMonth,vDay,vHour,vMin

Do while Not objRS.EOF
    vDate = objRS("b_date")
    vYear = year(vDate)
    vMonth = right("0" & month(vDate) , 2)
    vDay = right("0" & day(vDate), 2)
    vHour = right("0" & hour(vDate),2)
    vMin = right("0" & minute(vDate),2)
    vDate =  vYear & "/" & vMonth & "/" & vDay & " (" & vHour & ":" & vMin & ")"


    Response.Write "<tr>" &_
    "<td align=center><a href=mailto:" & objRS("b_email") & ">" & objRS("b_name") & "</a></td>" & _
    "<td align=center><a href=./read.asp?key=" & _
    objRS("b_key") & ">" & objRS("b_title") & "</a></td>" & _
    "<td align=center>" & vDate & "</td>" & _
    "</tr>"
    objRS.MoveNext
Loop

Response.Write "</table>"
Response.Write "<table border=0 width=500>" & _
               "<tr><td align=right><a href=write.asp>글쓰기</a></td></tr>" & _
               "</table>"

Set objRS = nothing
Set objConn = nothing
%>


다음은 수정후 화면이다. 시간 부분이 멋지게 바뀌었다.