Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [VB6] Files di record

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    150

    [VB6] Files di record

    Dovrei scrivere alla fine di un file binario un record ed uso la seguene sintassi ma mi da errore dicendo che il numero del record è errato chi mi sa aiutare ??


    Dim TRec As RecArticolo ' RECORD DI APPOGGIO

    Dim NumFile As Integer ' DESCRITTORE DEL FILE
    Dim DimRec As Integer ' DIMENSIONE DEL GENERICO RECORD

    If Len(TxtData(0)) > 0 Then

    NumFile = FreeFile

    ' SCARICO I DATI IN UN RECORD TEMPORANEO
    TRec.Codice = TxtData(0)
    TRec.Descrizione = TxtData(1)
    TRec.Prezzo = IIf(Len(TxtData(2)) = 0, 0, TxtData(2))
    TRec.Quantità = IIf(Len(TxtData(3)) = 0, 0, TxtData(3))

    ' SALVATAGGIO DEI DATI SUL FILE
    DimRec = Len(TRec)
    Open Path For Random As #NumFile Len = DimRec

    Put #NumFile, (LOF(NumFile) \ DimRec)+1, TRec

    Close #NumFile

    Call Cmd_Click(1)
    Else
    MsgBox "Specificare almeno un codice articolo valido . . ."
    End If
    Carlo Carbone

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    150
    nessuno sa risolvere questo problema ????
    Carlo Carbone

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    150
    L'errore preciso è bad record length
    Carlo Carbone

  4. #4
    Dove è di preciso l'errore? (in quale riga?)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    150
    Put #NumFile, (LOF(NumFile) \ DimRec)+1, TRec
    Carlo Carbone

  6. #6
    L'errore che ti da non ha a che fare col numero di record, ma con la lunghezza record. Lo da quando la lunghezza di quello che leggi/scrivi tramite l'istruzione get/put (in questo caso TRec) non corrisponde a quella dichiarata nella Open (Len = Len(TRec)).

    Nel tuo caso è apparentemente corretto.

    Dovresti postare la struttura RecArticolo. Se in quella struttura dichiari delle variabili String (come per esempio la Descrizione) devi assicurarti che sia dichiarata anche la sua lunghezza.
    Per esempio è errato scrivere...
    codice:
      Type RecArticolo
           Codice          As String
           Descrizione     As String
           Prezzo          As Double
           Quantita        As Long
      End Type
    ma è corretto scrivere...
    codice:
      Type RecArticolo
           Codice          As String * 10
           Descrizione     As String * 50
           Prezzo          As Double
           Quantita        As Long
      End Type
    Nel primo caso quando utilizzi Len(TRec) per ogni campo String vengono riservati solo 4 bytes, e se inserisci nel campo Descrizione una stringa superiore a 4 bytes ecco giustificato l'errore. Devi quindi prevedere una lunghezza massima per ogni campo di tipo String.
    Ha senso anche dal punto di vista logico. Dal tuo programma mi sembra di capire che vuoi aggiungere un record in fondo al file. Con l'istruzione Put il programma si posiziona al byte = LunghezzaRecord * NumeroDiRecord + 1, quindi perforza i record devono essere tutti lunghi uguali.

    Visto che il codice da te postato sembra corretto, ma non hai postato tutto, è solo l'ipotesi + logica.

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.