Novità

Mente da programmatore

Non ci siamo. A parte il fatto che devo gestire gli errori. Se modifico un'estrazione esistente mi scrive una nuova riga nel file CSV ma non riscrive la "vecchia riga" ... e se invece ne creo una nuova ...la funzione IsEstrazioneValida mi restituisce false in quanto il numero dell'estrazione inserita supera quello dell'archivio
 
vai in debug e cerca di scoprire il perche la funzione che scrive i dati nel file l'ho appena testata e funziona quindi forse gli passi sempre un nuovo id
 
ciao Edoardo ho provato a vedere i tuoi sorgenti ma ci sono dei problemi.
Per poter funzionare l'a'rchivio deve essere composto da record tutti della stessa lunghezza , percio ho rimesso lo script per produrlo da spaziometria , ma mi sa che non lo hai cambiato o ti sei sbagliato.
Se apri l'archivio presente nei sorgenti che hai postato ha l'indice annuale che non è formattato questo genera righe di lunghezza differente
pertanto quando uno va a fare i lcalcolo dell'offset non potra mai funzionare visto che moltiplichiamo la lunghezza del record per il numero di riga meno 1 ..
Quindi è per questo che non riesci a editare estrazioni in mezzo. Lancia lo script che ho messo per rigenerare il file csv dell'archivio e aprilo verifica che sia qeullo giusto.

seconda cosa l'array dei campi testo della finestra browser andava dichiarato globale alla form non all'intero progetto quindi va levato dal modulo e va dichiarato nel form

per la scrollbar hai notato che non ti punta correttamente l'ultima estrazione ? per ora metti la proprietà largechange = 1 come quella smallchange.

conqueste poche modifiche gia ti dovrebbe funzionare la scrittura delle estrazioni.
 
ciao
scaricato la versione community di visual studio
Appena si stabilizza la versione di base che state costruendo la scarico. cosi comincio a studiare da li.
ho paura di non riuscire a correggere , nelle parti esatte.
devo ancora capire come si apre un nuovo progetto. vediamo se sul Tubo troviamo qualcosa;)
 
legend puoi iniziare da subito con l'ultimo file postato e provare anche tu a fare le cose che suggerisco , per esempio la routine sopra potresti sitemarla tranquillamente
 
Si ho visto.
Ci provo.
Ora sto facendo le lastre per la bronchite.
Non mi faccio mancare nulla :(
Appena rientro ci provo..
 
la salute prima di tutto :-) poi quando ti metterai fai tuttte le domande che ritieni anche se ti sembrano stupide.
ciao..
 
ciao Edoardo ho provato a vedere i tuoi sorgenti ma ci sono dei problemi.
Per poter funzionare l'a'rchivio deve essere composto da record tutti della stessa lunghezza , percio ho rimesso lo script per produrlo da spaziometria , ma mi sa che non lo hai cambiato o ti sei sbagliato.
Se apri l'archivio presente nei sorgenti che hai postato ha l'indice annuale che non è formattato questo genera righe di lunghezza differente
pertanto quando uno va a fare i lcalcolo dell'offset non potra mai funzionare visto che moltiplichiamo la lunghezza del record per il numero di riga meno 1 ..
Quindi è per questo che non riesci a editare estrazioni in mezzo. Lancia lo script che ho messo per rigenerare il file csv dell'archivio e aprilo verifica che sia qeullo giusto.

seconda cosa l'array dei campi testo della finestra browser andava dichiarato globale alla form non all'intero progetto quindi va levato dal modulo e va dichiarato nel form

per la scrollbar hai notato che non ti punta correttamente l'ultima estrazione ? per ora metti la proprietà largechange = 1 come quella smallchange.

conqueste poche modifiche gia ti dovrebbe funzionare la scrittura delle estrazioni.
Ieri attraverso il debug avevo già intuito il problema dell'archivio ed ho già risolto comunque grazie davvero. Ho risolto anche per la scrollbar eliminando limite massimo 100 dalla schermata proprietà. Non ho ripostato il progetto perchè tra poco implementerò l'usercontroll
 
Funzione sistemata:

