Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Düzeltme: Excel'de, hatalı sütunlar halinde ADO veri ekler

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:314763
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.
Belirtiler
Boş dize değerleri içeren alanların veri içeriyorsa, ADO bir Microsoft Excel çalışma sayfasına yeni veri satırları eklemek için kullandığınızda, Excel yanlış sütunlara sonraki sayısal alanlar <a1>veri</a1> değerlerini ADO ekleyebilirsiniz.

Jet 4.0 sürümü için Microsoft OLE DB Provider hem de Excel için Microsoft ODBC sürücüsü de bu sorun oluşur. Bu sorun, bir SQL INSERT deyimi veya AddNew ve Update yöntemleri ADO Recordset nesnesinin kullanıp kullanmayacağınızı oluşur.

ADO yeni kayıtlar eklediğinde Excel çalışma kitabını Excel uygulamada açık ise, bu sorun oluşmaz.

Ancak, Microsoft Excel açıksa, ADO işlemleri sırasında bellek sızıntısı oluşuyor çünkü bu yöntem etkinleştirilme zorlaştırır. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
319998Hata: ADO ile Excel çalışma sayfası, sorgu açtığınızda bellek sızıntısı
Bu sorunun oluştuğu durumlarda ilgili ayrıntılar için "Daha fazla bilgi" bölümüne bakın.
Çözüm
Bu sorunu gidermek için <a0></a0>, en son hizmet paketi için Jet 4.0 hizmet paketini edinin. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
239114Nasıl yapılır:'ı Microsoft Jet 4.0 veritabanı altyapısı için en son hizmet paketini elde
Durum
Microsoft, bunun bu makalenin başında listelenen Microsoft ürünlerinde bir hata olduğunu onaylamıştır.
Daha fazla bilgi

Davranışı yeniden oluşturma adımları

  1. Microsoft Excel'i açın ve sonra da yeni bir çalışma kitabı oluşturun.
  2. Aşağıdaki örnek veriler, üst sol köşesindeki hücre a1'ile başlayan, Sayfa1'de, şunu yazın:
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11sınama11sınama
    22sınama22sınama

  3. Çalışma kitabını Test.xls kaydedin. Excel uygulama açık bırakabilirsiniz, ancak yeni bir çalışma kitabı kapatmalısınız.
  4. Microsoft Visual Basic'te, yeni bir standart exe DOSYASı) projesi oluşturun. Varsayılan olarak, Form1 oluşturulur.
  5. Proje menüsünde Başvurular ' ı tıklatın. Kullanılabilir başvurular listesinden seçim Microsoft ActiveX Data Objects (2. x kitaplığı.
  6. Form1 KomutDüğmesi denetim yerleştirin ve sonra tıklatın olay yordamında düğmesi için aşağıdaki kodu yapıştırın. Not Bu kod, ikinci sütuna, <a1>sütun</a1> <a1>c</a1>
    Private Sub Command1_Click()   Dim strCn As String   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset   Dim fld As ADODB.Field   'Open connection   strCn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _      "Data Source=" & App.Path & "\Test.xls;" & _      "Extended Properties=Excel 8.0"   Set cn = New ADODB.Connection   cn.Open strCn       'Add new values.   Set rs = New ADODB.Recordset   With rs      .CursorLocation = adUseClient      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic      .AddNew      .Fields("ColumnA").Value = 3      .Fields("ColumnB").Value = 3      .Fields("ColumnC").Value = ""      .Fields("ColumnD").Value = 3      .Fields("ColumnE").Value = 3      .Fields("ColumnF").Value = "testing"      .Update      .Close   End With   Set rs = Nothing   cn.Close   Set cn = NothingEnd Sub					
  7. Sınama projenizin Visual Basic çalışma kitabınız, Test.xls aynı klasöre kaydedin.
  8. Projeyi çalıştırın ve sonra düğmeyi tıklatın. Visual Basic tümleşik geliştirme ortamı (IDE,), projenin bir ilk çalıştırdığınızda, aşağıdaki hata iletisini alabilirsiniz:
    Çalışma zamanı hatası '-2147467259 (80004005)': harmanlama sırasını işletim sistemi tarafından desteklenen seçili
    Bu bilinen bir sorundur.Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    246167Sıra hatası açılıyor ADODB Recordset'i ilk kez bir Excel XLS karşı harmanlama sırası
  9. Hata iletisi iletişim kutusunda, Debug ' ı tıklatın ve sonra Projeyi çalıştırmaya devam etmek için F5 tuşuna basın. Update iki kez çalıştırmak için bu verilerin bir yerine iki yeni satır eklediğini unutmayın.
  10. Proje sona erdirmek için formu kapatın. Test.xls Excel'de yeniden açın ve verilerde Sayfa1 inceleyin. Aşağıdaki sonuçları beklediğiniz:

    ColumnAColumnBColumnCColumnDColumnEColumnF
    11sınama11sınama
    22sınama22sınama
    3333sınama

    Ancak, aşağıdaki verileri görürsünüz:

    ColumnAColumnBColumnCColumnDColumnEColumnF
    11sınama11sınama
    22sınama22sınama
    3333sınama

    Boş dize ColumnC eklenen yoksayıldı ve kayboldu gibi görünür. Bu nedenle, izleyen herhangi bir sayısal değeri hedeflenen hedeflerine solundaki eklenen bir sütun var. Sonraki dize sütunu bu açıktan etkilenmez.

