FIX: ADO inserisce dati in colonne non corrette in Excel

Traduzione articoli Traduzione articoli
Identificativo articolo: 314763 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si utilizza ADO per inserire nuove righe di dati in un foglio di lavoro di Microsoft Excel, se i dati includono campi che contengono valori stringa vuota, ADO potrebbe inserire i valori di dati dei campi numerici successivi nelle colonne non valido in Excel.

Questo problema si verifica in Driver Microsoft ODBC per Excel e il Provider Microsoft OLE DB per Jet versione 4.0. Questo problema si verifica se si utilizza un'istruzione SQL INSERT o la AddNew e i metodi Update dell'oggetto ADO Recordset .

Questo problema non si verifica se la cartella di lavoro Ŕ aperta nell'applicazione Excel quando ADO inserisce i nuovi record.

Tuttavia, Microsoft sconsiglia questa esercitazione, poichÚ una perdita di memoria si verifica se Excel Ŕ aperto durante le operazioni ADO. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
319998BUG: Perdita di memoria quando si query apre il foglio di lavoro di Excel con ADO
Fare riferimento alla sezione "Informazioni" per informazioni sulle circostanze in cui questo problema si verifica.

Risoluzione

Per risolvere il problema, ottenere il service pack pi¨ recente per Jet 4.0 service pack. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
239114Procedura: Ottenere il Service Pack pi¨ recente per il motore di Database Microsoft Jet 4.0

Status

Microsoft ha confermato che questo un bug nei prodotti Microsoft elencati all'inizio di questo articolo.

Informazioni

Procedura per riprodurre il problema

  1. Aprire Microsoft Excel e creare una nuova cartella di lavoro.
  2. In Sheet1, digitare i dati di esempio riportati di seguito, iniziano con la cella A1 nell'angolo superiore sinistro:
    Riduci questa tabellaEspandi questa tabella
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11test11test
    22test22test

  3. Salvare il file come test.xls. ╚ possibile lasciare aperta l'applicazione Excel, ma Ŕ necessario chiudere la nuova cartella di lavoro.
  4. In Microsoft Visual Basic creare un nuovo progetto EXE standard. In base all'impostazione predefinita, viene creato il progetto Form1.
  5. Scegliere riferimenti dal menu progetto . Selezionare dall'elenco di riferimenti disponibili, Microsoft ActiveX Data Objects 2. x libreria .
  6. Inserire un controllo CommandButton nel Form1 e quindi incollare il codice riportato di seguito nella routine evento Click per il pulsante. Nota che il codice inserisce una stringa vuota nella colonna centrale, la colonna 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. Consente di salvare il progetto di test Visual Basic nella stessa cartella come cartella di lavoro, test.xls.
  8. Eseguire il progetto e quindi fare clic sul pulsante. La prima volta che si esegue il progetto di Visual Basic sviluppo ambiente (INTEGRATO), si potrebbe essere visualizzato il seguente messaggio di errore:
    Errore di Runtime '-2147467259 (80004005)': selezionati sequenza non supportata dal sistema operativo di confronto
    Si tratta di un problema noto.Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    246167Confronto sequenza errore apertura ADODB Recordset la prima volta da un file XLS di Excel
  9. Nella finestra di finestra di dialogo del messaggio di errore, fare clic su debug e quindi premere il tasto F5 per continuare a eseguire il progetto. Nota Questo inserito due nuove righe di dati anzichÚ uno poichÚ aggiornamento viene eseguito due volte.
  10. Chiudere il modulo per terminare il progetto. Riaprire test.xls in Excel e quindi esaminare i dati di Sheet1. Previsto i seguenti risultati:

    Riduci questa tabellaEspandi questa tabella
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11test11test
    22test22test
    3333test

    SarÓ tuttavia visualizzare i dati seguenti:

    Riduci questa tabellaEspandi questa tabella
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11test11test
    22test22test
    3333test

    Viene visualizzata come se la stringa vuota viene inserita ColumnC Ŕ stata ignorata e non Ŕ pi¨ visibile. Pertanto, i valori numerici successivi sono inserita una colonna a sinistra di destinazioni previsti. Non Ŕ interessata la colonna successiva della stringa.

Variazione 1

Configurare i dati di test come segue:

Riduci questa tabellaEspandi questa tabella
ColumnAColumnBColumnCColumnDColumnE
1test11test
2test22test

Nel progetto Visual Basic, modificare la sezione per aggiungere nuovi valori come illustrato di seguito:
   '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
				
quando si apre test.xls in Excel, Sheet1 Visualizza i dati seguenti:

Riduci questa tabellaEspandi questa tabella
ColumnAColumnBColumnCColumnDColumnE
1test11test
2test22test
333test

Si noti che questo problema non si verifica quando una singola colonna numerica precede il valore stringa vuota.

Variazione 2

Configurare i dati di test come segue:

Riduci questa tabellaEspandi questa tabella
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11testtest11test
22testtest22test

Nel progetto Visual Basic, modificare la sezione per aggiungere nuovi valori come illustrato di seguito:
   '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
				
quando si apre test.xls in Excel, Sheet1 Visualizza i dati seguenti:

Riduci questa tabellaEspandi questa tabella
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11testtest11test
22testtest22test
3333test

Se ADO inserisce due valori di stringa vuota, sembra come se le stringhe vuote vengono inserite ColumnC e ColumnD vengono ignorate e non sono pi¨ disponibili. Pertanto, i valori numerici successivi sono inserite due colonne a sinistra di destinazioni previsti. Non Ŕ interessata la colonna successiva della stringa.

Riferimenti

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:
294410ACC2002: Null sostituiti con i dati del campo successivo durante l'esportazione in Excel
257819HOWTO: Utilizzo di ADO con dati di Excel da Visual Basic o VBA

ProprietÓ

Identificativo articolo: 314763 - Ultima modifica: lunedý 26 settembre 2005 - Revisione: 1.2
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi:á
kbmt kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbqfe KB314763 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 314763
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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