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
    giovedì 17 luglio 2025
    Bari
    22
    33
    04
    68
    47
    Cagliari
    09
    52
    27
    21
    47
    Firenze
    05
    33
    72
    17
    08
    Genova
    76
    67
    65
    68
    45
    Milano
    75
    52
    46
    34
    22
    Napoli
    40
    23
    71
    12
    22
    Palermo
    44
    89
    39
    01
    31
    Roma
    89
    04
    05
    82
    26
    Torino
    05
    59
    85
    88
    24
    Venezia
    69
    45
    75
    44
    30
    Nazionale
    28
    85
    16
    03
    83
    Estrazione Simbolotto
    Nazionale
    39
    26
    40
    23
    24
Indietro
Alto