Passare dato da maschera a maschera ed aggiornare

di il
14 risposte

Passare dato da maschera a maschera ed aggiornare

Salve a tutti. Premetto che devo ringraziare visto che ultimamente sono stato molto attivo ed ho imparato tanto tanto... ecco di seguito ultima mia esigenza, cosa da imparare.

Ho una maschera aperta. Da questa maschera tramite un clic scelgo un valore.
Una volta selezionato questo valore apro un'altra maschera... e porto il valore con me (che non è altro che il numero riga di una tabella) e fin qui sono riuscito a spostarlo. L'ho messo in una casella combinata, ma non sono sicuro sia stato "acquisito" dalla cella, vedo il valore. Detto questo, non riesco però a fare in modo che la nuova maschera (che non fa altro che visualizzare i dati di una determinata riga di una tabella) si aggiorni appunto coi dati.

Mi permetto ripetermi: per la precisione il campo che mi porto via, è inserito nella nuova maschera in una casella combinata che ha un evento dopo aggiornamento. Il problema è che passando il dato "secco" lo visualizzo nella casella ma non creo "evento di aggiornamento", quindi la maschera non si aggiorna.

Qualche suggerimento? Evento su apertura forse (provato ma non funziona, perché il dato riportato non è stato "acquisito" come detto, se eseguo un msgbox del dato è null invece di 3 per esempio)...

