UserForm VB.Net

di il
6 risposte

UserForm VB.Net

Scusate la domanda forse banale, ma come si fa a “riempire” una UserForm con dati presi da un DB?

Io ho proceduto così:

                                        Dim UserC As New UserControl_Simon
                                       UserC.T_Compo.Text = DR4.GetString(6)
                                       UserC.T_Causa.Text = DR4.GetString(7)
                                       UserC.T_Classe.Text = DR4.GetString(8)

e non mi dà nessun errore ma nelle rispettive caselle della UserForm non appare nulla.

Ogni suggerimento sarà ovviamente apprezzato.

6 Risposte

  • Re: UserForm VB.Net

    Cosa è DR4? Il resto del codice dov'è?

  • Re: UserForm VB.Net

    Ecco il pezzo di codice completo:

                            Using reader1 = cmd2.ExecuteReader()
                               If reader1.HasRows Then
                                   Try
                                       If rec_presenti > 1 Then
                                       Else
                                           reader1.Close()
                                           DR4 = cmd2.ExecuteReader
                                           DR4.Read()
                                           TempD = DR4.GetDouble(5)
                                           Dim UserC As New UserControl_Simon
                                           UserC.T_Compo.Text = DR4.GetString(6)
                                           UserC.T_Causa.Text = DR4.GetString(7)
                                           UserC.T_Classe.Text = DR4.GetString(8)
                                       End If
                                   Catch ex As Exception
                                       MsgBox(“Errore: ” & ex.Message)
                                   End Try
                               Else
                                   MessageBox.Show("NON CI SONO DIFETTI")
                                   GoTo Fuori
                               End If
                           End Using
  • Re: UserForm VB.Net

    Che senso ha scrivere

                                       If rec_presenti > 1 Then
                                       Else
    									...


    ?

    E poi, cos'è rec_presenti ?

  • Re: UserForm VB.Net

    14/12/2022 - grumpy ha scritto:


    Che senso ha scrivere

                                       If rec_presenti > 1 Then
                                       Else
    									...

    Fosse l'unico problema di quel codice… :)

    14/12/2022 - Makino ha scritto:


    Ecco il pezzo di codice completo […]

                            Using reader1 = cmd2.ExecuteReader()
                               If reader1.HasRows Then
                                   Try
                                       If rec_presenti > 1 Then
                                       Else
                                           reader1.Close()
                                           DR4 = cmd2.ExecuteReader
                                           DR4.Read()
                                           TempD = DR4.GetDouble(5)
                                           Dim UserC As New UserControl_Simon
                                           UserC.T_Compo.Text = DR4.GetString(6)
                                           UserC.T_Causa.Text = DR4.GetString(7)
                                           UserC.T_Classe.Text = DR4.GetString(8)
                                       End If
                                   Catch ex As Exception
                                       MsgBox(“Errore: ” & ex.Message)
                                   End Try
                               Else
                                   MessageBox.Show("NON CI SONO DIFETTI")
                                   GoTo Fuori
                               End If
                           End Using

    C'è un numero spropositato di errori:

    • manca il contesto nel quale il codice viene eseguito (evento? metodo? altro?);
    • non si capisce perché esegui due volte il comando “cmd2” per ottenere lo stesso risultato;
    • non c'è la valorizzazione di rec_presenti né si capisce da dove arriva;
    • non si capisce a che serve l'assegnazione a TempD;
    • invece di usare i metodi GetDouble(), GetString() ecc. sarebbe più leggibile accedere al campo con DR4["nomecampo"];
    • quel GoTo Fuori fa rabbrividire!

    In sintesi, tra errori formali e reali, credo sia opportuno riscrivere completamente questa parte di codice, perché risulta incomprensibile oltreché illeggibile così come è stata implementata, e se sorgono problemi e/o bug non mi stupisce per nulla, data la commistione di operazioni inframezzate e implementate nel modo sbagliato (vedi elenco sopra). :|

  • Re: UserForm VB.Net

    Grazie Alka per la risposta! Bocciato su tutta la linea a quanto pare….comprensibile per un “povero” vecchietto che si diletta a passare il tempo.

    Cmq cercherò di risponderti per quanto posso:

    Contesto nel quale il codice viene eseguito: Fa parte di una subroutine di caricamento dati in una maschera da un DB Access

    non si capisce perché esegui due volte il comando “cmd2” per ottenere lo stesso risultato : così sono abituato a fare per testare prima la presenza di record per evitare errori di record mancanti

    non c'è la valorizzazione di rec_presenti né si capisce da dove arriva: viene valorizzato in passi precedenti.

    non si capisce a che serve l'assegnazione a TempD : Variabile temporanea che mi serve per altri scopi

    invece di usare i metodi GetDouble(), GetString() ecc. sarebbe più leggibile accedere al campo con DR4["nomecampo"]: Strano perchè in passato ho provato ma mi generava errore…..

    quel GoTo Fuori fa rabbrividire: questa è la più bella! Perchè? Come esci tu da una subroutine in casi come questo?

  • Re: UserForm VB.Net

    14/12/2022 - Makino ha scritto:


    Bocciato su tutta la linea a quanto pare….comprensibile per un “povero” vecchietto che si diletta a passare il tempo.

    Il problema non sta nell'anagrafica, ma nell'approccio: che si sia giovanotti o anzianotti, prima si studiano i libri, la documentazione, gli esempi e tutto il resto, poi si scrive il codice nel modo corretto in base a quanto si è appreso, a prescindere dalla motivazione di base, che sia per lavoro o per hobby.

    14/12/2022 - Makino ha scritto:


    Fa parte di una subroutine di caricamento dati in una maschera da un DB Access

    Questo era chiaro dal codice, ma non è chiaro il momento in cui la procedura viene invocata, né da che luogo, né a fronte di quale evento.

    14/12/2022 - Makino ha scritto:


    così sono abituato a fare per testare prima la presenza di record per evitare errori di record mancanti

    Stai facendo due operazioni, verifica della presenza di record e successiva lettura, che si basano sullo stesso comando/query, quindi il risultato sarà lo stesso, pertanto tanto vale eseguirlo una volta sola e testare le due condizioni in un sol colpo.

    14/12/2022 - Makino ha scritto:


    non c'è la valorizzazione di rec_presenti né si capisce da dove arriva: viene valorizzato in passi precedenti.

    Se chiedi di aiutarti per un problema che riguarda codice nel quale appare una variabile coinvolta e valorizzata altrove, in un pezzo di codice non riportato, del quale non sappiamo né cosa avviene né quale valore assegna a quella variabile, è difficile fornire indicazioni utili, oltre al fatto che il suo uso è assolutamente improprio (ti è stato fatto notare che c'è un If..Then… senza codice, che è solo nell'Else).

    14/12/2022 - Makino ha scritto:


    TempD : Variabile temporanea che mi serve per altri scopi

    Ok, quindi possiamo ignorarla.

    14/12/2022 - Makino ha scritto:


    Strano perchè in passato ho provato ma mi generava errore…..

    Probabilmente generava errore perché ti sei sbagliato. Hai ragionato sull'errore specifico? Se ogni volta che ottieni un errore, magari lecito, usando un metodo e tu lo cambi, dovesse accadere che ottieni di nuovo un errore, magari diverso, allora non avrai più possibilità.

    La programmazione non va a tentativi, salvo quando hai esperienza sufficiente per poterlo fare.

    14/12/2022 - Makino ha scritto:


    questa è la più bella! Perchè? Come esci tu da una subroutine in casi come questo?

    Quando le istruzioni di una subroutine sono finite, non resta altro che uscire: non c'è bisogno di farlo forzatamente, in nessun caso.
    Si chiama “programmazione strutturata”, anche questa ampiamente documentata.

    Ciao! :)

Devi accedere o registrarti per scrivere nel forum
6 risposte