Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    validità variabile modulo

    sì lo so è una domanda tanto niubba che mi sto già scavando la buca VVoVe:

    in access avrei la necessità di conservare il valore di una variabile dalla routine evento click (su un commandbutton) alla routine beforeupdate della form stessa.

    ho provato a dichiarare la variabile in questione all'inizio del modulo della form, e in effetti in entrambe le routine questa variabile è valorizzata. il problema è che nella prima routine cambio il valore, ma quando esco dalla routine mi perde il nuovo valore! se può essere utile posto il codice
    Abeti nel deserto? Nemmeno l'ombra (A. Bergonzoni)
    _________________________________
    www.like-a-loft.com

  2. #2
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387

    Re: validità variabile modulo

    Originariamente inviato da nicolamanzoni
    sì lo so è una domanda tanto niubba che mi sto già scavando la buca VVoVe:

    in access avrei la necessità di conservare il valore di una variabile dalla routine evento click (su un commandbutton) alla routine beforeupdate della form stessa.

    ho provato a dichiarare la variabile in questione all'inizio del modulo della form, e in effetti in entrambe le routine questa variabile è valorizzata. il problema è che nella prima routine cambio il valore, ma quando esco dalla routine mi perde il nuovo valore! se può essere utile posto il codice
    se la variabile l'hai dichiarata nella "sezione" (generale) del form questo comportamento e' abbastanza strano.

    potrebbe essere che nella routine dove ti perde il valore in uscita tu stia usando una variabile locale con lo stesso nome. VBA a volte nn rileva questa "anomalia" e fa' partire il soft ugualmente (dovrebbe dipendere dal fatto che nn c'e' una vera e propria compilazione del sorgente)
    ...and I miss you...like the deserts miss the rain...

  3. #3
    sì è nella sezione generale!

    posto il codice, magari c'è altro che non va (intanto grazie per la celere risposta)


    **********************************************
    Option Compare Database

    Public
    FlagEvento As String
    ------------------------------------
    Private Sub Comando21_Click()
    If FlagEvento <> "Già chiesto" Then
    comp.Requery
    comp = comp.ItemData(0)

    comp2.Requery
    comp2 = comp2.ItemData(0)

    FlagEvento = Salva("aggiunto", "contatto", IdRec, comp, comp2)
    End If

    DoCmd.Close
    End Sub
    ------------------------------------
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If FlagEvento <> "Già chiesto" Then <----
    comp.Requery
    comp = comp.ItemData(0)

    comp2.Requery
    comp2 = comp2.ItemData(0)

    FlagEvento = SalvaSiNo("aggiunto", "contatto", IdRec, comp, comp2)
    End If
    End Sub
    **********************************************

    in pratica arrivo alla valutazione evidenziata in rosso e FlagEvento è una stringa vuota come se la prima routine non fosse mai stata eseguita (poichè nella prima routine la variabile FlagEvento assume proprio il valore di confronto, son sicuro perchè faccio step by step con F8)
    Abeti nel deserto? Nemmeno l'ombra (A. Bergonzoni)
    _________________________________
    www.like-a-loft.com

  4. #4
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Originariamente inviato da nicolamanzoni
    sì è nella sezione generale!

    posto il codice, magari c'è altro che non va (intanto grazie per la celere risposta)

    Option Compare Database

    Public FlagEvento As String

    Private Sub Comando21_Click()
    If FlagEvento <> "Già chiesto" Then
    comp.Requery
    comp = comp.ItemData(0)

    comp2.Requery
    comp2 = comp2.ItemData(0)

    FlagEvento = Salva("aggiunto", "contatto", IdRec, comp, comp2)
    End If

    DoCmd.Close
    End Sub

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If FlagEvento <> "Già chiesto" Then
    comp.Requery
    comp = comp.ItemData(0)

    comp2.Requery
    comp2 = comp2.ItemData(0)

    FlagEvento = SalvaSiNo("aggiunto", "contatto", IdRec, comp, comp2)
    End If
    End Sub
    vista cosi', e' probabile che l'errore sia nel valore di uscita dalla funzione Salva(...) (magari anziche' "Già chiesto" ritorna "già chiesto" tutto minuscolo)

    se nn ha altri valori di ritorno, forse conviene che la funzione restituisca un boolean vero o falso a seconda che sia andata a buon fine l'operazione e poi testare lo stato di FlagEvento se TRUE o FALSE (ovvio che la dichiarazione deve diventare as boolean)..+/- cosi'

    codice:
    Option Compare Database
    
    Public FlagEvento As Boolean
    
    Private Sub Comando21_Click()
    If not FlagEvento  Then
    comp.Requery
    comp = comp.ItemData(0)
    
    comp2.Requery
    comp2 = comp2.ItemData(0)
    
    FlagEvento = Salva("aggiunto", "contatto", IdRec, comp, comp2)
    End If
    
    DoCmd.Close
    End Sub
    
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If not FlagEvento  Then
    comp.Requery
    comp = comp.ItemData(0)
    
    comp2.Requery
    comp2 = comp2.ItemData(0)
    
    FlagEvento = SalvaSiNo("aggiunto", "contatto", IdRec, comp, comp2)
    End If
    End Sub
    il tutto supponendo che le funzioni Salva() e SalvaSiNo() restituiscano TRUE se e' gia' stato salvato.
    ...and I miss you...like the deserts miss the rain...

  5. #5
    mi hai preceduto di poco, intanto ho modificato il post che hai quotato, vedi se ti è d'aiuto a capire, grazie 1000
    Abeti nel deserto? Nemmeno l'ombra (A. Bergonzoni)
    _________________________________
    www.like-a-loft.com

  6. #6
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Originariamente inviato da nicolamanzoni
    mi hai preceduto di poco, intanto ho modificato il post che hai quotato, vedi se ti è d'aiuto a capire, grazie 1000
    ok.

    prima prova:
    metti un break point su entrabi gli IF nelle 2 routine (e vedi dove si ferma prima...Access ha una gestione degli eventi per cosi' dire creativa )

    seconda prova:
    anziche dichararla Public dichiarala semplicemente con DIM o con Private

    terza prova:
    cerca in tutti i moduli,maschere,form ecc. la var FlagEvento verificando il suo ambito di visibilita'. Se e' presente in qualche altro modulo, se e' possibile, cambiale il nome nella meschera che ha il codice che hai postato.


    al momento non mi viene in mente altro.
    ...and I miss you...like the deserts miss the rain...

  7. #7
    Originariamente inviato da vonkranz
    ok.

    prima prova:
    metti un break point su entrabi gli IF nelle 2 routine (e vedi dove si ferma prima...Access ha una gestione degli eventi per cosi' dire creativa )

    seconda prova:
    anziche dichararla Public dichiarala semplicemente con DIM o con Private

    terza prova:
    cerca in tutti i moduli,maschere,form ecc. la var FlagEvento verificando il suo ambito di visibilita'. Se e' presente in qualche altro modulo, se e' possibile, cambiale il nome nella meschera che ha il codice che hai postato.


    al momento non mi viene in mente altro.
    ok allora
    prima prova: access valutava prima la prima routine, giustamente, dal momento che viene attivata dall'evento 'su click'. poi il 'docmd.close' obbliga a seguire la seconda routine

    seconda prova: ho provato a dichiararla con dim e il comportamento era uguale, idem per private

    terza prova: la var FlagEvento compare solo nel codice che ho postato

    conclusione: adesso la cosa funziona dichiarando la var con private e avendo eliminato i break point /senza eliminarli, come detto, non avevo risolto proprio niente)

    grazie dell'aiuto, a buon rendere


    edit: ne approfitto per chiederti se è possibile, dato il nome di un controllo sulla form, capire via codice di che tipo di controllo si tratta, per potergli applicare i metodi corretti
    Abeti nel deserto? Nemmeno l'ombra (A. Bergonzoni)
    _________________________________
    www.like-a-loft.com

  8. #8
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Originariamente inviato da nicolamanzoni
    ok allora
    prima prova: access valutava prima la prima routine, giustamente, dal momento che viene attivata dall'evento 'su click'. poi il 'docmd.close' obbliga a seguire la seconda routine

    seconda prova: ho provato a dichiararla con dim e il comportamento era uguale, idem per private

    terza prova: la var FlagEvento compare solo nel codice che ho postato

    conclusione: adesso la cosa funziona dichiarando la var con private e avendo eliminato i break point /senza eliminarli, come detto, non avevo risolto proprio niente)

    grazie dell'aiuto, a buon rendere


    edit: ne approfitto per chiederti se è possibile, dato il nome di un controllo sulla form, capire via codice di che tipo di controllo si tratta, per potergli applicare i metodi corretti
    ecco la gestione creativa di Access a cui mi riferivo.
    Cmq l'importante e' risolvere. ;-)

    mi pare che nn esista una funzione che ritorni il tipo di oggetto (ma nn ne sono sicurissimissimo).

    la soluzione piu' facile e' quella di intercettare l'errore e bypassarlo in caso di utilizzo di metodo nn valido per l'oggetto (generico immagino) in questione.
    ...and I miss you...like the deserts miss the rain...

  9. #9
    la soluzione piu' facile e' quella di intercettare l'errore e bypassarlo in caso di utilizzo di metodo nn valido per l'oggetto (generico immagino) in questione.
    io sono completamente a digiuno di errori e intercettazione (che c'entra ancora moggi? ) vedi tu se hai tempo per spiegarmi ben volentieri

    o altrimenti arriva qualche altro utente che ha l'illuminazione chissà
    Abeti nel deserto? Nemmeno l'ombra (A. Bergonzoni)
    _________________________________
    www.like-a-loft.com

  10. #10
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Originariamente inviato da nicolamanzoni
    io sono completamente a digiuno di errori e intercettazione (che c'entra ancora moggi? ) vedi tu se hai tempo per spiegarmi ben volentieri

    o altrimenti arriva qualche altro utente che ha l'illuminazione chissà
    leggi l'help legato alla funzione On Error GOTO... e quello relativo all'oggetto Err

    poi vediamo se sono (siamo) in grado di rispondere ai tuoi dubbi.
    ...and I miss you...like the deserts miss the rain...

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.