14 Risposte

  • Re: Passare dato da maschera a maschera ed aggiornare

    Hai mancato tutta una serie di informazioni che magari ora provo a dare per capire come hai fatto le cose.

    La MainForm, dopo la selezione fa aprire la ChildForm, passando il Parametro in che modo...?(OpenArgs...?)
    Il Valore come lo assegni alla ComboBox(CasellaCombinata)...?
    Fai una cosa simile...?
    
    Private Sub Form Load()
       If Len(Me.OpenArgs)>0 Then
           Me.NomeCombo=Me.OpenArgs
       End if
    End Sub
    La tua combobox, ha un Evento DopoAggiornamento usato che va a selezionare il Record specifico...?
    Allora se hai usato le Macro devi far eseguire la macro DopoAggiornamento, se non usi le Macro è meglio e basta richiamare la stessa Sub che la Combo chiama su AfterUpdate.

    Detto questo non capisco perchè fai questa cosa... bastava aprire la Form passando il Criterio tramite la WHERE CONDITION, e su load forzi il Valore della Combo al Valore letto dal Record attivo.
    In questo modo non serve nessun accrocchio ed è tutto più lineare.
  • Re: Passare dato da maschera a maschera ed aggiornare

    Grazie per la risposta iniziale, sebbene alcune cose non mi sono chiare perché per me nuove.
    La prima maschera (chimata Elenco) ha una casella con questo evento:

    Private Sub Testo611_Click()
    DoCmd.OpenForm "CalcoloPrezzo"
    Forms("SecondaMaschera")!CasellaCombinata593 = Me.Testo600
    End Sub

    e pertanto mi apre la maschera (seconda) con il valore in CasellaCombinata593 = Testo600 della prima maschera.
    La SecondaMaschera dovrebbe visualizzarmi i dati, cosa che non avviene.

    Non uso macro per aggiornare, come posso richiamare la stessa Sub??

    "Detto questo non capisco perchè fai questa cosa... bastava aprire la Form passando il Criterio tramite la WHERE CONDITION, e su load forzi il Valore della Combo al Valore letto dal Record attivo.
    In questo modo non serve nessun accrocchio ed è tutto più lineare." Qui non ci ho mai messo mano/provato.


    Spero di aver spiegato e dato indicazioni migliori, grazie per la pazienza.
  • Re: Passare dato da maschera a maschera ed aggiornare

    Però se su apertura seconda maschera faccio un msgbox della CasellaCombinata593 mi da valore Null e non quello in Testo600 come detto sopra.
    Come possibile che vedo il valore corretto a video ma il valore della casella non lo è?
    Vorrei capire
  • Re: Passare dato da maschera a maschera ed aggiornare

    Salve,
    innanzi tutto dovresti vedere di scrivere in una maniera più lineare ed usare gli strumenti del forum in maniera più adeguata
    TAGCODE e TAGQUOTE non si capisce cos'è codice e chi dice cosa.
    Detto questo dici:

    mobile75 ha scritto:


    ...La prima maschera (chimata Elenco) ha una casella con questo evento:
    Private Sub Testo611_Click()
    DoCmd.OpenForm "CalcoloPrezzo"
    Forms("SecondaMaschera")!CasellaCombinata593 = Me.Testo600
    End Sub
    e pertanto mi apre la maschera (seconda) con il valore in CasellaCombinata593 = Testo600 della prima maschera.
    Mi sembra di capire che:
    Da una Form elenco apri una maschera di "Dettaglio", quindi in visualizzazione record singolo...è cosi?

    Se da un elenco estrapoli 1 record cosa ci fà una casellaCombinata in una maschera di dettaglio?


    La SecondaMaschera dovrebbe visualizzarmi i dati, cosa che non avviene.
    Non uso macro per aggiornare, come posso richiamare la stessa Sub??

    "Detto questo non capisco perchè fai questa cosa... bastava aprire la Form passando il Criterio tramite la WHERE CONDITION, e su load forzi il Valore della Combo al Valore letto dal Record attivo.
    In questo modo non serve nessun accrocchio ed è tutto più lineare." Qui non ci ho mai messo mano/provato.
    Ma questo chi lo dice?
  • Re: Passare dato da maschera a maschera ed aggiornare

    Ok, allora: corretto dire che da una form di elenco prendo un valore.
    Si, mio obiettivo è aprire il singolo record di mio interesse.
    La maschera dettaglio (che viene usata anche per altre operazioni, ma questo poco importa) ha una casella combinata di ricerca. A questo punto posso avere due soluzioni, che però non so come sviluppare:
    a) il valore che prendo dal form elenco lo vado ad inserire nella casella combinata e poi cerco (non so come) di aggiornare

    b) il valore che prendo dal form elenco lo uso per aprire direttamente la maschera dettaglio al punto che mi serve (anche qui però non so come)

    PS: non ho capito "Ma questo chi lo dice?" a cosa è riferito.
  • Re: Passare dato da maschera a maschera ed aggiornare

    Credo di esserci riuscito, forse macchinosamente:

    Nella prima maschera ho inserito sul clic:
    DoCmd.OpenForm "CalcoloPrezzo", acNormal, , , , , Me.Testo600
    Nella seconda maschera ho inserito, quindi utilizzato OpenArgs:
        Dim rs As Object
                    
        If IsNull(Forms!CalcoloPrezzo.OpenArgs) = True Then
            GoTo Salta
            Else
                Set rs = Me.Recordset.Clone
                rs.FindFirst "[ID] = " & Forms!CalcoloPrezzo.OpenArgs
                Me.CasellaCombinata593 = Forms!CalcoloPrezzo.OpenArgs
                If Not rs.EOF Then Me.Bookmark = rs.Bookmark
                GoTo Fine
        End If
    


    Magari non è correttissimo ma fa quello che avevo in mente... grazie, altra cosa imparata.
  • Re: Passare dato da maschera a maschera ed aggiornare

    I TAG >questo chi lo dice è riferito a quello che è inserito in tag ma lasciamo perdere:

    Il codice per aprire la maschera di dettaglio è questo vedi tu dove inserirlo:
    
    Private Sub Testo600_Click()
    Dim Criterio as string
    Criterio="id=" & id
    DoCmd.OpenForm "CalcoloPrezzo", acNormal, "", Criterio, , acNormal
    Ho ipotizzato su clik di Testo600 perchè lo hai citato tu ma lo puoi inserire in uno qualunque dei controlli presenti sul record.

    Per ora non creiamo altri problemi ma ti suggerisco che il campo id lo dovresti nominare con IdNOMETABELLA
    Saluti
  • Re: Passare dato da maschera a maschera ed aggiornare

    mobile75 ha scritto:


    Credo di esserci riuscito, forse macchinosamente:

    Nella prima maschera ho inserito sul clic:
    DoCmd.OpenForm "CalcoloPrezzo", acNormal, , , , , Me.Testo600
    Nella seconda maschera ho inserito, quindi utilizzato OpenArgs:
        Dim rs As Object
                    
        If IsNull(Forms!CalcoloPrezzo.OpenArgs) = True Then
            GoTo Salta
            Else
                Set rs = Me.Recordset.Clone
                rs.FindFirst "[ID] = " & Forms!CalcoloPrezzo.OpenArgs
                Me.CasellaCombinata593 = Forms!CalcoloPrezzo.OpenArgs
                If Not rs.EOF Then Me.Bookmark = rs.Bookmark
                GoTo Fine
        End If
    


    Magari non è correttissimo ma fa quello che avevo in mente... grazie, altra cosa imparata.
    Mah c'è una motivazione "TECNICA" per cui viene scomodato il recordset o recitiamo a soggetto?
  • Re: Passare dato da maschera a maschera ed aggiornare

    Ho letto poco perchè mi pare ci sia tanto di non chiaro frutto anche di una NON idonea gestione.

    Il primo GRANDE errore che commetti è di gestire una maschera da un'altra, questo è sbagliato perchè VINCOLI entrambe e non serve.
    La 2° Maschera che apri deve essere indipendente, devi sfruttare le opzioni native per passare parametri e scrivere poi il codice all'interno della maschera per soddisfare la richiesta.

    Secondo me non serve a nulla quello che fai anzi fa veramente solo della confusione, ho cercato di suggerirti come operare, ma addiruttura siamo arrivati a modificare il RS di maschera...

    Ti ripeto la mia visione.

    Cancella tutto quello che hai fatto e prova a semplificare.
    Mi pare di aver capito che il Valore ID lo recuperi dalla Textbox[Testo600] (suggerisco di usare Nomi intelligenti non cosi)
    Dalla Maschera1, su Click scrivi:
    
    DoCmd.OpenForm "CalcoloPrezzo", acNormal, "", "[ID]=" & Me.Testo600 , , acDialog  '<<--- Attenzione a questo [acDialog]
    
    Questa chiamata FILTRA la Maschera2 con il Valore selezionato in Maschera1, e non serve NULL'ALTRO se non sincronizzare la ComboBox... che ovviamente su apertura non è sincronizzata.

    Quindi su LOAD della Maschera2:
    
    Private Sub Form_Load()
        Me!NomeTuaCombo=Me!Id
    End Sub
    PROVA QUESTO CHE TI AVEVO ANCHE GIA' SUGGERITO, il fatto di non capire non è che sia una scusa per fare cavolate...!!

    Veniamo all'uso di [acDialog], questo parametro serve sempre quando si aprono Maschere definibili di Dettaglio su Selezione, ed è il tuo caso... questo perchè se nella Maschera2 tu apportassi modifiche, dovresti, alla chiusura aggiornare la Maschera1 che invece ha ancora visualizzato i dati chiamiamoli VECCHI.

    Quindi questo particolare metodo di apertura, definibile MODALE, rende la Maschera2 SINCRONA al codice della maschera1
    e ti consente di aggiornare alla chiusura.
    Ora non so se devi prendere in considerazione anche questa evenienza, nel caso lo dici e vediamo come si gestisce, ma prima dedicati a non fare cose assurde la dove serve essere semplici.
  • Re: Passare dato da maschera a maschera ed aggiornare

    "Mah c'è una motivazione "TECNICA" per cui viene scomodato il recordset o recitiamo a soggetto? "

    mi puoi spiegare? cosi cerco di capire meglio, ammetto che il codice l'ho copiato ed incollato da un mio vecchio prg, funziona e quindi non ho applicato modifiche... però preferisco capire ed imparare, grazie.

    Gianni55 ha scritto:


    mobile75 ha scritto:


    Credo di esserci riuscito, forse macchinosamente:

    Nella prima maschera ho inserito sul clic:
    DoCmd.OpenForm "CalcoloPrezzo", acNormal, , , , , Me.Testo600
    Nella seconda maschera ho inserito, quindi utilizzato OpenArgs:
        Dim rs As Object
                    
        If IsNull(Forms!CalcoloPrezzo.OpenArgs) = True Then
            GoTo Salta
            Else
                Set rs = Me.Recordset.Clone
                rs.FindFirst "[ID] = " & Forms!CalcoloPrezzo.OpenArgs
                Me.CasellaCombinata593 = Forms!CalcoloPrezzo.OpenArgs
                If Not rs.EOF Then Me.Bookmark = rs.Bookmark
                GoTo Fine
        End If
    


    Magari non è correttissimo ma fa quello che avevo in mente... grazie, altra cosa imparata.
    Mah c'è una motivazione "TECNICA" per cui viene scomodato il recordset o recitiamo a soggetto?
  • Re: Passare dato da maschera a maschera ed aggiornare

    mobile75 ha scritto:


    "Mah c'è una motivazione "TECNICA" per cui viene scomodato il recordset o recitiamo a soggetto? "

    mi puoi spiegare? cosi cerco di capire meglio, ammetto che il codice l'ho copiato ed incollato da un mio vecchio prg, funziona e quindi non ho applicato modifiche... però preferisco capire ed imparare, grazie.
    Ti sta dicendo le stesse cose che ti ho detto io, ovvero che il metodo che usi è sbagliato nello specifico pur funzionando, e le motivazioni sono quelle che ti ho dato, è un NON SENSE CODE, evidentemente copiato ma magari dove era pubblicato lo scenario lo richiedeva... nel tuo caso proprio NO.
    Anche il suggerimento della soluzione è simile, la linea è la medesima, quindi hai tutto per capire, se poi appliacrlo decidi tu.
  • Re: Passare dato da maschera a maschera ed aggiornare

    @Alex scusami, mi è scappata la tua risposta sopra, avevo browser aperto da qualche giorno su quella pagina non aggiornata, leggo subito.
  • Re: Passare dato da maschera a maschera ed aggiornare

    @Alex, prova fatta.

    La maschera due si apre ma purtroppo non al record ID che seleziono dal tasto, resta vuota.
    Quindi ho sicuramente errori.
    Non so come procedere, la soluzione vecchia sebbene non ottimale, sembra funzionare.
    Mi aiuti con la strada da te suggerita a correggere le mie mancanze + errori e lacune? Grazie.

    @Alex ha scritto:


    Ho letto poco perchè mi pare ci sia tanto di non chiaro frutto anche di una NON idonea gestione.

    Il primo GRANDE errore che commetti è di gestire una maschera da un'altra, questo è sbagliato perchè VINCOLI entrambe e non serve.
    La 2° Maschera che apri deve essere indipendente, devi sfruttare le opzioni native per passare parametri e scrivere poi il codice all'interno della maschera per soddisfare la richiesta.

    Secondo me non serve a nulla quello che fai anzi fa veramente solo della confusione, ho cercato di suggerirti come operare, ma addiruttura siamo arrivati a modificare il RS di maschera...

    Ti ripeto la mia visione.

    Cancella tutto quello che hai fatto e prova a semplificare.
    Mi pare di aver capito che il Valore ID lo recuperi dalla Textbox[Testo600] (suggerisco di usare Nomi intelligenti non cosi)
    Dalla Maschera1, su Click scrivi:
    
    DoCmd.OpenForm "CalcoloPrezzo", acNormal, "", "[ID]=" & Me.Testo600 , , acDialog  '<<--- Attenzione a questo [acDialog]
    
    Questa chiamata FILTRA la Maschera2 con il Valore selezionato in Maschera1, e non serve NULL'ALTRO se non sincronizzare la ComboBox... che ovviamente su apertura non è sincronizzata.

    Quindi su LOAD della Maschera2:
    
    Private Sub Form_Load()
        Me!NomeTuaCombo=Me!Id
    End Sub
    PROVA QUESTO CHE TI AVEVO ANCHE GIA' SUGGERITO, il fatto di non capire non è che sia una scusa per fare cavolate...!!

    Veniamo all'uso di [acDialog], questo parametro serve sempre quando si aprono Maschere definibili di Dettaglio su Selezione, ed è il tuo caso... questo perchè se nella Maschera2 tu apportassi modifiche, dovresti, alla chiusura aggiornare la Maschera1 che invece ha ancora visualizzato i dati chiamiamoli VECCHI.

    Quindi questo particolare metodo di apertura, definibile MODALE, rende la Maschera2 SINCRONA al codice della maschera1
    e ti consente di aggiornare alla chiusura.
    Ora non so se devi prendere in considerazione anche questa evenienza, nel caso lo dici e vediamo come si gestisce, ma prima dedicati a non fare cose assurde la dove serve essere semplici.
  • Re: Passare dato da maschera a maschera ed aggiornare

    Credo di averti fornito tutti gli elementi... la soluzione sarebbe prendere il tuo lavoro ed aggiustarlo... questo perchè parrebbe che i suggerimenti dati non vengano recepiti... ed io non so come altro guidarti se non farti il lavoro, cosa che non faccio per mia scelta.
Devi accedere o registrarti per scrivere nel forum
14 risposte