ASP'den ADO Kullanarak Excel Verilerini Sorgulama ve Güncelleştirme

Özet

Bu makalede, bir Active Server Pages (ASP) sayfasından ActiveX Veri Nesneleri (ADO) kullanarak Excel elektronik tablosundaki bilgilerin nasıl sorgulanıp güncelleştirilecekleri gösterilmektedir. Makalede, bu uygulama türüyle ilişkili sınırlamalar da açıklanmaktadır.

Önemli

ASP/ADO uygulamaları çok kullanıcılı erişimi desteklese de, Excel elektronik tablosu desteklemez. Bu nedenle, bu bilgileri sorgulama ve güncelleştirme yöntemi çok kullanıcılı eşzamanlı erişimi desteklemez.

Ek Bilgi

Bu örneğin Excel elektronik tablonuzdaki verilere erişmek için Excel için Microsoft ODBC Sürücüsünü kullanın. Excel elektronik tablonuzda Adlandırılmış Aralık oluşturarak verilere erişmek için bir tablo oluşturun.

Örnek Uygulama Oluşturma Adımları

  • Sayfa1'de aşağıdaki verilerle ADOtest.xls Excel dosyasını oluşturun:

    sütun1 sütun2 sütun3
    Rr Bu 15
    Bb Test 20
    ee Çalışır 25

    Not

    Excel elektronik tablonuzdaki bir sütun hem metin hem de sayı içeriyorsa, Excel ODBC sürücüsü sütunun hangi veri türünün olması gerektiğini doğru yorumlayamaz. Lütfen bir sütundaki tüm hücrelerin aynı veri türünde olduğundan emin olun. Bir sütundaki her hücre aynı türde değilse veya "metin" ile "genel" arasında karışık türler varsa aşağıdaki üç hata oluşabilir:

    1. ODBC Sürücüleri için Microsoft OLE DB Sağlayıcısı '80040e21' hatası İstek özellikleri bu ODBC Sürücüsü tarafından desteklenemiyor.
    2. ODBC Sürücüleri için Microsoft OLE DB Sağlayıcısı '80004005' hatası Sorgu, umut verici bir anahtar olarak kullanılacak aranabilir sütunlar içermediğinden güncelleştirilemez.
    3. ODBC Sürücüleri için Microsoft OLE DB Sağlayıcısı '80004005' Sorgu tabanlı güncelleştirme başarısız oldu. Güncelleştirilecek satır bulunamadı.
  • Elektronik tablonuzda myRange1 adlı bir Adlandırılmış Aralık oluşturun:

    1. Verilerinizin bulunduğu satırları ve sütunları vurgulayın.
    2. Ekle menüsünde Ad'ın üzerine gelin ve Tanımla'ya tıklayın.
    3. Adlandırılmış Aralık adı için myRange1 adını girin.
    4. Tamam'a tıklayın.

    MyRange1 Adlı Aralık aşağıdaki verileri içerir:

    sütun1 sütun2 sütun3
    Rr Bu 15
    Bb Test 20
    ee Çalışır 25

    Not

    • ADO, Excel sorgusundaki ilk satırın sütun başlıklarını içerdiğini varsayar. Bu nedenle, Adlandırılmış Aralık sütun başlıklarını içermelidir. Bu, DAO'dan farklı bir davranıştır.
    • Sütun başlıkları sayı olamaz. Excel sürücüsü bunları yorumlayamaz ve bunun yerine bir hücre başvurusu döndürür. Örneğin, "F1" sütun başlığı yanlış yorumlanabilir.
  • ADOTest.xls dosyasına işaret eden bir ODBC Sistem Veri Kaynağı Adı (DSN) oluşturun.

    1. Denetim Masası ODBC Yöneticisi'ni açın.
    2. Sistem DSN sekmesinde Ekle'ye tıklayın.
    3. Microsoft Excel Sürücüsü (*.xls) öğesini seçin ve Son'a tıklayın. Bu seçenek yoksa, Excel kurulumundan Excel için Microsoft ODBC sürücüsünü yüklemeniz gerekir.
    4. Veri Kaynağı Adı için ADOExcel'i seçin.
    5. Sürüm'ün Excel'in doğru sürümüne ayarlandığından emin olun.
    6. "Çalışma Kitabı Seç..." öğesine tıklayın, ADOTest.xls dosyasına gidin ve Tamam'a tıklayın.
    7. "Seçenekler>>" düğmesine tıklayın ve "Salt Okunur" onay kutusunu temizleyin.
    8. Tamam'a tıklayın ve sonra yeniden Tamam'a tıklayın.
  • ADOTest.xls dosyasında izinleri ayarlayın.

Active Server Sayfanıza anonim olarak erişiliyorsa, Anonim Hesabın (IUSR_<MachineName>) elektronik tabloya en az Okuma/Yazma (RW) erişimi olduğundan emin olmanız gerekir. Elektronik tablodan bilgileri silmek istiyorsanız, izinlere uygun şekilde izin vermeniz gerekir.

Etkin Sunucu Sayfanıza erişimin kimliğini doğrularsanız, uygulamanıza erişen tüm kullanıcıların uygun izinlere sahip olduğundan emin olmanız gerekir.

Elektronik tabloda uygun izinleri ayarlamazsanız, aşağıdakine benzer bir hata iletisi alırsınız:

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. Yeni bir ASP sayfası oluşturun ve aşağıdaki kodu yapıştırın:

       <!-- 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 Sayfanızı kaydedin ve adlandırın ve tarayıcıda görüntüleyin. Aşağıdakileri görürsünüz:

    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|
    

Not

Adlandırılmış Aralığınızın ilk satırında (başlıklardan sonra) bir güncelleştirme gerçekleştirildi.