<!-- Split 함수를 이용해서 문자열에서 특정문자를 제거하는 함수입니다.

       혹시 필요하신분 있을까봐 간단히 만들어 봤습니다. -->


<%

  Function Get_AbString( strSource, chrSource )

  Dim strTemp, chrTemp, strDest

  strTemp = strSource
  chrTemp = chrSource

  'Split 함수: 지정된 수의 부분 문자열을 포함하는 0부터 시작하는 1차원 배열을 반환합니다.
  'strDest에는 chrSource의 갯수를 반환합니다. 여기서는 2
  '분리된 문자열은 strDest(0) 부터 시작해서 반환한 strDest의 갯수만큼의 1차원 배열에 저장됩니다.
  '여기서는 strDest(0), strDest(1), strDest(2)
  strDest = Split( strTemp, chrTemp )

  strTemp = ""

  for i = 0 to ubound(strDest)

    strTemp = strTemp & strDest(i)

  next

  Get_AbString = strTemp


End Function

  Response.Write Get_AbString( "2,000,000", "," )


%>

2008/02/21 15:47 2008/02/21 15:47

★ 커서타입

타입 설명
0

adOpenForwardOnly

자료를 변경할 수 없으며 MoveNext 메소드만 지원(Default 값)

1

adOpenKeyset

Recordset 자료를 변경할 수 있지만 새로운 자료를 추가한 경우 다른 사용자에게 반영되지 않는다. 모든 Move 메소드를 지원

2

adOpenDymanic

오픈되어 있는 동안 다른 사용자들의 입력, 수정, 삭제된 내용이 변경된다. 모든 Move 메소드를 지원

3

adOpenStatic

자료를 변경할 수 없으며 Recordset 생성 후 다른 사용자가 변경한 자료는 볼 수 없다. 모든 Move 메소드를 지원


★ 락타입

타입 설명
0

adLockReadOnly

읽기전용 록. 레코드 읽는 동안 다른 사람이 데이터를 변경할 수 없고 읽을 수만 있음

1

adLockPessimistic

비관적 록. 레코드 단위로 록킹. 레코드 편집을 하는 순간부터 록을 걸어 다른 사람이 레코드를 변경할 수 없게 됨

2

adLockOptimistic

낙관적 록. 레코드 단위로 록킹. 레코드 편집이 끝나고 Update 메소드를 호출하는 경우에만 록을 걸므로 Update 전에는 편집중이라도 다른 사용자가 수정할 수 있음

3

adLockBatchOptimistic

배치 작업으로 Optimistic 록을 사용할 수 있음

2008/02/21 15:47 2008/02/21 15:47

<%


 '//Addnew 함수는 레코드셋을 이용해 데이타를 추가하는 방식이다.
 '//Addnew 함수를 통해서 데이타를 추가하면 마지막에 반드시 Update라는 메소드가 있어야지 적용이된다
 '//기존 쿼리를 사용하는 방법이 레코드셋을 이용하는것 보다 속도는 조금빠르지만 초보자에게는 약간
 '//복잡한면이 없지 않다...
 '//기존 쿼리방식은 많은 insert 문중 에러가 발생하면 Dbcon.Execute SQL 을 가리키지만 이방법은
 '//어디가 잘못되었는지 바로 지적해준다 디버깅면에서 추천할만하다

 

 '//하지만 이방법은  모든 OLEDB 제공자가 이기능을 지원하지 않는다는 것이다

 

 Dim strConnect
 Dim Rs


 strConnect = "Provider=SQLOLEDB.1;Data Source=xxxx;Initial Catalog=xxxx;user ID=xxxx;password=xxxx;"
 Set Rs = server.CreateObject("ADODB.Recordset")


 With Rs
 .open "테이블명",strConnect, adOpenStatic, adLockPessimistic, adCmdTable
 .Addnew
 .Fields("uid") = "abcd"
 .Fields("name") = "홍길동"
 .Fields("memo") = "abcdefg hijk lmn"
 .Fields("idate") = now()
 .Update
 .Close
 End With


 set Rs=nothing


 response.write "새로운 데이타가 추가되었습니다."
