Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41

    Problemi di compatibilità tra file salvati (vb6)

    Buongiorno.

    Qualche tempo fa avevo scritto un programma. In questo programma, oltre al resto, c'era una routine per salvare/leggere su file 7 textbox.
    Tutto ok.
    Questo programma per vari motivi l'ho distribuito a vari utenti e viene ben usato.
    Ultimamente ho deciso di ampliare quel programma. Ho cambiato varie cose. Tra queste ho aggiunto anche un textbox in piu,in un altro form, e questo é diventato un problema.
    SE io adesso salvo un file con il programma nuovo e poi voglio ricaricarlo, non ho nessun problema. Il problema nasce se con la nuova versione voglio caricare un file creato con la vecchia versione (nella quale vi era un textbox ed un form in meno)
    Se provo a caricare un vecchio file , i vari dati vengono piazzati alla rinfusa nei vari campi.
    Ecco il codice completo per salvare e caricare il file. Si tratta della vecchia versione con aggiunto in rosso il solo rigo aggiunto alla nuova che provoca l'imbroglio. Quindi il problema si pone se con la nuova versione voglio leggere file creati con la precedente.Dico anche che non ricevo alcun errore. Soltando i dati vengono sparpagliati.

    codice:
    Private Type MyFile
        nome          As String
        frase          As String
        nascita        As String
        Text1          As String
        Text2          As String
        Text3          As String
        Text4          As String
        Text21         As String
        End Type
    
    Public Sub LoadFile(FileName As String)
    Dim file    As Long
    Dim bestand As MyFile
    
    file = FreeFile
    Open FileName For Binary Access Read As #file
    Get #file, , bestand
    Close #file
    nome.Text = bestand.nome
    frase.Text = bestand.frase
    nascita.Text = bestand.nascita
    Text1.Text = bestand.Text1
    Text2.Text = bestand.Text2
    Text3.Text = bestand.Text3
    Text4.Text = bestand.Text4
    
    ‘form10.Text1.Text = bestand.Text21 ' campo in piu nella versione nuova 
    Public Sub SaveText(FileName As String)
    Dim file    As Long
    Dim bestand As MyFile
    
    bestand.nome = nome.Text
    bestand.frase = frase.Text
    bestand.nascita = nascita.Text
    bestand.Text1 = Text1.Text
    bestand.Text2 = Text2.Text
    bestand.Text3 = Text3.Text
    bestand.Text4 = Text4.Text
    ‘ bestand.Text21 = form10.Text1.Text ‘ campo in piu nella versione nuova 
    file = FreeFile
    Open FileName For Binary Access Write As #file
    Put #file, , bestand
    Close #file
    Anche se sostituissi presso gli utenti il vecchio con il nuovo, non si risolverebbe in quanto quelli hanno creato centinaia di file difficili da ricreare ad uno ad uno.

    E' possibile risolvere questo problema di compatibilità? Cambiando dove?

    grazie
    pazienza

  2. #2
    Devi per forza cambiare il codice del tuo programma..questa è una delle ragioni per cui vengono rilasciate sempre nuove versioni del programma. Nel nuovo programma potresti implementare una sub che analizza il file: discrimini così i file di versioni differenti e poi ti comporti in maniera differente..

    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41
    Chiedo scusa ma non ho capito cosa dovrei fare.
    Anche se do a tutti un'altra versione del programma,
    quelli ugualmente non potranno leggere i file creati con il vecchio.

    Che tipo /come implementare una sub che analizza il file ?
    Se si potesse fare questo risolverebbe il problema.

    Ho cercato varie soluzioni ma non ci sono riuscito.
    Avevo provato il seguente cambiamento ma nemmeno funziona,
    codice:
    Public Sub LoadFile(FileName As String)
         Dim file    As Long
       Dim bestand As MyFile
       Dim lFileLength As Long
    
       file = FreeFile
       Open FileName For Binary Access Read As #file
       lFileLength = LOF(file)
       Get #file, , bestand
       Close #file
       nome.Text = bestand.nome
       frase.Text = bestand.frase
       nascita.Text = bestand.nascita
       Text1.Text = bestand.Text1
       Text2.Text = bestand.Text2
       Text3.Text = bestand.Text3
       Text4.Text = bestand.Text4
       If  lFileLength <8 Then form10.text21.text = bestand.Text.21=""
    In modo che leggendo un vecchio file (meno degli 8 campi del nuovo)
    Per questo sto chiedendo se qualcuno ha una idea
    precisa ed eventualmente con un esempio.

    pazienza

  4. #4
    Procediamo per gradi.
    Ci sarà qualche differenza tra i file di vecchia versione e quelli nuovi? Se c'è, (e ci deve essere di sicuro), qual'è?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41
    Sono solo 2 differenze:
    Nella vecchia versione abbiamo 7 textbox, tutti sul form1

    Nella nuova versione abbiamo 1 textbox in piu. Questo ottavo textbox (nel codice sopra come si vede si chiama text21.text)
    si trova in un form a parte, il form10. Questo per necessita di programmazione. sarebbe troppo lungo spiegare qui tutto il programma.
    Quindi in pratica 2 cambiamenti rispetto alla vecchia: un textbox21 ed un form10
    Quindi se il nuovop legge il vecchio file, trova mancanti un textbox ed un form.

    pazienza

  6. #6
    Controlla e gestisci l'errore: quando carichi il vecchio file l'applicazione ti restituerà un errore, e quindi in presenza di questo errore potresti caricare i dati in un altro form oppure (meglio) fare una cosa del genere:

    codice:
    On error goto gestione_errori
    ...
    ...
    gestione_errori:
    If numeroerrore = 'quello che ti dà normalmente' then
    text1.text = ...
    ecc..
    tranne l'ultimo textbox perchè si sta aprendo il file senza
    Una gestione simile con il form..

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41
    Il fatto strano é (come ho detto anche sopra) che non mi da nessun errore !
    Quindi non ho nessun errore da gestire/prevenire .
    Il file vecchio viene caricato dal nuovo programma tranquillamente, senza nessuna comunicazione di errore.
    Quando poi alla fine del caricamento guardo i campi riempiti, allora vedo che i dati vengono dati alla rinfusa, cioé
    un campo vuoto, il dato che era nel 1 campo va al terzo, ecc.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... essendo dei file binari, non avrai alcun errore. I dati saranno caricati in maniera sbagliata e basta.

    Mi dispiace dirtelo, ma non ci sono soluzioni se non "convertire" tutti i file vecchi in nuovi prima di utilizzarli con la nuova versione del programma.

    Questo problema deriva da una insufficiente analisi del problema quando hai iniziato a scrivere il programma (ci si doveva pensare prima, insomma ...) e soprattutto e' un problema che e' insito nella scelta di un "file binario" invece che un DB vero e proprio.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41
    Si, oregon, un convertitore risolverebbe il problema.
    Lo avessi saputo prima avrei inserito nel primo programma qualche textbox vuoto ed not visible e ora sarebbe facile adattare il tutto.
    Ma ora é troppo tardi..
    Basterebbe dare un programmino convertitore, una routine da dare
    agli utenti per poter convertire i vecchi file. O meglio ancora inserire nel nuovo
    programma una opzione 'converti file versione x'

    Ma se io sapevo fare questo programmino, non ci sarebbe stato problema.

    Una idea? Possibilmente pratica, in quanto é da tempo che provo ad inserire, a cmbiare qua e la..

    pazienza

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pazienza
    Si, oregon, un convertitore risolverebbe il problema.
    Lo avessi saputo prima avrei inserito nel primo programma qualche textbox vuoto ed not visible e ora sarebbe facile adattare il tutto.
    No! Non e' questo il metodo. Non avresti dovuto usare un file binario, ma un db.
    Al limite potevi usare un file di testo strutturato (un file XML, un file INI ...) ma non un file binario.

    Ma ora é troppo tardi..
    Ovviamente ...

    Basterebbe dare un programmino convertitore, una routine da dare
    agli utenti per poter convertire i vecchi file. O meglio ancora inserire nel nuovo
    programma una opzione 'converti file versione x'

    Ma se io sapevo fare questo programmino, non ci sarebbe stato problema.
    Ma quindi tu non sai come scrivere il programma che converte?

    Ovviamente lo dovrai eseguire su ogni file ... e mi era parso che, essendo tanti (centinaia ...) non volevi agire su ogni file ...

    Comunque convertire file per file e' l'unico modo.

    Una idea? Possibilmente pratica, in quanto é da tempo che provo ad inserire, a cmbiare qua e la..

    pazienza
    Non ho capito una cosa ... ma nel file c'e' soltanto un unico gruppo di dati?

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.