Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    me.close e effetti collaterali su variabili globali

    Ciao scusate una piccola domanda:

    ho dichiarato una variabile globale, che uso in 2 diversi form,
    quando mi ritrovo a chiudere un form per riaprine un'altro eseguo un me.close e una successiva riapertura del
    secondo form. Mi piacerebbe sapere perchè quando faccio il me.close mi mette la variabile globale a 0.
    lo seguito in debug non riesco a capire perchè effetto collaterale, visto che la variabile è globale?

    Come posso fare?

    GRazie anticipatamente.
    Tony

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Se ricrei ogni volta un oggetto nuovo della classe a cui appartiene il form, è normale che quella variabile, se è un campo di quell'oggetto, venga inizializzata, così come ogni altro campo o proprietà del form, mentre la variabile relativa all'oggetto precedente viene perduta assieme alla distruzione dell'oggetto stesso.

    Non è un effetto collaterale quello che tu indichi: è del tutto nomale, e guai se accadesse il contrario.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    Originariamente inviato da alka
    Se ricrei ogni volta un oggetto nuovo della classe a cui appartiene il form, è normale che quella variabile, se è un campo di quell'oggetto, venga inizializzata, così come ogni altro campo o proprietà del form, mentre la variabile relativa all'oggetto precedente viene perduta assieme alla distruzione dell'oggetto stesso.

    Non è un effetto collaterale quello che tu indichi: è del tutto nomale, e guai se accadesse il contrario.
    scusa non ho capito, bene..

    è una variabile globale, non un campo del form, e cmq non so come risolvere la cosa!

    mi puoi dare qualche dritta?

    Grazie
    Tony

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    L'hai dichiarata Shared?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    Originariamente inviato da alka
    L'hai dichiarata Shared?
    no però..
    mi dice che le variabili dichiarate nel modulo non possono essere: shared
    Tony

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da tony83
    no però..
    E allora di "globale" hanno ben poco...

    Originariamente inviato da tony83
    mi dice che le variabili dichiarate nel modulo non possono essere: shared
    Pensavo appartenessero ad un Form io...

    Non è che semplicemente, da qualche parte, le reimposti a zero... :master:

    Magari posta pure qualche pezzo di codice significativo, altrimenti si faranno mille supposizioni.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    non saprei perchè in debug mi riazzera la variabile precisamente in:

    me.close
    Tony

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da tony83
    non saprei perchè in debug mi riazzera la variabile precisamente in:
    me.close
    No code, no party...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    FORM PRINCIPALE:

    codice:
    Private Sub btt_salva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btt_salva.Click
            If glb_int_id = 0 Then
                If controlloTextBox() = True Then
                    glb_Apriconnessione()
                    Dim obj_dataReader As OleDbDataReader = glb_dataReader("SELECT * FROM tbl_cliente WHERE nome_cliente = '" & txt_nome.Text & "' AND cognome_cliente = '" & txt_cognome.Text & "'")
                    While obj_dataReader.Read()
                        caricaLista()
                        MessageBox.Show("Utente già inserito")
                        obj_dataReader.Close()
                        glb_chiudiConnessione()
                        Exit Sub
                    End While
                    glb_Apriconnessione()
                    glb_int_id = 1
                    obj_dataReader = glb_dataReader(recuperaIdMAx("id_cliente", "tbl_cliente"))
                    If obj_dataReader.Read Then
                        If Not IsDBNull(obj_dataReader("nuovo_campo")) Then
                            glb_int_id = obj_dataReader("nuovo_campo") + 1
                        End If
                    End If
                    Dim str_sql As String = "INSERT INTO tbl_cliente (id_cliente, nome_cliente, cognome_cliente, indirizzo_cliente,telefono_cliente, note_cliente,attivo_cliente,email_cliente) VALUES (" & glb_int_id & ",'" & txt_nome.Text & "', '" & txt_cognome.Text & "','" & txt_indirizzo.Text & "','" & txt_telefono.Text & "','" & txt_note.Text & "',true,'" & txt_email.Text & "')"
                    sh_risultatoNonQuery = glb_nonQuery(str_sql)
                    If sh_risultatoNonQuery = 0 Then
                        MessageBox.Show("Inserimento non riuscito")
                    End If
                    obj_dataReader.Close()
                    obj_dataReader = glb_dataReader(recuperaIdMAx("id_cliente", "tbl_cliente"))
                    If obj_dataReader.Read Then
                        If Not IsDBNull(obj_dataReader("nuovo_campo")) Then
                            glb_int_operazione   = obj_dataReader("nuovo_campo") + 1
                        End If
                    End If
                    obj_dataReader.Close()
                    Dim newYear = Microsoft.VisualBasic.Day(DateTime.Now) & "/" & Month(DateTime.Now) & "/" & Year(DateTime.Now) + 1
                    Dim valoreTessera As Double
                    Do
                        valoreTessera = CDbl(InputBox("Valore iniziale", "Inserire credito tessera"))
                        If Not IsNumeric(valoreTessera) Or valoreTessera < 0 Or valoreTessera > 100 Then
                            MessageBox.Show("Inserire un valore valido")
                        End If
                    Loop While (Not IsNumeric(valoreTessera) Or valoreTessera < 0 Or valoreTessera > 100)
                    str_sql = "INSERT INTO tbl_tessera (id_cliente, id_tessera, dataInizio_tessera, dataFine_tessera, credito_tessera, attivo_tessera) VALUES (" & glb_int_id & "," & glb_int_operazione & ",'" & CDate(DateTime.Now) & "', '" & CDate(newYear) & "','" & valoreTessera & "',true)"
                    sh_risultatoNonQuery = glb_nonQuery(str_sql)
                    glb_chiudiConnessione()
                    obj_dataReader.Close()
                    Me.Close()
                    Call obj_frm_index.apriFrm_tessere() 
                End If
            Else
                If glb_int_id <> 0 Then
                    If controlloTextBox() = True Then
                        glb_Apriconnessione()
                        If Trim(txt_note.Text) = "" Then
                            txt_note.Text = " "
                        End If
                        Dim str_sql As String = "Update tbl_cliente SET nome_cliente = '" & txt_nome.Text & "', indirizzo_cliente = '" & txt_indirizzo.Text & "' , cognome_cliente = '" & txt_cognome.Text & "' , note_cliente = '" & txt_note.Text & "', attivo_cliente = true, telefono_cliente = '" & txt_telefono.Text & "',email_cliiente = '" & txt_email.Text & "'  WHERE id_cliente = " & glb_int_id
                        sh_risultatoNonQuery = glb_nonQuery(str_sql)
                        If sh_risultatoNonQuery = 0 Then
                            MessageBox.Show("Modifica non riuscita")
                        End If
                        glb_chiudiConnessione()
                        caricaLista()
                    End If
                End If
            End If
        End Sub
    FORM TESSERA (richiamato):
    codice:
        Sub apriFrm_tessere()
            If pr_frm_tessere Is Nothing Then
                pr_frm_tessere = New frm_tessera()
                Dim obj_cliente As New frm_cliente()
                pr_frm_tessere.MdiParent = obj_frm_index.MdiParent
            End If
            pr_frm_tessere.Show()
            pr_frm_tessere.Focus()
        End Sub
        Private Sub mnu_visualizzaTessera_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnu_visualizzaTessera.Click
            Call apriFrm_tessere()
        End Sub
    MODULO GLOBALE:
    codice:
    MODULO GLOBALE:
    Module Modulo_Globale
        ' Oggetti globali
        Public obj_frm_index As New frm_index()
        ' Variabili globali
        Public sh_risultatoNonQuery As Short
        Public glb_int_id As Integer
        Public glb_int_contatore As Integer
        Public glb_int_contatore2 As Integer
        Public glb_int_operazione  As Integer
    'etc..
    END MODULE
    in debug mantiene il valore fino a me.close dopo diventa 0
    Tony

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Tu sei sicuro che glb_int_operazione non venga utilizzata anche in altre parti di codice oltre a quelle che hai riportato?

    A parte questo, un DataReader globale fa venire i brividi... VVoVe:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.