Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di Akira
    Registrato dal
    Jul 2002
    Messaggi
    57

    [VB] Non importa nel DB tutti i dati

    Ciao a tutti
    devo importare un file di testo dentro a un DB e per farlo uso questa procedura:
    codice:
    Open SelezioneFile For Input As #1
    IntIDX = 0
    Do Until EOF(1)
        Line Input #1, strRiga
                
        Set recElenco = New ADODB.Recordset
        Do
            IntIDX = IntIDX + 1
            strSoluzione = Mid(strRiga, IntIDX, 8)
            txtCodice = strSoluzione
            
            If txtCodice = strOrigineNero Then
                
                recElenco.Open "anagrafica", cnDB, adOpenDynamic, adLockBatchOptimistic
                recElenco.AddNew
                ...
                recElenco.UpdateBatch
                recElenco.Close
            ElseIf txtCodice = "" Then
                Exit Do
            End If
                    
        Loop
        
    Loop
    Close (1)
    il problema è che il file di testo è grande (pesa 30MB) e non mi importa nel database tutti i dati.
    La procedura è giusta anche perchè non da nessun errore.
    Può essere che la variabile strRiga(che è una stringa) non riesca a contenere tutti i dati che passa il file di testo?

    Non so cosa possa essere altrimenti
    Non è vero ke i giorni di pioggia sono i piu brutti, sono gli unici giorni in cui puoi camminare a testa alta piangendo(Jim Morrison)

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    271
    - Assicurati che la condizione di uscita del ciclo
    codice:
    ElseIf txtCodice = "" Then
    si verifichi solo alla fine del file. :quipy:

    - Prova anche a dichiarare strRiga come variant così vai sul sicuro!

    - Sposta l'apertura del Recordset prima del ciclo, perchè aprire lo stesso record a ogni passaggio???
    Signori si nasce! E io modestamente, lo nacqui!!!
    Totò

  3. #3
    Utente di HTML.it L'avatar di Akira
    Registrato dal
    Jul 2002
    Messaggi
    57
    Ho impostato StrRiga come Variant (mi spieghi che cosa cambia dalla stringa?)e ho tolto l'apertura del recordset dal ciclo, però non funziona ancora.


    Per controllare l'uscita dal Do non saprei come fare se non in questa maniera
    codice:
            ...
            ElseIf txtCodice = "" Then
                Exit Do
            End If
    Sai darmi qualche altro suggerimento?
    Non è vero ke i giorni di pioggia sono i piu brutti, sono gli unici giorni in cui puoi camminare a testa alta piangendo(Jim Morrison)

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    271
    Quello che volevo dire è che se la variabile txtCodice risulta uguale a "" prima che si raggiunga la fine del recordset il ciclo termina e non importa tutti i dati!!!

    Metti uno stop prima del exit do e vedi a che punto del recordset sei quando esci dal ciclo.

    Così almeno capisci se per qualche oscuro motivo txtCodice si svuota
    Signori si nasce! E io modestamente, lo nacqui!!!
    Totò

  5. #5
    Utente di HTML.it L'avatar di Akira
    Registrato dal
    Jul 2002
    Messaggi
    57
    ho già provato a mettere lo stop quando entra nell'elseif e quindi mi esegue l'Exit Do ma non riesco a vedere il recorset, molto probabilmente perchè prima ho fatto recElenco.Close(è giusto o ho detto una cazzata?)
    come potrei fare a vedere a che punto è arrivato il file quando esegue l'Exit Do?

    :quipy:
    scusa se ti rompo ma mi dici la differenza fra String e Variant?
    Non è vero ke i giorni di pioggia sono i piu brutti, sono gli unici giorni in cui puoi camminare a testa alta piangendo(Jim Morrison)

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    271
    Direttamente dall' Help di VB

    "In una variabile Variant è possibile memorizzare tutti i tipi di dati definiti dal sistema. Quando si assegnano questi tipi di dati a una variabile Variant, non è pertanto necessario convertirli in quanto la conversione viene eseguita automaticamente"

    Quindi anche le stringhe ma se non sbaglio occupano più memoria... io te l'avevo consigliato solo per evitare eventuali problemi di dimensioni massime (anche se non penso che ci siano).

    La variabile IntIDX è un intero giusto? Non è che per caso il numero di righi supera i 32767 , viene generato un errore e il programma termina??
    Signori si nasce! E io modestamente, lo nacqui!!!
    Totò

  7. #7
    Utente di HTML.it L'avatar di Akira
    Registrato dal
    Jul 2002
    Messaggi
    57
    NO IntIDX è un Long
    Di errori non me ne da!

    Il file txt era un file .dat che ho rinominato e adesso lo sto analizzando.
    Quindi il file credo che sia continuo infatti la prima riga che memorizza in strRiga comprende una buona parte del file.

    Forse ho trovato il punto del file dove si interrompe il caricamento (poco prima della metà) ma non vedo niente di strano!

    Non è vero ke i giorni di pioggia sono i piu brutti, sono gli unici giorni in cui puoi camminare a testa alta piangendo(Jim Morrison)

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    271
    Riguardando il tuo codice:

    sposta prima del primo While


    codice:
    Set recElenco = New ADODB.Recordset
    recElenco.Open "anagrafica", cnDB, adOpenDynamic, adLockBatchOptimistic
    Ma questo gia te l'avevo detto e dopo la chiusura dell'ultimo LOOP (o alla fine della routine) chiudi recElenco.

    Non penso che ti risolve il problema, ma il codice risulterà più logico e pulito.
    Signori si nasce! E io modestamente, lo nacqui!!!
    Totò

  9. #9
    Non ho capito perchè crei ad ogni ciclo del loop principale un nuovo Recordset. Prova così:

    codice:
    Open SelezioneFile For Input As #1
    
    Set recElenco = New ADODB.Recordset
    recElenco.Open "anagrafica", cnDB, adOpenDynamic, adLockBatchOptimistic
    
    Do Until EOF(1)
        Line Input #1, strRiga
    
        IntIDX = 0
        Do
            IntIDX = IntIDX + 1
            strSoluzione = Mid(strRiga, IntIDX, 8)
            txtCodice = strSoluzione
            
            If txtCodice = strOrigineNero Then
                
                recElenco.AddNew
                ...
                recElenco.Update
    
            ElseIf txtCodice = "" Then
                Exit Do
            End If
                    
        Loop
        
    Loop
    recElenco.Close
    Close (1)
    * ho aggiunto un reset di IntIDX ad ogni ciclo de loop principale.
    * ho utilizzato Update al posto di UpdateBatch.
    Ultima cosa: usa meno possibile le variabili Variant! Sono comode ma a volte creano più problemi di prima.
    Chi non cerca trova.

  10. #10
    Utente di HTML.it L'avatar di Akira
    Registrato dal
    Jul 2002
    Messaggi
    57
    Ho sistemato il codice che effettivamente era un pò messo male, è che io prima vedo se funziona il programma poi sistemo il codice.

    Cmq il mio problema persiste!
    Non riesco ad importare tutto il file di testo e non capisco il perchè!

    Se vi viene in mente qualcosa vi supplico di dirmelo!

    Nel frattempo continuo con altre prove

    Grazie!
    Non è vero ke i giorni di pioggia sono i piu brutti, sono gli unici giorni in cui puoi camminare a testa alta piangendo(Jim Morrison)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.