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:
- 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.
- 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.
- 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:
- Verilerinizin bulunduğu satırları ve sütunları vurgulayın.
- Ekle menüsünde Ad'ın üzerine gelin ve Tanımla'ya tıklayın.
- Adlandırılmış Aralık adı için myRange1 adını girin.
- 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.
- Denetim Masası ODBC Yöneticisi'ni açın.
- Sistem DSN sekmesinde Ekle'ye tıklayın.
- 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.
- Veri Kaynağı Adı için ADOExcel'i seçin.
- Sürüm'ün Excel'in doğru sürümüne ayarlandığından emin olun.
- "Çalışma Kitabı Seç..." öğesine tıklayın, ADOTest.xls dosyasına gidin ve Tamam'a tıklayın.
- "Seçenekler>>" düğmesine tıklayın ve "Salt Okunur" onay kutusunu temizleyin.
- 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.
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 -->
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin