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
    sabato 11 gennaio 2025
    Bari
    73
    43
    01
    58
    81
    Cagliari
    69
    60
    18
    02
    10
    Firenze
    25
    32
    18
    55
    54
    Genova
    48
    05
    40
    34
    69
    Milano
    10
    07
    70
    44
    79
    Napoli
    11
    89
    01
    34
    80
    Palermo
    37
    80
    82
    44
    77
    Roma
    78
    04
    38
    39
    56
    Torino
    08
    13
    30
    27
    24
    Venezia
    56
    75
    36
    18
    70
    Nazionale
    63
    83
    19
    31
    80
    Estrazione Simbolotto
    Bari
    35
    34
    12
    23
    20
Indietro
Alto