Richiamare da maschera evento click di un tasto su sottomaschera

di il
19 risposte

Richiamare da maschera evento click di un tasto su sottomaschera

Vorrei richiamare da maschera principale l'evento click di un tasto presente nella sottomaschera

In pratica cliccando sul tasto stampaC presente nella maschera principale dovrebbe eseguire evento click come se stessi cliccando sul tasto Stampa presente nella sottomaschera

Tasto maschera: cmdStampaC

Tasto sottomaschera: cmdStampa

Nome sottomaschera: sottomInsCres1

 

Public Sub cmdstampa_Click()    'tasto in sottomaschera
End Sub
Private Sub cmdstampaC1_Click()   'tasto in maschera
Me!sottomInsCres1.SetFocus         
Me!sottomInsCres1.Form.cmdStampa.SetFocus
Me!sottomInsCres1.Form.cmdstampa_Click 
End Sub

Error di run-time 2465

Errore definito dall'applicazione o dall'oggetto

In giallo

Me!sottomInsCres1.Form.cmdstampa_Click 

Suggerimenti?

19 Risposte

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Per me:
    1. La riga in giallo non ha senso
    2. Nella Public Sub non hai scritto nulla
    3. Riscrivi gli stessi comandi in entrambi gli eventi Click
    4. Se il punto 3. non ti piace e vuoi proprio sfruttare la Public Sub, devi scrivere le istruzioni dentro la Public Sub, però non puoi usare Me, invece devi dichiarare esplicitamente Forms!NomeMascheraPrincipale. Quindi entrambi i click dei 2 pulsanti devono chiamare (Call) la tua Public Sub, alla quale devi dare un nome personalizzato (non _Click)

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Grazie Osvaldo, quanto da te suggerito; il punto 3 lo avevo affrontato ma era funzionante in parte perché maschera e sottomaschera hanno origini record differenti con problemi su alcuni campi che non vengono trovati.

    Lo stesso si verificherebbe seguendo il punto 4

    Avevo provato a cambiare RecordSource ma senza successo

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Potresti raccontare dettagliatamente cosa intendi stampare (nomi propri di oggetti e campi)? Perché hai due pulsanti separati?

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Premetto che è un archivio parrocchiale  e che quello che voglio fare non è essenziale. In sostanza col pulsante posto in maschera non devono essere stampati i record con determinati campi vuoti.

    Ho una maschera dove sono riportati i dati anagrafici dei fedeli con 4 sottomaschera con i dettagli dei vari sacramenti. La maschera principale (ArchivioGenerale) ha come origine record una query  “Fedeli – estesi” , mentre la sottomaschera sottomInsCres1(una delle 4) ha come origine record “Cresime_Query1”. 

    Le 2 query hanno molti campi in comune ma non Idcresime presente in “Cresime_Query1”.

    Da sottomaschera stampo tranquillamente ma vorrei stampare da pulsante posto in maschera. 

    Da pulsante su maschera riesco a stampare i vari sacramenti ma con un ma.. nel senso che mi stampa anche i record quando i campi dei sacramenti sono vuoti ed è quello che non voglio.

    Nella sottomaschera la stampa è così impostata e funziona bene

    Private Sub cmdStampa_Click()
    Dim IsValid As Boolean
    Dim Stampa   
         IsValid = True
         If (IsNull(Me.IdCresime)) Then
         MsgBox " Nessuna Cresima da Stampare"    
         IsValid = False
         Exit Sub
         End If
         Stampa = MsgBox("Anteprima di stampa (Si) Stampa (No) ", vbApplicationModal + vbQuestion + vbYesNoCancel)
        If Stampa = vbYes Then
        DoCmd.OpenReport "CertificatoCresima", acViewPreview, , "ID = " & Me.Id
         End If    
    End Sub

    Col pulsante nella maschera ,che utilizza un’altra sorgente record non avente il campo IdCresime, vengono stampati tutti i record; 

    non riesco a bloccare la stampa coi campi vuoti .

    Mi rendo conto che Il problema, che non riesco a risolvere, è determinare il giusto setfocus; usato senza successo

    Me!sottomInsCres1.SetFocus
    [Maschere]![ArchivioGenerale]![sottomInsCres1].SetFocus

    Mi dice sempre che non trova IdCresime

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Forse ho risolto in modo molto ma molto grossolana in attesa di una soluziome più raffinata, creando nella maschera una  casella(nascosta) con origine controllo    

    =[Maschere]![ArchivioGenerale]![sottomInsCres1]![IdCresime]
  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Forse vado fuori tema, ma 

    29/12/2024 - clamasa ha scritto:

    Ho una maschera dove sono riportati i dati anagrafici dei fedeli

    OK.

    29/12/2024 - clamasa ha scritto:

    con 4 sottomaschera con i dettagli dei vari sacramenti.

    Perché gestisci sta cosa così?

    29/12/2024 - clamasa ha scritto:

    La maschera principale (ArchivioGenerale) ha come origine record una query  “Fedeli – estesi”

    Nessuno vieta di gestire l'input dati su una query...ma, io ci trovo qualcosa di farraginoso/sbagliato/inutile.

    29/12/2024 - clamasa ha scritto:

    mentre la sottomaschera sottomInsCres1(una delle 4) ha come origine record “Cresime_Query1”

    Aiuto. Non capisco.

    Hai fatto bene a spiegare di cosa parla il tuo database, che concettualmente non dovrebbe essere complesso. 
    Puoi chiarire cosa ti serve stampare?

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Confermo con consapevolezza quanto affermato sulla farraginosità 

    Sinteticamente ; da sottomaschera, stampa solo i record aventi i campi dei sacramenti pieni e non stampa quelli che hanno campi dei sacramenti vuoti . (E' questo va bene)

    Invece dal Pulsante stampa, presente sulla maschera ,mi stampa indistintamente tutti i record anche quelli i cui campi dei sacramenti sono vuoti. 

    Es. Fedele non cresimato ha il campo IdCresime vuoto, viene stampato ugualmente (è quello che non voglio)

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    29/12/2024 - clamasa ha scritto:

    Confermo con consapevolezza quanto affermato sulla farraginosità 

    IdCresima? Vuol dire che hai campi nominati IdCresima, IdBattesimo, IdComunione...altri (perdona...non li conosco tutti)? Se sì, ciò è errato progettualmente.
    Prima di dare le "mie" sentenze, potresti:
    - elencare i nomi propri di tutte le tue tabelle
    - per ogni tabella, elencare i nomi propri di tutti i campi, indicando le chiavi primarie e esterne
    - le relazioni
    In alternativa potresti allegare una immagine della tua Finestra Relazioni.

    Scusa se ti faccio queste domande. Qualcosa mi dice che hai una struttura farraginosa/errata e tutto quello che vorresti realizzare si potrebbe semplificare notevolmente.

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Forse posti un file di esempio risulterà più facile capire e quindi aiutarti.

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    29/12/2024 - OsvaldoLaviosa ha scritto:

    elencare i nomi propri di tutte le tue tabelle 

    per ogni tabella, elencare i nomi propri di tutti i campi, indicando le chiavi primarie e esterne

    Tabelle      chiave primaria         chiavi esterne

    Fedeli               Id                    

    Battesimi        IdBattesimi     IdFedeli

    Cresime           IdCresime     IdFedeli

    Matrimoni         IdMatr          IdFedeli   IdConiuge  Idm  Idf

    Decessi            IdDecessi     IdFedeli

    29/12/2024 - OsvaldoLaviosa ha scritto:

    - per ogni tabella, elencare i nomi propri di tutti i campi, 

    le relazioni

    Mi rifiuta inserimento immagine

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Tranquillo. È chiaro comunque il problema di fondo.

    Hai una struttura tabelle NON NORMALIZZATA, cioè:
    1) La tabella Fedeli immagino contiene dati anagrafici di Mario Rossi, Paola Pitagora, Francesco Totti...Innanzitutto chiama il campo IDFedele esplicitamente. A seguire tutti gli altri campi, che immagino non hai scritto per brevità: OK.
    2) Ti faccio notare che le tabelle Battesimi, Cresime, Decessi hanno campi simili. E Matrimoni? Beh, pure, anche se ha un campo in più.
    3) Ti suggerisco la seguente struttura tabelle:

    Fedeli
    IDFedele (PK)
    Nome
    Cognome
    DataNascita
    Indirizzo
    ...altri campi tipicamente anagrafici...

    Sacramenti
    Sacramento (PK) (questa tabella avrà solo 4 valori testuali: Battesimo, Cresima, Matrimonio, Decesso)

    StoriciFedeli
    IDSF (PK)
    DataSacramento
    Sacramento
    IDFedele (FK)

    Relazioni:
    Fedeli.IDFedele uno-a-molti StoriciFedeli.IDFedele
    Sacramenti.Sacramento uno-a-molti StoriciFedeli.Sacramento

    Fin qui spero ci capiamo almeno per Battesimi, Cresime, Decessi. Per includere anche Matrimoni, aggiungi nella tabella StoriciFedeli un campo IDConiuge, quindi crei una seconda relazione Fedeli.IDFedele uno-a-molti StoriciFedeli.IDConiuge. Non ti spaventare se nella Finestra Relazioni, Access ti mostrerà una tabella in più che tu non hai mai creato (cioè Fedeli_1). Accade che nei primi 3 casi il campo IDConiuge resterà vuoto, mentre quando in StoriciFedeli.Sacramento avrai scelto Matrimonio, digiterai IDConiuge.
    A seguito di tutte queste nuove considerazioni, ti renderai conto tu stessa che la struttura si è semplificata, le maschere pure, le stampe (con opportuni filtri) idem.

    Lascio a te il ripensamento generale di quello che avevi in testa di ottenere.

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Mi sa che mi sono espresso male

    Facendo riferimento ad es a Cresime se il fedele non è stato cresimato nella tabella cresime non sarà presente nessun IdCresime (associato a IdFedele)  .

    A mio avviso il punto chiave è

    If (IsNull(Me.IdCresime)) Then

    in quanto non riesce a trovare il fantomatico IdCresime

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    30/12/2024 - clamasa ha scritto:

    Facendo riferimento ad es a Cresime se il fedele non è stato cresimato nella tabella cresime non sarà presente nessun IdCresime (associato a IdFedele)  .

    In base alla nuova struttura tabelle che ti ho proposto, per sapere i NON CRESIMATI, ti basta:
    1. Imposta una query dove importi la tabella StoriciFedeli e filtri in base a "Cresima". Questa query la chiami Cresimati.
    2. Imposta una "query dati non corrispondenti" (esiste la procedura guidata per crearla) tra Fedeli e Cresimati. Otterrai la lista dei Fedeli non cresimati.

  • Re: Richiamare da maschera evento click di un tasto su sottomaschera

    Ripensando un'altra possibile struttura tabelle. Se davvero il "cammino" di ogni Fedele comporta i soli step Nascita, Battesimo, Cresima, Matrimonio, Morte...se il database non ha grandi pretese progettuali, io penserei anche a una sola tabella Fedeli con i campi:
    IDFedele (PK)
    Nome
    Cognome
    DataNascita
    DataBattesimo
    DataCresima
    DataMatrimonio
    Coniuge (anche solo testuale può andar bene)
    DataMorte
    ...altri eventuali campi anagrafici...

    Con questo nuovo assetto campi diventa tutto ancora più facile.

Devi accedere o registrarti per scrivere nel forum
19 risposte