ASP에서 ADO를 Excel 데이터를 쿼리하고 업데이트하는 방법

참고

Office 365 ProPlus엔터프라이즈용 Microsoft 365 앱 으로 이름이 바뀌고 있습니다. 이 변경에 대한 자세한 내용은 이 블로그 게시물을 참조하세요.

요약

이 문서에서는 ASP(Excel Data Objects) 페이지에서 ADO(ActiveX Data Objects)를 사용하여 Active Server Pages 정보를 쿼리하고 업데이트하는 방법을 보여 제공합니다. 또한 이 문서에서는 이러한 유형의 응용 프로그램과 연결된 제한 사항도 설명합니다.

중요

ASP/ADO 응용 프로그램은 다중 사용자 액세스를 지원하기는 하지만 Excel 않습니다. 따라서 이 정보를 쿼리 및 업데이트하는 방법은 다중 사용자 동시 액세스를 지원하지 않습니다.

추가 정보

이 샘플에 대한 Excel 스프레드시트의 데이터에 액세스하기 위해 Microsoft ODBC 드라이버를 Excel. 테이블을 만들어 스프레드시트에서 명명된 범위를 만들어 데이터에 Excel 합니다.

예제 응용 프로그램을 만드는 단계

  • sheet1에서 Excel 데이터로 ADOtest.xls 파일 형식을 만들 수 있습니다.

    column1 column2 column3
    rr this 15
    bb test 20
    ee works 25

    참고

    Excel 스프레드시트의 열에 텍스트와 숫자가 모두 Excel ODBC 드라이버는 열을 사용할 데이터 형식을 올바르게 해석할 수 없습니다. 열의 모든 셀이 데이터 형식이 같은지 확인하시기 바랍니다. 열의 각 셀이 같은 형식이 아니거나 "text"과 "general" 형식이 혼합된 경우 다음과 같은 세 가지 오류가 발생할 수 있습니다.

    1. Microsoft OLE DB Provider for ODBC Drivers error '80040e21' 이 ODBC 드라이버에서 요청 속성을 지원할 수 없습니다.
    2. Microsoft OLE DB Provider for ODBC Drivers error '80004005' 쿼리를 업데이트할 수 없습니다. 검색 가능한 열이 포함되어 있지 않습니다.
    3. Microsoft OLE DB Provider for ODBC Drivers 오류 '80004005' 쿼리 기반 업데이트가 실패했습니다. 업데이트할 행을 찾을 수 없습니다.
  • 스프레드시트에 명명된 범위 myRange1을 만들 수 있습니다.

    1. 데이터가 있는 행 및 열 영역을 강조합니다.
    2. 삽입 메뉴에서 이름을 클릭하고 정의를 클릭합니다.
    3. 명명된 범위 이름에 myRange1 이름을 입력합니다.
    4. 확인을 클릭합니다.

    명명된 범위 myRange1에는 다음 데이터가 들어 있습니다.

    column1 column2 column3
    rr this 15
    bb test 20
    ee works 25

    참고

    • ADO에서는 쿼리의 행 1에 열 머리 Excel 것으로 가정합니다. 따라서 명명된 범위에는 열 제목이 포함되어야 합니다. 이는 DAO와 다른 동작입니다.
    • 열 제목은 숫자가 될 수 없습니다. 이 Excel 드라이버는 이를 해석할 수 없습니다. 대신 셀 참조를 반환합니다. 예를 들어 "F1"의 열 제목은 잘못 이해됩니다.
  • 파일 파일을 지정하는 ODBC 시스템 DSN(데이터 원본 이름)을 ADOTest.xls.

    1. 제어판에서 ODBC 관리자를 니다.
    2. 시스템 DSN 탭에서 추가를 클릭합니다.
    3. 드라이버 Microsoft Excel(*.xls)를 선택하고 마침을 클릭합니다. 이 옵션이 없는 경우 설치 시 Microsoft ODBC 드라이버를 Excel Excel 합니다.
    4. 데이터 원본 이름에 대해 ADOExcel을 선택하십시오.
    5. 버전이 올바른 버전의 버전으로 설정되어 있는지 Excel.
    6. "통합 문서 선택..."을 클릭하고 ADOTest.xls 찾아 확인을 클릭합니다.
    7. "옵션>>" 단추를 클릭하고 "읽기 전용" 확인란의 선택을 취소합니다.
    8. 확인을 클릭한 다음 확인을 다시 클릭합니다.
  • 파일에서 사용 권한을 ADOTest.xls.