%>

2008/02/21 15:47 2008/02/21 15:47

ASP페이지에 Excel 스프레드시트를 표시하는 간단한 예제입니다.

쿼리문에 있는 [TEST$] 는 Excel 시트명이며 자주 에러를 발생시키는 부분과 GetString 함수는 주석으로 설명하였습니다



------------------------------------예제는 여기서부터 -------------------------------------------------------------------


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ASP 페이지에 Excel 스프레드시트 표시하기 </TITLE>
</HEAD>
<BODY>
<%
Set dbCon = Server.CreateObject("ADODB.Connection")
strConnect = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & Server.MapPath("\") & "\TEST.xls;" '엑셀파일 경로

'다음과 같은 오류가 나왔다면 엑셀파일이 열려있거나, 아니면 사용자권한이 파일접근 금지되어 있을경우입니다
'Microsoft OLE DB Provider for ODBC Drivers 오류 '80004005'
'[Microsoft][ODBC Excel Driver]일반 오류 레지스트리 키 'Temporary (volatile) Jet DSN for process 0x8c0 Thread 0xa9c DBC '0x16d6764 Excel'을(를) 열 수 없습니다.


dbCon.Open strConnect
SQL = "Select * from [TEST$]"

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, dbCon


'ADO 2.0 이상에는 GetString이라는 함수가 있습니다. 이 함수를 이용하면 Do..Loop부분과 레코드셋의 eof를 체크하는 부분이 필요없습니다
exlValue = rs.GetString(,,"</td><td>","</td></tr><tr><td>"," ")
%>
<TABLE border=1>
<TR><TD>
<% Response.Write(exlValue)%>
</TD></TR>
</TABLE>
</BODY>
</HTML>


2탄 이어서

저번에 올린 Excel에 스프레드시트 표시하기의 발전형 예제입니다.

엑셀파일명만 알고 스프레드시트에는 무슨이름이 들어있는지 모를때 OpenSchema 메서드를 이용하여

스프레드시트명을 알아내어 스프레드시트 내용을 뿌려줍니다.


-------------------------------------예제는 여기서부터 -----------------------------------------------------------------


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ASP 페이지에 Excel 스프레드시트 표시하기 </TITLE>
</HEAD>
<BODY>
<%
Dim SheetName, dbCon, strConnect, rsList, rs


Set dbCon = Server.CreateObject("ADODB.Connection")
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\") & "\TEST.xls " & "; Extended Properties=Excel 8.0;"  '엑셀파일 경로


dbCon.Open strConnect

'OpenSchema 메서드를 사용하여 데이터베이스의 테이블에 대한 정보가 들어있는 Recordset 개체를 반환합니다.
'스키마 상수는 다음과 같습니다.
'adSchemaColumns = 4, adSchemaProviderTypes = 22, adSchemaTables = 20
set rsList = dbCon.OpenSchema(20)

Do Until rsList.EOF Or rsList.BOF

    SheetName = rsList(2) '2는 카탈로그의 Character Set을 되돌려 줍니다.

    rsList.MoveNext

Loop


 
 SQL = "Select * from [" & SheetName & "]"


 Set rs = Server.CreateObject("ADODB.Recordset")
 rs.Open SQL, dbCon


  exlValue = rs.GetString(,,"</td><td>","</td></tr><tr><td>"," ")


%>
<TABLE border=1>
<TR><TD>
<% Response.Write(exlValue)%>
</TD></TR>
</TABLE>
<%
rs.Close
Set rs = Nothing
rsList.Close
set rsList = Nothing
dbCon.close
set dbCon = Nothing
%>
</BODY>
</HTML>

2008/02/21 15:46 2008/02/21 15:46