PRB: "İşlem güncelleştirilebilir bir sorgu kullanmalıdır" ODBC aracılığıyla Excel'e eriştiğinde
Belirtiler
Excel çalışma sayfasını ADO ve ODBC aracılığıyla düzenlerken, ADO DataControl nesnesi kullanıyorsanız aşağıdaki hata iletisini alabilirsiniz:
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
ADO koduyla oluşturulan bir Recordset nesnesi kullanıyorsanız, Excel çalışma sayfasını ADO ve ODBC aracılığıyla düzenlerken aşağıdaki hata iletisini alabilirsiniz:
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Neden
ReadOnly olarak kaydedilmiş veya açılmış bir çalışma sayfasını düzenlemeye çalıştığınızda bu sorun oluşur.
Not
ReadOnly, veri kaynağı adı (DSN) olan veya olmayan Excel'e odbc bağlantısı için varsayılan ayardır. Bu nedenle, kullanıcının verileri düzenlemek için her zaman bu ayarı değiştirmesi gerekir.
Çözüm
Bu sorunu çözmek için aşağıdaki yöntemleri kullanın:
Recordset nesnesinin LockType özelliğinin ReadOnly olarak ayarlanmadığından emin olun.
Açmaya çalıştığınız dosyanın Salt Okunur olarak kaydedilmediğinden emin olun.
DSN üzerinden bağlanıyorsanız şu adımları izleyin:
- Denetim Masası açın ve ODBC Veri Kaynağı Yöneticisi'ne tıklayın.
- DSN'nize çift tıklayın.
- ODBC Microsoft Excel Kurulumu iletişim kutusunda Seçenekler'e tıklayın.
- Salt Okunur onay kutusunun seçili olmadığından emin olun.
DSN içermeyen bir bağlantı kullanıyorsanız, bağlantı dizesi "ReadOnly=0" seçeneğini eklediğinizden emin olun. Örneğin:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Durum
Bu davranış tasarımdan kaynaklanır.
Ek Bilgi
Davranışı Yeniden Oluşturma Adımları
Visual Basic'te yeni bir Standart EXE projesi oluşturun.
Proje menüsünde Başvurular'a tıklayın ve ardından Microsoft ActiveX Veri Nesneleri Kitaplığı'na bir başvuru ekleyin.
Form1'e bir Komut düğmesi ekleyin.
Form1'e aşağıdaki kodu ekleyin:
Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Private Sub Form_Load() Command1.Caption = "Edit" End Sub Private Sub Command1_Click() Dim DocPath As String DocPath = App.Path & "\Test.xls" Set cn = New Connection Set rs = New Recordset cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1" rs.LockType = adLockOptimistic rs.Open "TB1", cn rs.AddNew rs.Fields(1).Value = "New Value" rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
Uygulamayı kaydedin.
Yeni bir Excel çalışma sayfası oluşturun ve çalışma sayfasını Test.xls olarak kaydedin.
Ekle menüsünde, Ad'ın üzerine gelin ve Tanımla'ya tıklayın.
Excel çalışma sayfasının içinde yeni bir tablo oluşturun ve tabloyu TB1 olarak adlandırın.
Çalışma sayfasını Visual Basic uygulamasıyla aynı klasöre kaydedin.
Uygulamayı çalıştırmak için F5 tuşuna basın.
Başvurular
Ek bilgi için aşağıdaki makaleye bakın:
Office Alanı: Microsoft Office Uygulamalarında Betik Oluşturmaya yönelik İpuçları ve Püf Noktaları
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