활성 서버 페이지에 익명으로 액세스하는 경우 익명 계정(IUSR_)에 스프레드시트에 대한 <MachineName> 읽기/쓰기(RW) 액세스 권한이 있는지 확인해야 합니다. 스프레드시트에서 정보를 삭제하려면 그에 따라 사용 권한을 부여해야 합니다.

Active Server 페이지에 대한 액세스를 인증하는 경우 응용 프로그램에 액세스하는 모든 사용자에게 적절한 권한이 부여되도록 해야 합니다.

스프레드시트에 적절한 사용 권한을 설정하지 않은 경우 다음과 같은 오류 메시지가 표시됩니다.

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Excel Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.
  1. 새 ASP 페이지를 만들고 다음 코드에 붙여 넣습니다.

       <!-- Begin ASP Source Code -->
       <%@ LANGUAGE="VBSCRIPT" %>
       <%
         Set objConn = Server.CreateObject("ADODB.Connection")
         objConn.Open "ADOExcel"
    
    Set objRS = Server.CreateObject("ADODB.Recordset")
         objRS.ActiveConnection = objConn
         objRS.CursorType = 3                    'Static cursor.
         objRS.LockType = 2                      'Pessimistic Lock.
         objRS.Source = "Select * from myRange1"
         objRS.Open
    %>
    <br>
    <%
       Response.Write("Original Data")
    
    'Printing out original spreadsheet headings and values.
    
    'Note that the first recordset does not have a "value" property
       'just a "name" property.  This will spit out the column headings.
    
    Response.Write("<TABLE><TR>")
       For X = 0 To objRS.Fields.Count - 1
          Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>")
       Next
       Response.Write("</TR>")
       objRS.MoveFirst
    
    While Not objRS.EOF
          Response.Write("<TR>")
          For X = 0 To objRS.Fields.Count - 1
             Response.write("<TD>" & objRS.Fields.Item(X).Value)
          Next
          objRS.MoveNext
          Response.Write("</TR>")
       Wend
       Response.Write("</TABLE>")
    
    'The update is made here
    
    objRS.MoveFirst
       objRS.Fields(0).Value = "change"
       objRS.Fields(1).Value = "look"
       objRS.Fields(2).Value = "30"
       objRS.Update
    
    'Printing out spreadsheet headings and values after update.
    
    Response.Write("<br>Data after the update")
       Response.Write("<TABLE><TR>")
       For X = 0 To objRS.Fields.Count - 1
          Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>")
       Next
       Response.Write("</TR>")
       objRS.MoveFirst
    
    While Not objRS.EOF
          Response.Write("<TR>")
          For X = 0 To objRS.Fields.Count - 1
             Response.write("<TD>" & objRS.Fields.Item(X).Value)
          Next
          objRS.MoveNext
          Response.Write("</TR>")
       Wend
       Response.Write("</TABLE>")
    
    'ADO Object clean up.
    
    objRS.Close
       Set objRS = Nothing
    
    objConn.Close
       Set objConn = Nothing
    %>
    <!-- End ASP Source Code -->
    
  2. Active Server 페이지를 저장하고 이름을 지정하고 브라우저에서 을 니다. 다음과 같이 표시됩니다.

    Original Data:
    
    |column1|column2|column3|
    |------------|------------|------------|
    |rr|this|30|
    |bb|test|20|
    |tt|works|25|
    
    Data after the update:
    
    |column1|column2|column3|
    |------------|------------|------------|
    |change|look|30|
    |bb|test|20|
    |tt|works|25|
    

참고

제목 다음에 있는 명명된 범위의 첫 번째 행에 대해 업데이트가 수행되었습니다.