레이블이 ASP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ASP인 게시물을 표시합니다. 모든 게시물 표시

2009년 11월 16일 월요일

ADODB.Stream을 이용한 파일다운로드 소스

ADODB.Stream을 이용한 파일다운로드 소스

==================================================================================


파일 다운로드시 바로열기를 하거나 할때 브라우저에 따라 문제가 발생할때 사용가능한 모듈 입니다.

[download.asp]


<% Option Explicit %>
<%
Dim fileName,filepath,file
Dim objFS,objF,objDownload
Dim pathname ,objStream,download
Dim file_split

file= request("fileName")
filePath = request("filePath")
pathname = Server.MapPath(filePath)&"\"&file

'파일 이름
Response.ContentType = "application/unknown"
'ContentType 를 선언합니다.
Response.AddHeader "Content-Disposition","attachment; filename=" & file
'헤더값이 첨부파일을 선언합니다.
Set objStream = Server.CreateObject("ADODB.Stream")
'Stream 을 이용합니다.
objStream.Open
'무엇이든 Set 으로 정의했으면 열어야 겠지요^^
objStream.Type = 1
objStream.LoadFromFile pathname
download = objStream.Read
Response.BinaryWrite download
'이게 보통 Response.Redirect 로 파일로 연결시켜주는 부분을 대신하여 사용된 것입니다.
Set objstream = nothing
'초기화시키구요.
%>

[사용방법]


<a href="http://localhost/download.asp?filePath=/file/&fileName=filename.hwp" target="_blank">filename.hwp</a>

2009년 11월 10일 화요일

SiteGalaxyUpload.Form.1 오류 '80004005'

SiteGalaxyUpload.Form.1 오류 '80004005'

Failed to read binary data.

이런 오류를 접하는 경우 다음의 방법으로 해결 가능

   1. IIS Admin Service 중지
      시작 ==> 실행 ==> IISReset /Stop

   2. C:\Windows\system32\inetsrv\metabase.xml 수정
         1. 메모장 같은 편집 도구를 이용하여 해당 파일을 불러온다.
         2. AspMaxRequestEntityAllowed 항목을 찾는다.
         3. 204800 라는 값이 들어있다.
            1024B[1KB] * 200 ==> 204800[200KB]
            1024B[1KB] * 2000 ==> 2048000[2000KB] ==> 2MB
            원하시는 용량을 계산하여 Byte 단위로 넣는다.
         4. 저장후 닫기

   3. IIS Admin Service 재시작
      시작 ==> 실행 ==> IISReset /Start

위의 순서대로 진행하신 후 페이지를 확인한다.

만약 그래도 오류가 난다면... 보통 업로드하시려는 용량이 계산하여 입력한 값보다 큰 경우가 많습니다.
조금 더 넉넉한 용량으로 입력하신 후 테스트 해볼 것을 권장(?) 합니다 ㅋ

ASP :: 파일 업로드/다운로드 구현하기

출처 : ASP 학습 ( http://flashcafe.org/asp_study/3895/page/3 )


인터넷에는 매우 많은 파일 업로드 관련 컴포넌트가 떠돌아다니고 있다. 어떤 것들은 비용을 지불하고 구입해야 하는 것도 있으며,어떤 것은 공짜로 기능에 제한 없이 사용하는 것들도 있다. 이번에 설명하는 파일 업로드/다운로드 구현은 SiteGalaxytUpload 라는 컴포넌트를 이용하여 파일 업로드를 구현하는 방법을 설명하도록 한다.
이 컴포넌트는 ASP 기반 자료실을 제작하는 데 많은 도움이 될 것이다.





● 왜 파일 업로드는 별도로 제공되는 컴포넌트를 사용해야 하는가?


애석하게도, FileSystemObject나 ADODB.RecordSet 등을 통해서는 파일 업로드를 직접 구현할 수 없다. 왜냐하면, 파일을 서버에 보내기 위해서는 FORM 태그에서 ENCTYPE="multipart/form-data"라는 속성을 넣어 주어야 하는데, 이렇게 되면 ASP에서는 Request.Form 개체를 사용하지 못하게 된다.


결국, 파일을 업로드하기 위해서는 파일도 받아들일 수 있고, 입력 양식 데이타도 동시에 받아들일 수 있는 기능을 가진 별도의 컴포넌트를 이용해야 한다. 이를 위하여, 인터넷 상에는 파일 업로드를 구현해 주는 수 많은 컴포넌트가 있는데, 그 중 우리는 사용하기 쉬운 SiteGalaxyUpload 라는 이름의 컴포넌트를 사용해 보도록 한다.





● SiteGalaxyUpload 사용방법


1) SiteGalaxyUpload 컴포넌트 설치



  1. 먼저, 파일(SiteGalaxyUpload.zip, 169 KB)을 다운로드 받는다.
  2. 다운받은 파일을 C:\Windows\System32 폴더에 복사한다.
  3. 작업 표시줄의 [시작] → [실행]을 클릭한다. 그리고 아래와 같이
    regsvr32 SiteGalaxyUpload.dll 을 입력하고 [확인]을 누른다

    (추가1)
    SiteGalaxyUpload.dll 파일!  

    아래 파일을 설치후에 첨부 DLL 파일을 c:\windows\system32 에 다운 후,
    시작 ->실행-> regsvr32 sitegalaxyupload.dll 엔터

    ##### OPEN #####

    참고로 SiteGalaxyUpload.dll 파일의 속성에서 Everyone 이 추가되어야 게시판 글 등록이 가능합니다.




  4. 4번의 과정이 성공적으로 이루어졌으면 아래와 같은 메세지를 볼 수 있다.

    "DllRegisterServer in c:tempSiteGalaxyUpload.dll succeeded."

    이 메세지는 윈도우즈 레지스트리에 컴포넌트 정보가 이상없이 등록되었다는 뜻이며 이것으로 컴포넌트 설치는 완료된 것이다.

2) 파일 업로드 페이지 제작


아래와 같이 HTML 문서를 만들고, upload.htm 이라는 이름으로 저장한다.


<HTML>
<BODY>
<FORM METHOD=POST ACTION=upload.asp ENCTYPE="multipart/form-data">
<INPUT TYPE=FILE NAME=FILE1 VALUE="검색..."><P>
<INPUT TYPE=SUBMIT VALUE="파일 업로드">
</FORM>
</BODY>
</HTML>

그 다음은, 파일을 업로드하는 upload.asp를 아래와 같이 작성한다.