Codice:
    Friend Function ScriviEstrazione(idEstr As Integer, strctEst As StrEstrazione) As Boolean
        Dim nOffset As Integer
        Dim sRiga As String
        Dim nLenRiga As Integer
        sRiga = StructArchivioToRecordArchivio(strctEst) & vbCrLf
        nLenRiga = Len(sRiga)
        nOffset = ((idEstr - 1) * nLenRiga) + 1
        Dim aB() As Byte = System.Text.Encoding.ASCII.GetBytes(sRiga)
        Dim objFile = IO.File.Open(GetPercorsoArchivio, IO.FileMode.OpenOrCreate, FileAccess.ReadWrite)
        objFile.Seek(nOffset - 1, IO.SeekOrigin.Begin)
        objFile.Write(aB, 0, aB.Length)
        objFile.Close()
        objFile.Dispose()
        If idEstr > UBound(Estrazioni) And idEstr = UBound(Estrazioni) + 1 Then
            ReDim Preserve Estrazioni(idEstr)
            Estrazioni(idEstr) = strctEst
        Else
            Estrazioni(idEstr) = strctEst
        End If
    End Function
 
ok , inserisci una gestione dell'errore ,bisogna evitare che per qualcosa di non previsto il programma vada in crash

Codice:
    Friend Function ScriviEstrazione(idEstr As Integer, strctEst As StrEstrazione) As Boolean
        Dim nOffset As Integer
        Dim sRiga As String
        Dim nLenRiga As Integer
        sRiga = StructArchivioToRecordArchivio(strctEst) & vbCrLf
        nLenRiga = Len(sRiga)
        nOffset = ((idEstr - 1) * nLenRiga) + 1
        Dim aB() As Byte = System.Text.Encoding.ASCII.GetBytes(sRiga)
        Dim objFile = IO.File.Open(GetPercorsoArchivio, IO.FileMode.OpenOrCreate, FileAccess.ReadWrite)
        objFile.Seek(nOffset - 1, IO.SeekOrigin.Begin)
        objFile.Write(aB, 0, aB.Length)
        objFile.Close()
        objFile.Dispose()


        If idEstr > UBound(Estrazioni) And idEstr = UBound(Estrazioni) + 1 Then
            ReDim Preserve Estrazioni(idEstr)
        End If
        
        Estrazioni(idEstr) = strctEst
       

    End Function
 
