DB를 이용한 데이타 출력 확장 - 로딩 메시지 보이기
이제! 지금까지 배운것을 확장해보자! 처리할 양이 많아서 페이지가 느려진다고 보자. 예를 들자면..검색을 했을 경우이다. 검색을 했을경우 좀 큰 사이트의 경우 검색결과 페이지가 늦게 뜬다. 참고로 내가 맡고 있는 사이트의 경우 테이블의 조인에..뷰의 조인에.. 등등 해서 어떤 데이타를 가져올때는 1분이 넘는 경우도 있다 -_-;;; 이럴경우 그 보려는 페이지는 흰색으로 보이면서(마치 다운된것처럼) 로딩을 계속 하고 있는것이다. 이것을 TDC를 이용하면 좀 더 보기 좋게 만들수 있다. 다음을 보자

list_asp_ex2.asp

<%
' 변수 선언및 초기화
Dim DBCon
Dim strConn
Dim strQry
Dim szHead
Dim szBody
szHead  = ""
szBody  = ""
strConn = ""

' DB 연결 문자 변수
strConn = strConn&"Provider=SQLOLEDB.1;Persist Security Info=True;"
strConn = strConn&"Data Source=localhost;"     ' Server Name
strConn = strConn&"User ID=sa;"                ' User ID
strConn = strConn&"Password=;"     ' User Password
strConn = strConn&"Initial Catalog=NorthWind;" ' DataBase

' DB 객체 생성및 DB 오픈
Set DBCon = Server.CreateObject("ADODB.Connection")
DBCon.Open strConn    

' 쿼리문 실행결과를 레코드셋으로 반환
strQry = "select CustomerID,CompanyName,ContactName from Customers"
Set rs = DBCon.Execute(strQry)
Do While not rs.eof
    db_CustomerID  = rs(0)
    db_CompanyName = rs(1)
    db_ContactName = rs(2)
    
    ' TDC 형식으로 데이타를 가공한다.
    szBody = szBody&"|"& db_CustomerID  &"|¶"
    szBody = szBody&"|"& db_CompanyName &"|¶"
    szBody = szBody&"|"& db_ContactName &"|^"
    rs.MoveNext()
Loop

' TDC 형식으로 헤더를 만든다.
szHead = "CustomerID¶CompanyName¶ContactName^"

' 데이타가 나오는 속도를 늦추기 위해서 쓰레기 루프를 돌린다. -_-
for i = 0 to 10000000 : next

Response.Write szHead
Response.Write szBody
%>

list_asp_ex2.htm

<OBJECT id=List CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
    <PARAM NAME="UseHeader" VALUE="true">
    <PARAM NAME="DataURL" VALUE="list_asp_ex2.asp">
    <PARAM NAME="TextQualifier" VALUE="|">
    <param NAME="FieldDelim" VALUE="¶">
    <PARAM NAME="RowDelim" VALUE="^">
    <PARAM NAME="CharSet" VALUE="euc-kr">
</OBJECT>
<SCRIPT for="List" event="ondatasetcomplete">
    loading.style.display = "none";
</SCRIPT>
<table border="1" DataSrc="#List">
    <thead>
    <tr>
        <th>CustomerID</th>
        <th>CompanyName</th>
        <th>ContactName</th>
    </tr>
    <tr id="loading">
        <td colspan="3" align="center">데이타를 읽는 중입니다. 잠시만 기다려 주세요...</td>
    </tr>
    </head>
    <tbody>
    <tr>
        <td><span datafld="CustomerID" DATAFORMATAS="HTML"></span></td>
        <td><span datafld="CompanyName" DATAFORMATAS="HTML"></span></td>
        <td><span datafld="ContactName" DATAFORMATAS="HTML"></span></td>
    </tr>
    </tbody> 
</table>

2-11.gif 

처음엔 위와같이 메시지가 나오다가 시간이 조금 지나면 다음과 같이 나온다

2-12.gif 

list_asp_ex2.asp 페이지를 보면 이전에 보았던 list_asp.asp 페이지에서 한줄 코드만 추가하였다.

for i = 0 to 10000000 : next

이 코드를 추가해서 일부로 데이타가 늦게 뿌려지도록 하였다. (심심하다고 10000000 에서 공하나 뒤에 더 붙이지 말아라 장난아니게 늦게 나온다. -_-;) 이번엔 list_asp_ex2.htm 페이지를 보자. 2곳에 코드가 추가되었다.

<tr id="loading">
    <td colspan="3" align="center">데이타를 읽는 중입니다. 잠시만 기다려 주세요...</td>
</tr>

테이블을 살펴보면 위와같은 코드를 추가했다. tr 태그를 하나 추가하여 거기에 id 값을 할당하였다. 중요한 것은 이 태그는 <thead></thead> 이나 <tfoot></tfoot> 안에 위치해야한다.<tbody></tbody> 안에 위치하면 그 tr 태그안에 있는 메시지까지 루프돌면서 보인다. -_-

<SCRIPT for="List" event="ondatasetcomplete">
    loading.style.display = "none";
</SCRIPT>

자바스크립트를 이용해서 List 객체가 데이타를 모두가져왔을시 실행되는 코드이다. 데이타를 모두 가져오는 이벤트가 발생하였을때 id값이 loading을 가진 객체는 숨겨지도록 하였다. 즉 데이타가 모두 가져올 시점은 list_asp_ex2.asp 파일이 실행이 다 되었을 경우인데 그 동안은 "데이타를 읽는 중입니다. 잠시만 기다려 주세요..." 메시지가 보이고 데이타를 모두 가져오면 이 메시지를 보이는 태그는 안보이도록 숨기는것이다. (SCRIPT 태그의 for, event 속성을 유의해서 살펴보자)

여기서는 event의 속성에 ondatasetcomplete란 값이 할당되어 있는데 이 이벤트 이외에도 여러가지 있는데 이러한 부분들은 각자 검색해봐라..음..사실은 그 event 들 여기다가 적으려고 했는데 꽤 많다. -_- 그래서 귀찮아서 안적으려고 한다. -_- 정 궁금하면 empas 같은데 가서 ondatasetcomplete 이런식으로 검색해보면 나온다. -_-