<%
Set uploadForm = Server.CreateObject("SiteGalaxyUpload.Form")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
uploadForm("FILE1").SaveAs( _
"c:temp" & fso.GetFileName(uploadForm("FILE1").FilePath))
Response.Write("File Upload Success!")
%>

이제, 예제를 테스트 해 본다. 먼저, upload.htm을 웹 브라우저로 연다.




[찾아보기...]버튼을 눌러 나타나는 대화 상자에서, 아무 파일이나 하나 선택한다.
여기서는 C:bootlog.txt 파일을 첨부해보도록 한다.




이제, [파일 업로드] 버튼을 누르면, 파일이 웹 서버에 업로드된다. 이 파일이 제대로 업로드 되었는가를 확인하려면 탐색기에서 C:TEMP 디렉토리를 찾아가 확인하면 된다.





● 간단한 자료실 만들기


실제 자료실은, 단순히 파일만 업로드하고 다운로드하는 것이 아니라, 업로드된 파일에 대한 각종 정보가 관리되는 일종의 게시판 기능이 들어가야 한다.
이번에는, 파일 업로드 기능 및 다운로드 기능이 구현된 간단한 자료실을 구축하는 예를 들어보도록 한다.


먼저, 자료실에 파일을 업로드하는 HTML 문서는 앞서 설명한 페이지를 약간 수정해서 제작한다. 자료실에 업로드될 파일에 대한 정보를 기록하는 입력 양식을 추가하도록 한다.


1) Upload.htm
아래는 새로 바뀌는 upload.htm 이다.






<HTML>
<HEAD><TITLE>자료 업로드</TITLE></HEAD>
<BODY BGCOLOR=ffffff>
<CENTER>
<H1>자료 업로드</H1>
<A HREF=ViewList.asp>목록 보기</A>
<HR>
<FORM METHOD=POST ACTION=upload.asp ENCTYPE="multipart/form-data">
<TABLE BORDER=0 ALIGN=CENTER>
<TR>
<TD>자료 제목 : </TD>
<TD><INPUT TYPE=TEXT NAME=TITLE SIZE=30></TD>
</TR>
<TR>
<TD COLSPAN=2>자료 설명 : <BR>
<TEXTAREA NAME=DESC ROWS=10 COLS=50 WRAP=OFF></TEXTAREA></TD>
</TR>
<TR>
<TD COLSPAN=2><INPUT TYPE=FILE NAME=FILE1 VALUE="검색..."></TD>
</TR>
<TR>
<TD COLSPAN=2><INPUT TYPE=SUBMIT VALUE="파일 업로드"></TD>
</TR>
</TABLE>
</FORM>
</CENTER>
</BODY>
</HTML>



 


2) Upload.asp
이제 upload.asp를 수정하자. upload.asp는 파일 업로드 기능 및 위의 입력 양식에서 입력된 파일에 대한 정보들을 입력받아 [방명록 만들기]에서 본 FileSystemObject 개체를 이용하여 목록 파일을 만들 수 있는 기능이 추가된다.






<%

' Program Name : Upload.asp

Dim uploadform
Dim fso
Dim f
Dim id
Dim myLine

Set uploadform = Server.CreateObject("SiteGalaxyUpload.Form")

' Upload를 수행한다.
If Trim(uploadform("TITLE")) = "" Or _
Trim(uploadform("DESC")) = "" Or _
uploadform("FILE1").Size = 0 Then
Call NoRequiredField
Else
FilePath = "d:dataasptutuploadupload_data"
ListPath = "d:dataasptutuploadupload_list"

' id.txt를 열어 등록된 자료건수를 1 증가시키고 저장한다.
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set id = fso.OpenTextFile(ListPath & "id.txt")
NewID = id.ReadLine
NewID = NewID + 1
Set id = Nothing
Set id = fso.CreateTextFile(ListPath & "id.txt", True)
id.WriteLine NewID
Set id = Nothing

' 업로드된 파일을 다른 이름으로 저장한다.
uploadform("FILE1").SaveAs(FilePath & NewID & "." & _
fso.GetExtensionName(uploadform("FILE1").FilePath))

' 입력 양식으로 넘어온 정보들을 가지고 자료실 목록 파일을 만든다.
Set f = fso.CreateTextFile(ListPath & NewID & ".txt", True)
f.WriteLine uploadform("TITLE")

' 파일명
f.WriteLine fso.GetFileName(uploadform("FILE1").FilePath)

' 다른 이름으로 저장된 파일명
f.WriteLine FilePath & NewID & "." & _
fso.GetExtensionName(uploadform("FILE1").FilePath)

' MIME HEADER
f.WriteLine uploadform("FILE1").MimeType & "/" & _
uploadform("FILE1").MimeSubtype

' 파일크기
f.WriteLine uploadform("FILE1").Size

' 조회수
f.WriteLine "0"

' Download수
f.WriteLine "0"

' 파일에 대한 설명
f.WriteLine Replace(uploadform("DESC"), vbCr, "<BR>")

Set f = Nothing
Set fso = Nothing
Call OK
End If

Set uploadform = Nothing

Sub NoRequiredField
Response.Write "<HTML>"
Response.Write "<HEAD><TITLE>Error</TITLE></HEAD>"
Response.Write "<BODY BGCOLOR=ffffff>"
Response.Write "<H1>Error!</H1>"
Response.Write "<HR>"
Response.Write "자료, 자료 제목, 자료 설명은 반드시 입력하셔야 합니다."
Response.Write "확인하시고 다시 입력해 주십시오.<P>"
Response.Write "<A HREF=javascript:history.back()>Back</A>"
Response.Write "</BODY></HTML>"
End Sub

Sub OK
Response.Write "<HTML>"
Response.Write "<HEAD><TITLE>Success</TITLE></HEAD>"
Response.Write "<BODY BGCOLOR=ffffff>"
Response.Write "<H1>Success!</H1>"
Response.Write "<HR>"
Response.Write "File Upload에 성공하였습니다.<P>"
Response.Write "<A HREF=ViewList.asp>목록 보기</A>"
Response.Write "</BODY></HTML>"
End Sub
%>

자료실 목록에 관련된 파일들은 모두 ListPath 변수에 지정된 디렉토리에, 실제 업로드되는 파일들은 모두 FilePath 변수에 지정된 디렉토리에 저장되게 된다. 이 변수들은 나머지 ASP 프로그램에도 똑같이 적용된다.
SiteGalaxy.Form 개체가 생성되면 위와같이 컬렉션의 형태로 입력 양식의 값들을 참조할 수 있다. 그런데, 하나 주의할 점은 HTML 입력 양식에서 정의된 입력 양식 이름(NAME 속성)과 컬렉션을 참조하는 키(Key) 값은 대소문자를 구분한다는 점이다.


