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ì 14 aprile 2026
    Bari
    12
    14
    29
    85
    76
    Cagliari
    33
    75
    71
    90
    35
    Firenze
    72
    76
    56
    06
    80
    Genova
    37
    73
    08
    34
    78
    Milano
    47
    85
    01
    11
    08
    Napoli
    07
    30
    46
    29
    11
    Palermo
    32
    40
    78
    46
    74
    Roma
    43
    13
    65
    05
    52
    Torino
    64
    04
    44
    36
    74
    Venezia
    48
    50
    21
    28
    19
    Nazionale
    70
    88
    15
    44
    20
    Estrazione Simbolotto
    Genova
    28
    07
    14
    16
    35
Indietro
Alto