2009년 6월 23일 화요일

[ASP] 엑셀 파일을 데이터베이스처럼

데이터베이스로 쉽게 변환이 가능한 엑셀 파일이나 텍스트 파일 등이 있다.
 이런 파일들을 데이터베이스로 마이그레이션 시키지 않고도 간단히 데이터베이스를 사용하듯
 그 파일에 있는 데이터들을 조작할 수 있다면 상당히 유용한 경우가 있을 것이다.
 엑셀 파일의 예를 들어 보자.
 아래 표와 같은 형식으로 데이터가 작성되어 있다면, 즉,
 컬럼 이름(ID, Name, Price)이 존재하고 그 컬럼에 해당하는 값들이 일정한 형식으로 채워져 있다면
 이런 데이터들은 쉽게 데이터베이스처럼 사용할 수가 있다.
 즉, 엑셀에 있는 데이터가 데이터베이스의 테이블과 매칭이 된다면 그런 데이터들은 쉽게
 데이터베이스를 다루듯 다룰 수 있다는 얘기이다.
 
  ID Name Price
 
  1 "Chairs" $40.00
 
  2 "Table" $75.00
 
  3 "Fork" $1.50
 
  4 "Lamp" $15.00
 
  5 "Rug" $35.00
 
 
 위 표와 같은 엑셀 파일이 있다면 이 엑셀 파일(.xls)을 "다른 이름으로 저장"에서 CSV를 선택하여
 확장자가 .csv인 파일로 저장한다. 이 csv 파일은 각각의 컬럼이 컴마(,)로 분리되고 각각의 레코드는
 캐리지 리턴 값으로 분리되어 있는 파일 형식이다.
 
 위의 예처럼 엑셀 파일만이 아니라 특정 구분자로 컬럼들이 분리되어 있는 일반 텍스트 파일들도
 동일한 방식으로 데이터베이스처럼 사용할 수 있다.
 
 이런 형식의 텍스트 파일을 텍스트 데이터베이스 파일이라고 부른다.
 엑셀이나 엑세스에서 테이블을 컴마로 분리된 텍스트 파일로 저장할 수 있다.
 이 글에서는 컴마로 구분된 텍스트 데이터베이스 파일(CSV 파일)에 접속하는 방법에 대해
 알아볼 것이다.
 
 이제 다음과 같은 과정을 그대로 따라해 보자.
 
 CSV.DSN 파일 내용
 
 제어판의 ODBC 관리자에서 Microsoft Text Driver 파일을 만들든지 아래 텍스트 내용을
 "CSV.DSN"이란 이름으로 저장하도록 한다:
 
 DRIVER=Microsoft Text Driver (*.txt; *.csv)
 UID=admin
 UserCommitSync=Yes
 Threads=3
 SafeTransactions=0
 PageTimeout=5
 MaxScanRows=25
 MaxBufferSize=512
 ImplicitCommitSync=Yes
 FIL=text
 Extensions=txt,csv,tab,asc
 DriverId=27
 
 data.txt 파일 내용
 
 다음으로 샘플 데이터 파일이 필요하다. 아래 내용을 샘플 데이터 파일로 이용하도록 하자.
 아래 내용을 data.txt 파일로 저장한다.
 (엑셀 파일로 되어 있는 것을 csv 형식으로 저장할 수도 있다)
 
  ID,Name,Price
  1,"Chairs",$40.00
  2,"Table",$75.00
  3,"Fork",$1.50
  4,"Lamp",$15.00
  5,"Rug",$35.00
 
 
 ASP 파일 내용
 
 이제 텍스트 데이터베이스 파일에 접속할 준비가 다 끝났다.
 이제 아래 ASP 코드를 적당한 이름으로 저장하도록 한다.
 
  <html>
  <body>
 
  <%
  ' MDB 파일과 다른 텍스트 기반 데이터베이스 사이의 차이점은
  ' MDB 파일은 DBQ 값으로 파일 이름(가령, "anyfile.mdb")이 필요하고,
  ' CSV, DBF(FoxPro), Paradox(DB) 같은 데이터베이스는 DBQ 값으로
  ' 각각의 디렉토리 이름을 사용한다는 것이다.
 
  ' 다음 작업을 할 때 텍스트 파일 이름이 아닌
  ' 디렉토리 이름을 DBQ 값으로 줬는지 확인해야 한다.
  ' 다음 변수는 DSN 파일 이름을 저장한다.
  Dim sDSNFile
  sDSNFile = "CSV.dsn"
 
  ' 현재 디렉토리를 구한다.
  Dim sscriptDir
  sscriptDir = Request.ServerVariables("scRIPT_NAME")
  sscriptDir = StrReverse(sscriptDir)
  sscriptDir = Mid(sscriptDir, InStr(1, sscriptDir, "/"))
  sscriptDir = StrReverse(sscriptDir)
 
  ' 동적으로 접속할 DSN 문자열을 만든다.
  Dim sPath, sDSN
  sPath = Server.MapPath(sscriptDir) &anp;anp;anp;anp; ""
  sDSN = "FileDSN=" &anp;anp;anp;anp; sPath &anp;anp;anp;anp; sDSNFile &anp;anp;anp;anp; _
  ";DefaultDir=" &anp;anp;anp;anp; sPath &anp;anp;anp;anp; _
  ";DBQ=" &anp;anp;anp;anp; sPath &anp;anp;anp;anp; ";"
 
  ' sDSN은 다음과 같은 내용일 수 있다:
  ' FileDSN=C:InetpubwwwrootCSV.DSN;DefaultDir=
  ' C:Inetpubwwwroot;DBQ=C:Inetpubwwwroot;
 
  ' 데이터베이스 접속
  Dim Conn, rs
  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open sDSN
 
  ' Name과 Price 필드 값 얻어오기
  Dim sql
  sql = "SELECT Name,Price FROM data.txt"
 
  '레코드셋 객체 생성
  set rs = conn.execute(sql)
 
 
  '레코드셋 내용 출력
  Do WHile Not rs.EOF
  Response.Write "이름: " &anp;anp;anp;anp; rs("Name")
  Response.Write "<BR>가격: " &anp;anp;anp;anp; rs("Price")
  Response.Write "<HR>"
 
  rs.MoveNext '다음 레코드로 이동
  Loop
 
 
  '리소스 반환
  rs.close
  set rs = nothing
  conn.close
  set conn = nothing
  %>
 
  <body>
  </html>
 
 
 
 이제 위에서 작성한 ASP 파일과 그 전에 저장했던 "CSV.DSN", "data.txt" 파일을 다 같은 디렉토리에
 위치시킨 다음 이 ASP 파일을 실행시켜 보자.

댓글 없음:

댓글 쓰기