즉, HTML 입력 양식에



<INPUT TYPE=FILE NAME=FILE1>


이라고 정의해 놓고



uploadform("file1")


을 참조하게 되면 에러가 발생한다. 반드시 uploadform("FILE1") 으로 수정해 주어야 한다. 이는 SiteGalaxyUpload 컴포넌트 자체의 버그인 것 같다.
그 외, 목록 파일을 만드는 기법은 지난번에 설명한 파일 시스템 기반 방명록과 다를 것이 없다.


3) ViewList.asp
다음은, 목록 파일들의 리스트를 보여주는 ViewList.asp의 소스이다.






<%

' Program Name : ViewList.asp

Dim fArray
Set fso = Server.CreateObject("Scripting.FileSystemObject")
ListPath = "d:Dataasptutuploadupload_list"
Set fldr = fso.GetFolder(ListPath)
Set fc = fldr.Files
For Each fn in fc
If fn.Name <> "id.txt" Then
fNames = fNames & "/" & fn.Name
End If
Next
fArray = Split(fNames, "/")

Response.Write "<HTML>"
Response.Write "<HEAD><TITLE>자료실</TITLE></HEAD>"
Response.Write "<BODY BGCOLOR=ffffff>"
Response.Write "<CENTER><H1>자료실</H1>"
Response.Write "<A HREF=upload.htm>업로드</A>"
Response.Write "<HR>"
Response.Write "<TABLE BORDER=1>"
Response.Write "<TR>"
Response.Write "<TH>제목</TH><TH>파일명</TH><TH>SIze</TH>"
Response.Write "<TH>조회</TH><TH>Download</TH>"
Response.Write "</TR>"

For i = UBound(fArray) To 1 Step -1
Set f = fso.OpenTextFile(ListPath & fArray(i))
Call PrintList(Left(fArray(i), Len(fArray(i)) - 4), _
f.ReadLine, f.ReadLine, f.ReadLine, f.ReadLine, f.ReadLine, f.ReadLine, f.ReadLine)
Next

Response.Write "</TABLE><P>"
Response.Write "<A HREF=upload.htm>업로드</A>"
Response.Write "</CENTER>"
Response.Write "</BODY>"
Response.Write "</HTML>"

Set fc = Nothing
Set fldr = Nothing
Set fso = Nothing

Sub PrintList(id, title, filename, realfilename, mimeheader, filesize, read, download)
Response.Write "<TR><TD>" & title & "</TD>"
Response.Write "<TD><A HREF=ViewDetail.asp?id=" & id & ">" & filename & "</A></TD>"
Response.Write "<TD ALIGN=RIGHT>" & filesize & "</TD>"
Response.Write "<TD ALIGN=RIGHT>" & read & "</TD>"
Response.Write "<TD ALIGN=RIGHT>" & download & "</TD></TR>"
End Sub
%>

아래는 ViewList.asp의 실행 결과이다.




ViewList.asp는 이전에 설명했던 방명록 목록보기 소스를 약간 수정한 것 밖에 없다.


4) ViewDetail.asp
이제는, 자료실의 목록을 클릭했을 때 다운로드 받을 수 있도록 하는 ViewDetail.asp 를 제작하도록 한다.






<%

' Program Name : ViewDetail.asp

Set fso = Server.CreateObject("Scripting.FileSystemObject")
ListPath = "d:Dataasptutuploadupload_list"
Set f = fso.OpenTextFile(ListPath & Request.QueryString("id") & ".txt")
title = f.ReadLine
filename = f.ReadLine
realfilename = f.ReadLine
mimeheader = f.ReadLine
filesize = f.ReadLine
read = f.ReadLine
download = f.ReadLine

' ReadAll 메소드보다는 이런 방법을 사용할 것을 권장한다.
Do While f.AtEndOfLine <> True
desc = desc & f.ReadLine
Loop

Set f = Nothing

' 조회건수를 증가시키고 파일에 저장한다.
Set f = fso.CreateTextFile(ListPath & Request.QueryString("id") & ".txt", True)
read = read + 1
f.WriteLine title
f.WriteLine filename
f.WriteLine realfilename
f.WriteLine mimeheader
f.WriteLine filesize
f.WriteLine read
f.WriteLine download
f.WriteLine desc
Set f = Nothing

' 자료에 대한 상세정보를 표시하고 다운로드 받을수 있도록 한다.
Response.Write "<HTML>"
Response.Write "<HEAD><TITLE>자료실</TITLE></HEAD>"
Response.Write "<BODY BGCOLOR=ffffff>"
Response.Write "<CENTER><H1>자료실</H1>"
Response.Write "<A HREF=upload.htm>업로드</A> "
Response.Write "<A HREF=ViewList.asp>목록 보기</A>"
Response.Write "<HR>"
Response.Write "<TABLE BORDER=1>"
Response.Write "<TR><TD>제목</TD><TD>" & title & "</TD></TR>"
Response.Write "<TR><TD>파일명</TD><TD>" & filename & "</TD></TR>"
Response.Write "<TR><TD>Size</TD><TD>" & filesize & "</TD></TR>"
Response.Write "<TR><TD>조회</TD><TD>" & read & "</TD></TR>"
Response.Write "<TR><TD>Download</TD><TD>" & download & "</TD></TR>"
Response.Write "<TR><TD COLSPAN=2>"
Response.Write "<A HREF=Download.asp?id=" & Request.QueryString("id") & ">"
Response.Write "Click Here To Download" & "</A></TD></TR>"
Response.Write "<TR><TD COLSPAN=2>" & desc & "</TD></TR>"
Response.Write "</TABLE>"
Response.Write "</CENTER></BODY></HTML>"
%>

위의 소스에서는, 지금까지 썼던 ReadAll 메소드 대신에 TextStream 개체의 AtEndOfLine 속성을 이용한 것을 볼 수 있다.
사 실, ReadAll 메소드에는 약간의 버그가 있는데, 항상 마지막 라인에 vbCr 문자를 꼭 추가해서 문자열에 저장하는 점이 문제가 된다. 이렇게 되면 계속해서 ViewDetail.asp가 호출될 때마다 목록 파일의 끝에는 vbCr 문자가 계속해서 더해지게 되므로, 파일 저장시 쓸데없는 개행 문자들이 늘어난다는 문제가 있어서 부득이하게 이러한 방법을 사용하였다.


아래는 ViewDetail.asp의 실행 결과이다.