<a1>Zaman</a1> 1

Sınama verileri aşağıdaki gibi yapılandırın:

ColumnAColumnBColumnCColumnDColumnE
1sınama11sınama
2sınama22sınama

Visual Basic projesinde, bölümü gibi yeni değerler eklemek için değiştirebilirsiniz:
   'Add new values.   Set rs = New ADODB.Recordset   With rs      .CursorLocation = adUseClient      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic      .AddNew      .Fields("ColumnA").Value = 3      .Fields("ColumnB").Value = ""      .Fields("ColumnC").Value = 3      .Fields("ColumnD").Value = 3      .Fields("ColumnE").Value = "testing"      .Update      .Close   End With   Set rs = Nothing   cn.Close   Set cn = Nothing				
Sayfa1, Test.xls, Excel'de açtığınızda, aşağıdaki verileri görüntüler:

ColumnAColumnBColumnCColumnDColumnE
1sınama11sınama
2sınama22sınama
333sınama

Tek bir sayısal sütun boş bir dize değeri önce gelen olduğunda bu sorun oluşmaz dikkat edin.

<a1>Zaman</a1> 2

Sınama verileri aşağıdaki gibi yapılandırın:

ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11sınamasınama11sınama
22sınamasınama22sınama

Visual Basic projesinde, bölümü gibi yeni değerler eklemek için değiştirebilirsiniz:
   'Add new values.   Set rs = New ADODB.Recordset   With rs      .CursorLocation = adUseClient      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic      .AddNew      .Fields("ColumnA").Value = 3      .Fields("ColumnB").Value = 3      .Fields("ColumnC").Value = ""      .Fields("ColumnD").Value = ""      .Fields("ColumnE").Value = 3      .Fields("ColumnF").Value = 3      .Fields("ColumnG").Value = "testing"      .Update      .Close   End With   Set rs = Nothing   cn.Close   Set cn = Nothing				
Sayfa1, Test.xls, Excel'de açtığınızda, aşağıdaki verileri görüntüler:

ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11sınamasınama11sınama
22sınamasınama22sınama
3333sınama

ADO, iki boş bir dize değeri ekler, ColumnC ve ColumnD eklenen boş dizeler yoksayılır ve kayboldu gibi görünür. Bu nedenle, izleyen herhangi bir sayısal değeri, hedeflenen hedeflerine solundaki eklenmiş iki sütun altındadır. Sonraki dize sütunu bu açıktan etkilenmez.
Referanslar
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
294410ACC2002: Boş değerlere, Excel'e verilirken, sonraki alan'ın veri ile değiştirilen
257819Nasıl YAPıLıR: Excel verilerden Visual Basic'de veya VBA'DA ile ADO kullanma.

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 314763 - Son İnceleme: 09/26/2005 19:41:15 - Düzeltme: 1.2

Microsoft ActiveX Data Objects 2.1, Microsoft ActiveX Data Objects 2.5, Microsoft ActiveX Data Objects 2.6, Microsoft OLE DB Provider for Jet 4.0

  • kbmt kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbqfe KB314763 KbMttr
Geri bildirim