Al momento sei offline in attesa che la connessione Internet venga ristabilita

Il tuo browser non è supportato

Devi aggiornare il browser per usare il sito.

Esegui l'aggiornamento all'ultima versione di Internet Explorer

FIX: ADO inserisce dati in colonne non corrette in Excel

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
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.
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:
    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 = NothingEnd 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:

    ColumnAColumnBColumnCColumnDColumnEColumnF
    11test11test
    22test22test
    3333test

    Sarà tuttavia visualizzare i dati seguenti:

    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:

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:

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:

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:

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

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 314763 - Ultima revisione: 09/26/2005 19:41:15 - Revisione: 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 KbMtit
Feedback
ascript' src='" + (window.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");