5) Download.asp
이제 마지막으로, Download.asp를 제작한다.
SiteGalaxyUpload.FileSystemObject 개체에는 OpenBinaryFile 이라는 메소드가 있는데, 이 메소드와 Response 개체의 BinaryWrite 메소드를 이용하면 파일 시스템으로부터 파일을 다운로드 받을 수 있다. 이미, upload.asp에서 해당하는 파일의 MIME 헤더를 목록 파일에 기록해 놓아 두었으므로, 그에 따라 Response.ContentType을 지정해서 클라이언트에 MIME 헤더를 내려 보낼 수 있다. 그리고, 다운로드 될 때는 다운로드 횟수를 조회수를 증가시키는 방법을 이용해서 1씩 증가시킨다. 아래는 소스이다.






<%

' Program Name : Download.asp

ListPath = "d:Dataasptutuploadupload_list"

Set fso = Server.CreateObject("Scripting.FileSystemObject")

' 목록 파일을 열고 정보를 가져온다.
Set f = fso.OpenTextFile(ListPath & Request.QueryString("id") & ".txt")
title = f.ReadLine
filename = f.ReadLine
realfilename = f.ReadLine
mimeheader = f.ReadLine
filesize = f.ReadLine
read = f.ReadLine
download = f.ReadLine

Do While f.AtEndOfLine <> True
desc = desc & f.ReadLine
Loop
Set f = Nothing

' Download 건수를 증가시키고 파일에 저장한다.
Set f = fso.CreateTextFile(ListPath & Request.QueryString("id") & ".txt", True)
download = download + 1
f.WriteLine title
f.WriteLine filename
f.WriteLine realfilename
f.WriteLine mimeheader
f.WriteLine filesize
f.WriteLine read
f.WriteLine download
f.WriteLine desc

Set f = Nothing
Set fso = Nothing

' SiteGalaxyUpload.FileSystemObject 객체를 생성한다.
Set fso = Server.CreateObject("SiteGalaxyUpload.FileSystemObject")

Response.Expires = 0
Response.Buffer = True
Response.Clear

' MIME Header를 목록 파일에 등록된 값으로 설정한다.
Response.ContentType = mimeheader

' OpenBinaryFile 메소드를 이용해서 파일 시스템의 파일을 가져온다.
Set f = fso.OpenBinaryFile(realfilename, 1, False)

' BinaryWrite 메소드를 이용해서 클라이언트에 자료를 전송한다.
Response.BinaryWrite f.ReadAll
Response.End

Set f = Nothing
Set fso = Nothing
%>




이 강좌 한 Chapter를 만들기 위해서 참 여러곳을 뒤졌다. 파일 업로드에 관련된 여러가지 컴포넌트를 테스트해 볼 수 있었던 시간이었는데 마음에 드는 것을 고르기가 참 힘들었다. 하지만, 위의 소스만으로도 조금만 응용하면 멋진 ASP기반 자료실을 구축하는데는 많은 도움이 될 것이다.


ASP 게시판 출력할 글번호 계산하기

게시판에서 글번호를 단순히 index 번호로 출력하는것이 아니라
전체 글의 수와 페이지수, 그리고 페이지 사이즈를 통해서 출력될 글번호를 계산하여 출력하게된다.
처음하는것이라 어리벙벙하지만 기억에 남기기위해 메모를 남긴다.... 후훗~!

============(소스 원문)======================================================================

'###################### 글번호 GET 전달값 유무 확인 - START ######################
if request.QueryString("pnum")<>"" then
    session("pnum") = request.QueryString("pnum")
else
    session("pnum") = 1
end if
'###################### 글번호 GET 전달값 유무 확인 - END ######################


'#################### START번호 GET 전달값 유무 확인 - START ####################
if Request.QueryString("startpg")<>"" then
    startpg = Request.QueryString("startpg")
else
    startpg = 1
end if
'#################### START번호 GET 전달값 유무 확인 - END ####################


'##### 페이지 & 리스트 사이즈 설정 #####
pgsize = 3
pglist = 5 '//한페이지당 출력될 페이지 리스트 갯수


'###### Page Size 설정 ######
rs.pagesize = pgsize '//한 페이지에 나오는 게시글 수 지정할수있음
   

'###### 현재 Page 설정 ######
rs.absolutepage = session("pnum") '//저장된 세션변수(페이지번호)를 현재페이지 속성값에 저장
   

'###### 전체 레코드수 추출 ######
totrecord = rs.recordcount '//전체 레코드수


'###### DATA 출력 - START ######
   
i=1
do until rs.eof or i>rs.pagesize '// = do while not (rs.eof or i>rs.pagesize)

    '##### 글번호 계산 #####
    rowsnum = totrecord - ((rs.absolutepage-1)*pgsize)+(i-1)

    Response.write("No.&nbsp;<b><%=rowsnum%></b><br>") '//글번호 출력

    i=i+1
    rs.movenext
loop
   
'###### DATA 출력 - END ######

ASP 게시판 :: 페이징하기 - PageSize, PageList....

ASP 공부를 하면서...(학원을 다니면서 ㅋㅋ) 게시판을 만들어 보게 되었는데
아~~ 게시판에 페이징에 관련되어서 아따메!!
잘 않된다... 자꾸 오류가난다..  검색을 해봐도 잘 나오지를 않았다
그래서 이거 또 잊어먹을세라 이렇게 흔적을 남기게 되었다.... 훌쩍;;
머리 나빠서 미칠지경이라는...ㅋㅋㅋㅋㅋ
아래는 내가 했던 소스의 일부분씩을 짤라넣기 한것이다

=======(소스 원본)==========================================================================


'##### 페이지 & 리스트 사이즈 설정 #####
pgsize = 3
pglist = 5 '///한페이지당 출력될 페이지 리스트 갯수

'###### Page Size 설정 ######
rs.pagesize = pgsize '한 페이지에 나오는 게시글 수 지정할수있음
   
'###### 현재 Page 설정 ######
rs.absolutepage = session("pnum")
   
'###### 전체 레코드수 추출 ######
totrecord = rs.recordcount '///전체 레코드수

<%
'######################### PAGE LIST 출력 & 링크 - START #########################
%>
<div style="width:700px; text-align:center;">
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="200" align="center">[현재 <b><%=session("pnum")%></b> PAGE] / [전체 <b><%=rs.pagecount%></b> PAGE]</td>
          <td align="center">
<%
                '########### 페이지 이전 버튼 출력구문 - START ###########
                if startpg <> 1 then
