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:

    1. Denetim Masası açın ve ODBC Veri Kaynağı Yöneticisi'ne tıklayın.
    2. DSN'nize çift tıklayın.
    3. ODBC Microsoft Excel Kurulumu iletişim kutusunda Seçenekler'e tıklayın.
    4. 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ı

  1. Visual Basic'te yeni bir Standart EXE projesi oluşturun.

  2. Proje menüsünde Başvurular'a tıklayın ve ardından Microsoft ActiveX Veri Nesneleri Kitaplığı'na bir başvuru ekleyin.

  3. Form1'e bir Komut düğmesi ekleyin.

  4. 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  
    
  5. Uygulamayı kaydedin.

  6. Yeni bir Excel çalışma sayfası oluşturun ve çalışma sayfasını Test.xls olarak kaydedin.

  7. Ekle menüsünde, Ad'ın üzerine gelin ve Tanımla'ya tıklayın.

  8. Excel çalışma sayfasının içinde yeni bir tablo oluşturun ve tabloyu TB1 olarak adlandırın.

  9. Çalışma sayfasını Visual Basic uygulamasıyla aynı klasöre kaydedin.

  10. 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ı