Ultima modifica di un moderatore:
Codice:
    Friend Function ScriviEstrazione(idEstr As Integer, strctEst As StrEstrazione) As Boolean
        Dim nOffset As Integer
        Dim sRiga As String
        Dim nLenRiga As Integer
        Try
            sRiga = StructArchivioToRecordArchivio(strctEst) & vbCrLf
            nLenRiga = Len(sRiga)
            nOffset = ((idEstr - 1) * nLenRiga) + 1
            Dim aB() As Byte = System.Text.Encoding.ASCII.GetBytes(sRiga)
            Dim objFile = IO.File.Open(GetPercorsoArchivio, IO.FileMode.OpenOrCreate, FileAccess.ReadWrite)
            objFile.Seek(nOffset - 1, IO.SeekOrigin.Begin)
            objFile.Write(aB, 0, aB.Length)
            objFile.Close()
            objFile.Dispose()
            If idEstr > UBound(Estrazioni) And idEstr = UBound(Estrazioni) + 1 Then
                ReDim Preserve Estrazioni(idEstr)
                Estrazioni(idEstr) = strctEst
            Else
                Estrazioni(idEstr) = strctEst
            End If
        Catch ex As Exception
            MessageBox.Show("Estrazione non presente o non consecutiva rilevata,impossibile proseguire", "Rilevato errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Function
 
Cosi è come si presente il button salva dopo aver inserito la gestione degli errori:

Codice:
    Private Sub ButtonSalva_Click(sender As Object, e As EventArgs) Handles ButtonSalva.Click
        Dim strEst As StrEstrazione
        strEst.DimensionaRuote()
        Dim i As Integer
        strEst.identifier = Convert.ToInt32(LabEstrTot.Text)
        strEst.Data.Numero = Convert.ToInt32(TextNum.Text)
        If TextData.Text.Length > 0 Then
            strEst.Data.Data = Convert.ToDateTime(TextData.Text)
        Else
            MessageBox.Show("Devi inserire una data", "Rilevata assenza dati", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return
        End If
        For r As Integer = 1 To 11
            For es As Integer = 1 To 5
                i += 1
                strEst.Ruote(r).Estratto(es) = aTxtNumeri(i).Text
            Next
        Next
        If IsEstrazioneValida(strEst) Then
            cArchivio.ScriviEstrazione(Convert.ToInt32(LabEstrTot.Text), strEst)
            ImpostaLimitiScrollBar()
            AlimentaContenutiForm()
            MessageBox.Show("Estrazione salvata correttamente", "Salvataggio concluso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("Dati non inseriti correttamente", "Rilevato errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return
        End If
    End Sub
 
ok , bisogna vedere come funziona nel complesso se gestisci bene l'inserimento di una nuva estrazione o l'annulla se l'utente ci ripensa.Se calcoli bene l'indice mensile nel caso di nuova.
Ti consiglio di inserire nel modulo funzioni una funzione che si chiami ConvertToInt che riceva come parametro una stringa e che dovrà tornare un valore intero dato dalal stringa convertita oppure 0 se la conversione è fallita ,sfruttandosempre il meccanismo della gestione dell'errore.

In pratica per come sono le cose ora se a convert.ToInt32 passiamo una stringa vuota capita un 'eccezione e quindi crasha.
Se noi incapsuliamo in un'apposita funzione la conversione della stringa a numero e ne gestiamo l'errore tutt'alpiu ci tornera 0 ma non crashera

poi per valorizzare i valori interi presi dagli input dell'utente utilizza la suddetta funzione
 
Codice:
    Function ConvertToInt(ByRef sRecord As String) As Integer
        Dim ValStr As Integer
        If sRecord <> "" Then
            ValStr = Convert.ToInt32(sRecord)
       
        Else
            ValStr = 0
       
        End If
     Return ValStr
    End Function

Codice:
    Private Sub ButtonSalva_Click(sender As Object, e As EventArgs) Handles ButtonSalva.Click
        Dim strEst As StrEstrazione
        strEst.DimensionaRuote()
        Dim i As Integer
        strEst.identifier = ConvertToInt(LabEstrTot.Text)
        strEst.Data.Numero = ConvertToInt(TextNum.Text)
        If TextData.Text.Length > 0 Then
            strEst.Data.Data = Convert.ToDateTime(TextData.Text)
        Else
            MessageBox.Show("Devi inserire una data", "Rilevata assenza dati", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return
        End If
        For r As Integer = 1 To 11
            For es As Integer = 1 To 5
                i += 1
                strEst.Ruote(r).Estratto(es) = ConvertToInt(aTxtNumeri(i).Text)
            Next
        Next
        If IsEstrazioneValida(strEst) Then
            cArchivio.ScriviEstrazione(ConvertToInt(LabEstrTot.Text), strEst)
            ImpostaLimitiScrollBar()
            AlimentaContenutiForm()
            MessageBox.Show("Estrazione salvata correttamente", "Salvataggio concluso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("Dati non inseriti correttamente", "Rilevato errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return
        End If
    End Sub
 
Ultima modifica:
anche per questo devi inserire una funzionedi conversione da stringa a data

If TextData.Text.Length > 0 Then
....
...
 
Ho già inserito una gestione errore... se la lunghezza del campo testo è uguale a zero genera un messaggio di errore ...ed attraverso il return permette di non perdere i dati inseriti e spingere l'utente ad inserirla
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 12 agosto 2025
    Bari
    24
    68
    73
    16
    76
    Cagliari
    78
    24
    82
    32
    90
    Firenze
    39
    46
    21
    45
    28
    Genova
    50
    03
    21
    64
    09
    Milano
    85
    44
    38
    43
    34
    Napoli
    12
    16
    56
    61
    03
    Palermo
    75
    64
    34
    25
    28
    Roma
    55
    29
    43
    06
    64
    Torino
    38
    60
    90
    53
    82
    Venezia
    12
    75
    34
    67
    77
    Nazionale
    70
    17
    25
    41
    57
    Estrazione Simbolotto
    Nazionale
    25
    28
    19
    34
    36
Indietro
Alto