%>
                    <a href="db06_list.asp?pnum=<%= startpg-pglist+(pglist-1) %>&startpg=<%= startpg-pglist %>&mode=<%=dmode%>&s_part=<%=s_part%>&s_keyword=<%=s_keyword%>"><b>&lt;&lt;Prev</b></a>
<%
                else
%>
                    &lt;&lt;Prev
<%
                end if
                '########### 페이지 이전 버튼 출력구문 - END ###########
               
                '########### 페이지 버튼 출력구문 - START ###########
                'for j=1 to rs.pagecount
                for j=startpg to int(startpg+(pglist-1)) '///현재 START페이지부터 5개의 페이지 리스트 출력
                    if j=int(Session("pnum")) then
%>
            &nbsp;<b>[<%=j%>]</b>&nbsp;
<%
                    elseif j<=int(rs.pagecount) then
%>
            <a href="db06_list.asp?pnum=<%=j%>&startpg=<%=startpg%>&mode=<%=dmode%>&s_part=<%=s_part%>&s_keyword=<%=s_keyword%>">&nbsp;[<%=j%>]&nbsp;</a>
<%
                    end if
                next
                '########### 페이지 버튼 출력구문 - END ###########
               
                '########### 페이지 다음 버튼 출력구문 - START ###########
                if int(startpg+pglist) > int(rs.pagecount) then
%>
                    Next&gt;&gt;
<%
                else
               
                    if int(startpg+pglist)>int(rs.pagecount) then
                        pnum = rs.pagecount
                        stpg = startpg
                    else
                        pnum = startpg+pglist
                        stpg = startpg+pglist
                    end if
%>
                    <a href="db06_list.asp?pnum=<%= pnum %>&startpg=<%= stpg %>&mode=<%=dmode%>&s_part=<%=s_part%>&s_keyword=<%=s_keyword%>"><b>Next&gt;&gt;</b></a>
<%
                end if
                '########### 페이지 다음 버튼 출력구문 - END ###########
%>
                    </td>
            <td width="120">&nbsp;</td>
          </tr>
        </table>
      </form></td>
    </tr>
  </table>
</div>
<%
'######################### PAGE LIST 출력 & 링크 - END #########################
%>

ASP Upload 서버객체 설치(생성)하기

ASP공부를 하다보니... 게시판에 파일추가 업로드 기능을 바로 사용할수 없게 됨을 알게되었다.

이거 뭐... 기본 제공인줄 알았더니 유료제공 무료제공 등등 많은 것들이 있다고 하는듯;;;

일단 Upload  서버 객체를 사용할수 있게 해보자!!

####################################
파일 업로드 서버객체 시스템 리소스 추가하기
####################################

준미물 : sitegalaxyupload.dll 파일

##### OPEN #####




설치하기

1. 다음폴더에 sitegalaxyupload.dll 파일을 복사한다
    {%systemroot%}/system32 :: ex)C:\windows\system32

2. 시작 -> 실행 -> regsvr32 sitegalaxyupload.dll -> 실행

이렇게 해주면 ASP의 파일 업로드 서버 객체를 사용할수 있게된다.

끄읏~~~!!!! ㅋ

2009년 10월 29일 목요일

ASP 문자열 함수 다루기

출처 : http://flashcafe.org/asp_study/3883/page/4

문자열 함수는 변수내의 문자열 변수들을 조작하는데 사용된다.
실제 사이트를 제작하다보면 문자열 관련함수가 자주 사용된다.

[문자열 함수]

ㅁ Len : 길이구하기            
ㅁ Left : 왼쪽에서끊기
ㅁ Right : 오른쪽에서끊기       
ㅁ Mid : 중간부터끊기
ㅁ Instr : 문자검색                
ㅁ Ltrim : 왼쪽공백없애기
ㅁ Rtrim : 오른쪽공백없애기    
ㅁ Trim : 왼쪽오른쪽공백없애기
ㅁ Split : 추출함수라 보면 되겠다.
ㅁ Replace : 문자열 치환
ㅁ Replace(문자열, 바꿀문자, 바꿀내용)
ㅁ Ucase : 무조건 대문자로 반환
ㅁ Lcase : 무조건 소문자로 반환


1) len(str)의 결과 : <%=len(str)%>
  --str문장의 길이를 출력해준다.

2) left(str,5)의 결과 :<%=left(str,5)%>
  --str문장에서 왼쪽에서 5자리를 끊어서 출력을 해준다.

3) right(str,5)의 결과 :<%=right(str,5)%>
  --str문장에서 오른쪽에서 5자리를 끊어서 출력을 해준다.

4) mid(str,4,5)의 결과 :<%=mid(str,4,5)%>
  --str문장에서 4번째 자리부터 5자리를 끊어서 출력을 해준다.

5) instr(str,"Call")의 결과 :<%=instr(str,"Call")%>
  --str문장에서 "Call"이라는 문장이 있는 위치를 응답해준다.

6) replace(str,"Nice","Crazy")의 결과 :<%=replace(str,"Nice","Crazy")%>
  --str문장에서 "Nice"라는 문장을 찾아 "Crazy"로 바꾸어준다.

7) Ucase(str)의 결과:<%=Ucase(str)%>
  --str에서 전체 단어를 대문자로 변환해준다.

8) Lcase(str)의 결과:<%=Lcase(str)%>
  --str에서 전체 단어를 소문자로 변환해준다.

9) <% myprofile=split(str2,",") %>
  --str2에서 ","단위로 뽑아내어서 myprofile이라는 컬렉션에 담아준다.

ASP 내장함수

출처 : http://www.superuser.co.kr/asp/asp07.htm

Date 및 Time함수

Date()

현재 날짜 반환


DateSerial(Yr, M, D)

Date 타입으로 반환


DateValue(String)

String형 -> date타입으로 반환


Day(Date)

<%= Day(Date()) %>

Hour(Time)

<%= Hour(Time()) %>

Minute(Time)


Month(Date)


Now()

현재일자 및 시각

<%= Now() %>

Second(Time)


Time()

시각


TimeSerial(시,분,초)

Time타입으로 반환


TimeValue(String)

문자열 -> Time 타입


Weekday(Date)

요일


Year(Date)


FormatDateTime

(Now(), A(타입) )

다양한 Type으로 날짜 시간 출력

A vbgeneraldate : 2000-01-23 오후 10:15:17

vblongdate : 2000년 1월 23일 월요일

vbshortdate : 2000-01-23

vblongtime : 오후 10:15:17

vbshorttime : 22:15

문자열 처리함수

Asc(Sting)

첫 문자를 ANSI 코드 반환


InStr(str1, str2)

