FIX: ADO voegt de gegevens in de verkeerde kolommen in Excel

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 314763
Alles uitklappen | Alles samenvouwen

Op deze pagina

Symptomen

Wanneer u ADO nieuwe gegevens rijen invoegen in een Microsoft Excel-werkblad gebruikt als gegevens velden met lege teken reeks waarden bevat, kan ADO de gegevens waarden van de volgende numerieke velden invoegen in de verkeerde kolommen in Excel.

Dit probleem treedt op in de Microsoft OLE DB-Provider voor Jet 4. 0 en Microsoft ODBC-stuurprogramma voor Excel. Dit probleem treedt op of u een SQL INSERT-instructie gebruiken of deAddNewen deUpdatemethoden van ADORecord setobject.

Dit probleem treedt niet op als de Excel-werkmap geopend in de toepassing Excel is wanneer ADO de nieuwe records voegt.

Microsoft ontmoedigt echter deze oefening, omdat een geheugenlek optreedt als Excel geopend tijdens de ADO-bewerkingen is.Voor meer informatie klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
319998BUG: Geheugenlek wanneer U Query Excel-werkblad met ADO opent
Raadpleeg de sectie "Meer informatie" voor meer informatie over de omstandigheden waarin dit probleem optreedt.

Oplossing

Dit probleem kunt oplossen, verkrijgen van het meest recente servicepack voor Jet 4. 0 servicepack. Voor meer informatie klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
239114Procedure: Het meest recente servicepack voor Microsoft Jet 4. 0 data base Engine ophalen

Status

Microsoft heeft bevestigd dat dit zich kan voordoen in de Microsoft-producten die aan het begin van dit artikel worden vermeld.

Meer informatie

Stappen om het gedrag te reproduceren

  1. Open Microsoft Excel en maak een nieuwe werkmap.
  2. Typ de volgende voorbeeldgegevens, beginnend met cel A1 zich in de linkerbovenhoek in Blad1:
    Deze tabel samenvouwenDeze tabel uitklappen
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11testen11testen
    22testen22testen

  3. Sla de werkmap op als test. xls. U kunt de toepassing Excel geopend laten, maar u moet de nieuwe werkmap sluit.
  4. In Microsoft Visual Basic een nieuw standaard-EXE-project maken. Form1 wordt standaard gemaakt.
  5. Op deProjectmenu, klikt u opVerwijzingen. Selecteer in de lijst met beschikbare verwijzingenMicrosoft ActiveX Data Objects 2.xBibliotheek.
  6. Plaats eenCommandButtoncontrole op Form1 en plak de volgende code in deKlik opgebeurtenisprocedure voor de knop. Houd er rekening mee dat deze code een lege teken reeks wordt ingevoegd in de middelste kolom, kolom c.
    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 = Nothing
    End Sub
    					
  7. Uw Visual Basic testproject opslaan in dezelfde map als uw werkmap test. xls.
  8. Het project wordt uitgevoerd en klik vervolgens op de knop. De eerste keer start van het project in de Visual Basic Integrated Development Environment (IDE), verschijnt het volgende foutbericht:
    Run time fout-'2147467259 (80004005)': Geselecteerde sorteervolgorde niet ondersteund door het besturings systeem
    Dit is een bekend probleem.Voor meer informatie klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
    246167Reeks fout Opening ADODB record set voor het eerst tegen een Excel XLS sorteren
  9. Klik in het dialoog venster fout berichtFout opsporing, en druk op de toets F5 te voeren van het project. Houd er rekening mee dat deze twee nieuwe rijen gegevens in plaats van een ingevoegd omdatUpdatetweemaal wordt uitgevoerd.
  10. Sluit het formulier aan het einde van het project. Test. xls in Excel te openen en bekijk de gegevens in Sheet1. U verwacht dat de volgende resultaten:

    Deze tabel samenvouwenDeze tabel uitklappen
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11testen11testen
    22testen22testen
    3333testen

    Echter, ziet u de volgende gegevens:

    Deze tabel samenvouwenDeze tabel uitklappen
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11testen11testen
    22testen22testen
    3333testen

    Deze wordt weer gegeven als lege teken reeks wordt ingevoegd in ColumnC is genegeerd en is verdwenen. De volgende numerieke waarden zijn dus één kolom ingevoegd links van hun beoogde bestemming. De volgende teken reeks kolom wordt niet beïnvloed.

Variatie 1

De test gegevens als volgt configureren:

Deze tabel samenvouwenDeze tabel uitklappen
ColumnAColumnBColumnCColumnDColumnE
1testen11testen
2testen22testen

In Visual Basic-project, wijzigt u de sectie nieuwe waarden als volgt toevoegen:
   '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
				
Als u test. xls in Excel opent, verschijnt Sheet1 de volgende gegevens:

Deze tabel samenvouwenDeze tabel uitklappen
ColumnAColumnBColumnCColumnDColumnE
1testen11testen
2testen22testen
333testen

Dit probleem treedt niet op als één numerieke kolom voo raf gaat aan de lege teken reeks waarde ziet.

Variatie 2

De test gegevens als volgt configureren:

Deze tabel samenvouwenDeze tabel uitklappen
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11testentesten11testen
22testentesten22testen

In Visual Basic-project, wijzigt u de sectie nieuwe waarden als volgt toevoegen:
   '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
				
Als u test. xls in Excel opent, verschijnt Sheet1 de volgende gegevens:

Deze tabel samenvouwenDeze tabel uitklappen
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11testentesten11testen
22testentesten22testen
3333testen

Als ADO twee lege teken reeks waarden voegt, lijkt het alsof de lege teken reeksen die zijn ingevoegd in ColumnC en ColumnD worden genegeerd en zijn verdwenen. Daarom zijn de volgende numerieke waarden ingevoegde twee kolommen links van hun beoogde bestemming. De volgende teken reeks kolom wordt niet beïnvloed.

Referenties

Voor meer informatie klikt u op de volgende artikel nummers in de Microsoft Knowledge Base:
294410Access 2002: Null-waarden vervangen door de volgende veld gegevens bij het exporteren naar Excel
257819PROCEDURE: ADO gebruiken met Excel-gegevens vanuit Visual Basic of VBA

Eigenschappen

Artikel ID: 314763 - Laatste beoordeling: maandag 28 februari 2011 - Wijziging: 2.0
Trefwoorden: 
kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbmt KB314763 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:314763
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com