str2에서 str1의 최초위치 반환


Lcase(String)

대문자 -> 소문자


Left(str, len)

좌측에서 Len개 문자 반환


Len(str)

문자열의 길이


Ltrim(String)

좌측 공백 제거

" ABC" -> "ABC"

Rtrim(String)

우측 공백 제거

"ABC " -> "ABC"

Trim(String)

양쪽 공백 제거

" A B C " -> "A B C"

Mid(str, start, len)

str의 start부터 len개 문자 반환


Right(str, len)

우측에서 len개의 문자 반환


Str(Number)

Number -> String


StrComp(str1, str2)

비교


String(len, char)

len개의 char로 생성


Ucase(String)

소문자 -> 대문자


strReverse(String)

역순으로 문자열 배열


RePlace(String,전,후)

전의문자열을 후의 문자열로..


기타 함수들

Round(숫자)

반올림


Randomize()

난수 초기화


Rnd()

0~0.99999..까지 난수 발생

Int(1000*Rnd()) : 0~999까지 난수 발생




2009년 10월 21일 수요일

ASP 형변환 함수 정리

출처 : http://blog.daum.net/courting/6

함수

설명

abs

숫자의 절대값을 반환한다

Chr

asc의 반대되는 기능을 하며, 특정 문자 코드의 해당 문자를 반환한다.

Cbyte

서브타입 Byte로 변환한다.

Cdate

서브타입 Date/time로 변환한다.

Cint

서브타입 Integer로 변환한다.

Csng

서비타입 Single로 변환한다.

DateSerial

주어진 년, 월, 일에 대해 서브타딥 Date/Time을 지닌 변수로 변환한다. 가령 DateSerial(1922,11,1)은 #11/1/1922#로 반환된다.

TimeSerial

주어진 시, 분, 초에 대해 서브타입 Date/Time을 지닌 변수로 변환한다.

hex

16진수 문자열로 변환한다.

Fix

잘라내기를 통해 소수를 포함한 숫자의 저수부분만을 반환한다. 단 음수는 인자로 들어 온 수보다 크거나 같은 처 번째 음의 정수를 반환한다. 예)-3.4 -> -3

Sgn

숫자의 부호를 반환한다 양수면 1, 음수면 -1 반환

ASC

문자열의 첫 번째 문자의 ASCII Code를 반환한다.

Cbool

서브타입 Boolean으로 변환한다.

Ccur

서브타입 Currency로 변환한다.

CDbl

서브타입 Double로 변환한다.

CLng

서브타입 Long으로 변환한다.

CStr

서비트입 String으로 변환한다.

DateVal!ue

서브타입 Date/Time을지닌 변수 값을 수치로 바꾸어준다.

TimeVal!ue

서브타입 Date/Time을 지닌 변수 값을 수치로 바꾸어 준다.

Oct

8진수 문자열로 변환한다.

Int

Fix와 마찬가지로 잘라내기를 통해 소수를 포함한 숫자의 정수부분만을 반환한다. 단 음수는 인자로들어 온 수보다 작거나 같은 첫 번째음의 정수를 반환한다. 가령, -3.4는 -4가 반환된다.
   
날짜관련함수  

year

날짜 중 년도를 반환한다.

day

날짜 중 일을 반환한다.

month

날짜 중 월을 반환한다.

weekday

요일중 몇번째 요일인지 숫자로 반환한다. (일~토요일)
   
문자관련함수  

left

Left(String, numChar)형태로 사용되며 왼쪽부터 numChar 개수만큼 문자들을 추출해낸다.

Mid

Mid(String, beginIndex, numChar)형태로 사용되며 왼쪽부터 numChar 개수만큼 문자들을 추출해낸다.

Ucase

모든 문자를 대문자로 반환한다.

Instr

Instr(string, word)형태로 사용되며 문자열내에서 word에 입력한 단어를 찾아내어 그 단어가 시작되는 첫번째 문자의 인덱스를 돌려 줌

Trim

문자열의 앞뒤 공백을 제거

Rtrim

문자열의 오른쪽 공백 제거

Right

Right(String, numChar)형태로 사용되며 오늘쪽부터 numChar 개수만큼 문자들을 추출해낸다.

Len

주어진 인자(string)의 문자 개수를 반환한다.

Lcase

모든 문자를 소문자로 반환한다.

Replace

Replace(string, word1, word2)형태로 사용되며 string문자 중 word1 문자를 word2문자로 변환하여 반환한다.

Ltrim

문자열의 왼쪽 공백 제거
   
기타함수  

FormatCurrency

FormatCurrency(intDate) 형태로 사용하며임의의 숫자를 통화정보로 변환

FormatPercent

Form(doubleDate)형태로 사용하며 %형태로 변환

isArray

변수가 배열이면 True, 아니면 False 리턴

isEmpty

변수가 초기화되어 있지 않으면 True, 아니면 False

isNumeric

숫자 데이터면 True

VarType

변수의 서브타입을 나타내는 숫자를 리턴

FormatDateTime

FormatDateTime(Date, type) 형태로 사용되며 날짜와 시간을 출력하는 형태를 지정할 수 있다. Type에 1,2,3등의 수를 넣어 서로 다른 출력 포맷을 정할 수있다.

split

split(Strind, delaminators) 형태로 사용하며 string 내의 단어들을 delaminators를 기준으로 배열로 변환

isDate

변수가날짜로 변환가능하면 True, 아니면 False 리턴

isNull

유효한 데이터를 포함하고 있으면 True

IsObject

유효한 ActiveX 혹은 OLE 자동화 개체를 포함하고 있으면 True

2009년 10월 16일 금요일

[MS-SQL] ASP 에서 DB/TABLE 존재여부 알아내기

출처 : 드래곤아이 웹 스쿨 ( http://www.dragoneye.co.kr/dboard/board/index.asp?url=view&boardid=column11&field=&str=&page=1&sid=2830 )

-------------------------------------------------------------------------------------
■ 디비 존재 여부 알아내기및 이름 정하기
<%
ConnString = "Provider=SQLOLEDB;Data Source=(LOCAL);Initial Catalog=master;User ID=sa;Password=wqewqea1234;"
'//master 디비에 들어갈 수 있는 계정으로 연결문자 작성

set db = server.createobject("adodb.connection")
db.open ConnString

sql = " select name from master.dbo.sysdatabases "
'// 모든(사용자+시스템) 디비이름 가져오기
set rs=db.execute(sql)

if not rs.eof then

do until rs.eof

'//// 여기서 만들려는 디비이름과 중복여부 체크및 이름 바꾸기를 적용해야겟죠. 아래는 그냥 출력만해봅니다
response.write rs("name") & "<br>"

rs.movenext
loop
end if

rs.close
set rs=nothing
db.close
set db=nothing
%>


■ 테이블 존재 여부 알아내기및 이름 정하기

<%

ConnString2 = "Provider=SQLOLEDB;Data Source=(LOCAL);Initial Catalog=son;User ID=sss;Password=1234;"

set db2 = server.createobject("adodb.connection")
db2.open ConnString2

sql = " select name from sysobjects"
'// 모든(사용자+시스템) 테이블이름 가져오기
set rs=db2.execute(sql)

if not rs.eof then
do until rs.eof

'//// 여기서 만들려는 테이블이름과 중복여부 체크및 이름 바꾸기를 적용해야겟죠. 아래는 그냥 출력만해봅니다

response.write rs("name") & "<br>"

rs.movenext
loop
end if

rs.close
set rs=nothing
db2.close
set db2=nothing

%>

============================================================================================

◆ 테이블 존재여부 - 테스트 확인 정상작동됨

<%
' 쿼리문 작성 - 테이블 존재여부 확인
tsql = "SELECT name FROM sysobjects "
tsql = tsql & " WHERE name='테이블이름' "

' 테이블 존재여부 확인
set rs1 = dbconn.execute (tsql)

if rs1.EOF or rs1.BOF then

response.write "<b>테이블이 존재하지 않습니다.</b>"

else

response.write "<b>테이블이 존재합니다.</b>"

end if
%>


2009년 10월 14일 수요일

ADO(ActiveX Data Object) 객체 - ms-sql

지금부터 하고자 하는 것은 ADO를 이용하여 DB(Data Base)를 조작하는 방법을 공부하겠습니다.
모든 Server Side Script 언어가 그렇듯이 DB를 다루지 못하면 별루 필요가 없겠죠.
DB와 연동을 시킴으로 진정한 웹페이지가 탄생하는것입니다.
DB가 사용되는 곳은 게시판, 방명록, 또 다움의 카페도 이러데이터 베이스를 사용하여 카페를 관리하고 만들어 주고 그렇게 하는걸로 알고 있습니다.
더 나아거서는 홈페이지 자체를 DB 에 넣는다는 말도 있고 어떤 동영상을 DB에 넣어서 검색 가능하게 한다는 말도 떠돌고 있습니다.
그럼 우리가 해야 할 것은 모두들 접근하기 쉬운 MS-Access로만든 *.mdb 파일을 다루는 방법을 배우고 겠습니다.
그리고 ODBC를 사용하여 접근하는 방법이 있고 ODBC를 사용하지 않는 방법이 있는데 제가 .net 세미나를 들어 보니까. ODBC를 사용하는건 에러발생이 많고 속도가 느려지고 부하가 많다고 ADO에 직접 연결하는편이 좋은 선택이라고 하기에 직접연결해서 쓰도록 하겠습니다.

이 ADO 는 PWS, IIS 설치시 자동으로 설치됩니다.^^

ADO는 ADO.net이 있을 만큼 거대합니다. 하지만 정말 필요하는 부분은 조금뿐입니다. 다 알필요는 없습니다.
다음 몇 개만 알면 하고자 하는 모든일을 할 수 있을 것입니다.

(DB를 사용하는건 파일을 사용하는것과 비슷합니다. DB도 하나의 파일이죠!!)

순서

1. DB파일을 열어 헨들을 얻는다. 얻을적에 (ADODB.Connection)

2. DB파일의 SQL문을 던져 레코드셋을 얻는다(Set RS = Conn.Execute(mySQL))

3. 그 레코드들을 사용하여 읽고, 쓰고, 갱신 한다.

4. DB를 위해 할당했던 자원들을 돌려 준다.


너무 어렵죠.. 그럼 실전 예제를 하나 만들어 보죠..

만약 MS-Access 프로그램이 있으신분은 test.mdb파일을 만드시고 없으신분은 게시판에서 다운로드 받으세요^^

파일의 위치는 : C:\test.mdb

테이블 내용 테이블명 : 메모

자 그럼 간단하게 메모장의 일부만 보여 드리도록 하겠습니다.

일단. 데이터가 있다고 가정하고 읽어 오는 것을 하겠습니다.

물론 이게 전부가 아닙니다. 하나의 레코드만 읽어 오는 것을 만들었지만 Do While 문을 이용하여 많은 레코드들을 읽어오고.. 삽입, 삭제, 수정까지 가능하게 만들어야 하죠.






Default.asp 파일이죠..

<%

Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체

Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\test.mdb" ' DB 열기

mySQL = "SELECT * FROM 메모"

Set RS = Con.Execute(mySQL) ' Execute함수의 반환형이 Recordset이에요..

Response.write RS("memo_ID") & " " & RS("이름") & " " & RS("내용") & " " & RS("날짜") & " " & RS("이메일")

RS.Close

Set RS = Nothing

Con.Close

Set Con = Nothing

%>



아주 기초적인 데이터 베이스 다루는 방법을 다루었습니다.
이걸 확장해서 간단한 메모장은 ADO의 전반적인 것을 보고 만들어 보도록 하겠습니다.^^

1. ADO architecture(아키텍쳐) :전체적 구조입니다.

ADODB.Command 개체

ADODB.Connection 개체

ADODB.DataControl 개체

ADODB.DataFactory 개체

ADODB.DataSpace 개체

ADODB.Error 개체

ADODB.Field 개체

ADODB.Parameter 개체

ADODB.Property 개체

ADODB.RecordSet 개체


이쿠 이많은 개체들을 다 알아야 하는가??
이걸 다 알 필요도 없고 알아도 필요한게 많이 없기 때문에 가장 필요한 두가지만 다루도록 하겠습니다.
더 아시고 싶으시면 MSDN을 참고하세요^^

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/dasdkadooverview.asp

1.1 Connection 개체

이 개체는 데이터베이스와 연결 및 실행에 관한 기능들을 모아둔 꼭 필요한 개체이다.

속 성

ConnectionTimeout

연결시간을 지정하거나 반환(Default = 15초)

ConnectionString

연결을위한 문자열이 들어간다. open 메서드 뒤에 두어도 된다.

DefaultDatabase

기본으로 사용할 데이터 베이스 이름 설정, 반환

메 서 드

Open

DB와 연결확립.

Execute

SQL문 실행 :SQL문은 본 홈페이지 mySQL강좌의 기초를 참조 하세요^^

Close

DB를 열었으면 닫아 두어야죠^^

BeginTrans

트랜잭션을 시작한다.

CommitTrans

변경내용을 저장하고 트랜잭션을 끝낸다.

RollbackTrans

변경내용을 취소하고 트랜잭션을 끝낸다.

Cancel

Open, Execute 함수의 호출을 취소.

컬 렉 션

Properties

Connection의 속성들

Errors

연결에 대한 에러들...


1.2 Recordset개체

데이터를 조작하거나 조회하는데 사용. 질의어의 결과 레코드를 가지는 객체, 지속적인 연결이 필요하지 않을 경우 사용한다.

속 성

CursorType

커서형식 지정 및 반환

.adOpenForwardOnly(0): 커서를 앞으로만 이동, 순차적으로 한번만

참조시 우수(default)

.adOpenKeyset(1): 원하는 방향 모든 이동 가능, 변경내용 볼 수 있

으나 추가 삭제 내용 볼 수 없다.

.adOpenDynamic(2):원하는 방향 모든 이동가능, 삭제, 삽입, 변경

모두 볼 수 있다.(○)

.adOpenStatic(3): 원하는 방향 모든 이동가능, 삭제, 삽입, 변경

모두 볼 수 없다.(×)--> 이걸 많이사용

.adOpenUnspecified(-1): 커서유형 지정 안함

LockType

레코드 작업시 잠금형식 지정.

.adLockReadOnly(1):읽기 전용으로 잠금 (Default)

.adLockPessimistic(2):수정시 자금

.adLockOptionistic(3):Update함수를 호출시 잠금

.adLockBatchOprimistic(4):일괄처리모드로 잠금

.adLockUnspecified(-1):유형지정안함.

BOF

Bottom Of File (레코드의 처음)

EOF

End Of File (레코드의 마지막)

PageSize

구성될 페이지의 레코드 수..

AbsolutePage

해당 페이지의 첫 번째 레코드로 이동

PageCount

페이지의 총개수

메 서 드

Open

커서를 연다. RS.Open SQL문, Con, Cursortyp, locktyp, Options

MoveFirst

커서 위치를 첫 번째 레코드로 이동

MoveNext

커서 위치를 다음 레코드로 이동

MovePrevious

커서 위치를 이전 레코드로 이동

MoveLast

커서 위치를 마지막 레코드로 이동

Move

레코드의 위치 이동

RS.Move 레코드수, 시작값

-시작값-

.adBookmarkCurrent: 현재 레코드를 시작위치로

.adBookmarkFirst :제일 첫 번째 레코드를 시작위치로

.adBookmarkLast:제일 마지막 레코드를 시작위치로

AddNew

새레코드를 만든다

Update

레코드 변경

Delete

레코드 내용삭제


이 밖에 많은 속성, 메서드가 있지만 이것만을 사용하도록 하겠다.

●간단한 메모장

그럼 지금부터 위에서 다룬 내용을 기본으로 해서 간단한 메모장을 만들어 보도록 하죠^^

메모장의 기능: (글보기,글쓰기) 두가지 기능 구현 아주 간단

1. DB 설계

파일의 위치는 : C:\myDB.mdb <- DB파일은 다른곳에 두어야죠^^

테이블 내용 테이블명 : 메모

2. 디렉토리

기본 webroot에서 memo라는 디렉토리를 만든다. 그리고 파일구성은 다음과 같다.

webroot\memo\메모.asp <- 메모를 보여주는데 사용

삽입.asp <- 메모를 삽입할시 사용

3. 소스코드

-- 메모.asp --

<%

Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체

Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\mydb.mdb" ' DB 열기

mySQL = "SELECT * FROM 메모 ORDER BY memo_ID DESC"

Set RS = Server.CreateObject("ADODB.Recordset")

RS.Open mySQL,Con, 3 ' 앞의내용을 참조 하세요

RS.PageSize =13 ' 13칸

cPage = Request.QueryString("cPage")

if cpage ="" then

RS.AbsolutePage = 1 ' 1페이지로 설정

else

RS.AbsolutePage = cPage ' 현페이지 설정

end if

If Not (RS.EOF and RS.BOF) then ' 끝, 처음이 아니면.

i = 1

%>

<table border=1>

<tr>

<td>번호</td><td>메모</td><td>이름</td><td>날짜</td>

<%

Do until RS.EOF Or i > RS.PageSize

%>

<tr>

<td><%=RS("memo_ID")%></td><td><%=RS("내용")%></td>

<td><a href="mailto:<%=RS("이메일")%>"><%=RS("이름")%></a>< /td><td><%=RS("날짜")%></td>

</tr>

<%

RS.Movenext

i = i + 1

Loop

end if

page_s = cpage - 5 ' 앞으로 5레코드

page_e = cpage + 5 ' 뒤로 5레코드

if page_s <= 0 then page_s = 1 ' 현 레코드 보다 적으면

if page_e >= RS.PageCount then page_e = RS.PageCount ' 끝이상 이면

for i =page_s to page_e

%></table><a href="메모.asp?cPage=<%=i%>"><%=i%></a>

<%next

' 자원 반납

RS.Close

Set RS = Nothing

Con.Close

Set Con = Nothing

%>

<hr>^^ 작성하기 ^^

<form method=post Action="삽입.asp">

이름<input type=text name="이름"> E-mail<input type=text name="이메일">

내용<input type=text name="내용"> <input type=submit name="작성" value="작성">

</form>

-- 삽입.asp --

<%

IF REQUEST.FORM("이름") ="" OR REQUEST.FORM("이메일") ="" OR REQUEST.FORM("내용") ="" THEN

RESPONSE.WRITE ("이름, 이메일, 내용 모두 입력 하세요")

ELSE

Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체

Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\mydb.mdb" ' DB 열기

 

' 레코드 삽입

mySQL = "INSERT INTO 메모 (이름,내용,이메일,날짜) VALUES ('" & REQUEST.FORM("이름") &"','" & REQUEST.FORM("내용")&"','" & REQUEST.FORM("이메일") &"','" &DATE() & "')"

Con.Execute (mySQL)

Con.Close

Set Con = Nothing

Response.Redirect "메모.asp"

END IF

%>

 

실행결과...

 

쑁쑁쑁 너무 볼 것 없죠.. 여기서 디자인만 조금 하면 .. 이쁜 메모장이 되는것이죠... 그리구 ..

그럼 다음에는 이쁘게 디자인 해서 올리겠습니다.^^ 위에것은 단지.. asp학습을 위해 만든것이죠..

html과 javascript를 이용하면 더 이쁘고 더 멋진 메모장이 가능하죠..