Excel e gli applicativi Microsoft Office Posizionare sotto maschera a nuovo record

Login Registrati
Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
  • Autore
    Articoli
  • #41278 Score: 0 | Risposta

    Arkimede
    Partecipante

      uona sera a tutti, Sono nuovo in questo forum, prima di tutto grazie allo staff per avermi accettato e spero grazie ai vostri aiuti di migliorare la mia conoscenza su access non lo mastico moltissimo, gran parte delle funzioni derivano da excel per lo stesso concetto ma non vado molto oltre. Vorrei chiedervi un aiuto, mi spiegofo una maschra principale con un pulsante visite e una casella di riepilogo chiamata "ElencoPazienti, ora se selezione il paziente nell'elenco e clicco sul pulsante visita, mi siapre la maschera visite con i dati paziente questa maschera contiene una sottomaschera che dovrebbe postarsi sul nuovo record invece mi fa visionare l'ultimo record inserito. Il codice del del pulsante visite è il seguente:

      Private Sub Comando15_Click()
      Dim strwhere As String, varitem As Variant
          If Me!ElencoPazienti.ItemsSelected.Count = 0 Then Exit Sub
          For Each varitem In Me!ElencoPazienti.ItemsSelected
          strwhere = strwhere & Me!ElencoPazienti.Column(0, varitem) & ","
          Next varitem
          strwhere = Left$(strwhere, Len(strwhere) - 1)
          DoCmd.OpenForm "Visite", acNormal, , "[IDPaziente]in (" & strwhere & ")", acEdit, acNormal
          Forms!Menu.Visible = False
      End Sub
      

      C'è qualcuno che può aiutarmi? Grazie anticipatamente a tutti.

      #41280 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Se la prima colonna di ElencoPazienti contiene come presumo l'ID paziente, e se questa è la chiave da cui dipende il filtro dei dati (leggi = se questa è la "colonna associata" per il recupero dei dati), quando selezioni un paziente dall'elenco la listbox restituisce il suo id, quindi lo passi alla condizione di apertura del form:

        Private Sub Comando15_Click()
            If Me!ElencoPazienti.ItemsSelected.Count = 0 Then Exit Sub    
            DoCmd.OpenForm "Visite", acNormal, , "[IDPaziente] = " & ElencoPazienti, acEdit, acNormal
            Forms!Menu.Visible = False
        End Sub
        #41282 Score: 0 | Risposta

        Arkimede
        Partecipante

          Vecchio Frac grazie per la tua tempestiva risposta ma non mi funziona , cioè mi apre la maschera con il nominativo richiesto  ma all'apertura della maschera si evince sempre l'ultimo record inserito. 

          #41285 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Arkimede ha scritto:

            se selezione il paziente nell'elenco e clicco sul pulsante visita, mi si apre la maschera visite con i dati paziente questa maschera contiene una sottomaschera che dovrebbe postarsi sul nuovo record

            Dunque quando selezioni un paziente si apre la sua scheda viste con l'elenco delle visite effettuate e vuoi posizionarti su un record nuovo.

            Qual è l'origine dati della maschera Visite? in questa maschera presumo che ci siano i dati generali del paziente; nella sottomaschera ci sarà l'elenco delle visite effettuate relative al paziente selezionato. E' collegata l'origine dati della sottomaschera con quella della maschera principale? sul medesimo campo chiave (che sarà idpaziente) ?

            La vista della sottomaschera è a maschere continue o no ?--> solo per sapere se visivamente vedrai una scheda vuota o l'elenco delle visite precedenti di quel paziente (perciò nell'evento Su caricamento della sottomaschera ci potrà stare qualcosa come un Docmd.GoToRecord acActiveDataObject, "table visite", acNewRec o simile).

             

            #41288 Score: 0 | Risposta

            Arkimede
            Partecipante

              Grazie ancora, Allora dal menù principale io selezione nella casella combinata il paziente di mio interesse, dopo clicco sul pulsante Visite e mi si apre una maschera dove vedo solo ed esclusivamente i dati del paziente (nome, Cognome, Data di Nascita ecc.) e sin qui tutto ok va benissimo così, sempre in questa maschera visite c'è una sotto maschera con tutti i dettagli della visita (data, Peso, Anamnesi ecc.) questa sotto maschera con il codice che ho inserito nel mio primo post mi fa vedere l'ultimo record (Visita ) registrato, ho la necessita che questo sotto maschera si predisponga nel nuovo record. (quando si apre la maschera la sua sotto maschera deve avere tutti i campi vuoti. Spero di esser stato un po più preciso

              #41289 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Allora dovrebbe essere sufficiente impostare la proprietà "Immissione dati" della sottomaschera su Sì.

                Nell'elenco degli oggetti, seleziona la form che rappresenta la sottomaschera, aprila in struttura, clicca sul pulsante del ribbon "finestra delle proprietà", scegli la tab Dati, imposta Immissione dati su Sì, salva e chiudi.

                #41290 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  Questo però forza al solo inserimento, non puoi scorrere per vedere i record precedenti. Per ottenere questo effetto consiglio di ricorrere al metodo cui accennavo prima (con un miglioramento cui ho pensato facendo le prove poco fa): nel modulo di codice della sottomaschera in questione scrivi il codice seguente, che intercetta l'evento "Su caricamento":

                  Private Sub Form_Load()
                      DoCmd.GoToRecord acActiveDataObject, , acNewRec
                  End Sub
                  

                  Questo apre la sottomaschera e si posiziona in modalità Nuovo record, ma ti permette di scorrere all'indietro per visualizzare quelli già inseriti.

                  #41292 Score: 0 | Risposta

                  Arkimede
                  Partecipante

                    grazie grazie grazie Vecchio Frac, quest'ultimo post è quello che mi serviva. Grazie ancora.       

                    #41293 Score: 0 | Risposta

                    Arkimede
                    Partecipante

                      ciao vecchio frac, allora andava tutto bene ( ho chiuso come risolto ma non lo è) ma ho ancora problemi. Il codice che mi hai postato tu va benissimo infatti sul load della maschera lui si posiziona in modalità inserimento nuovo record. Adesso il problema è il seguente:

                      nella maschera Anagrafica Paziente ho inserito una sotto maschera continua dove mi vengono visualizzate tutte le visite in archivio di quel paziente sino qui tutto ok, ho inserito un pulsante che si ripete per ogni record ( essendo una sotto maschera a maschera continua ) che al cliccare della visita di mio interesse mi apra la scheda Visite paziente a quella determinata visita. il pulsante funzione ma quando si apre la maschera Visite si posiziona sul nuovo record invece di farmi vedere la visita di mio interesse. la Mia domanda è:

                      questo codice che mi hai dato da

                      Private Sub Form_Load()
                          DoCmd.GoToRecord acActiveDataObject, , acNewRec
                      End Sub

                      si può inserire nel codice del mio primo messaggio in maniera tale che se mi serve questa maschera visite per altre cose non mi porti sul nuovo record?. Spero di essermi spiegato in maniera esaustiva. grazie

                      #41295 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Quindi: se selezioni un paziente dalla listbox, vuoi la scheda di inserimento Nuovo record, se invece selezioni una visita già fatta vuoi che il record corrente diventi quello relativo alla visita (mi apre anche logico   ). 

                        Penso che possiamo sfruttare il parametro OpenArgs che viene passato a una maschera quando viene aperta, e che possiamo riempire come vogliamo (si tratta di un "parametro di apertura", appunto).

                        All'apertura della maschera visite, se OpenArgs è vuoto vuol dire che abbiamo aperto la maschera dopo aver scelto un paziente (quindi modalità nuovo record) altrimenti ci mettiamo dentro l'ID della visita da visualizzare.

                        Il codice del pulsante (quello che si ripete per ogni record e che apre la scheda di una visita specifica) sarà una cosa simile a questo. Naturalmente [ID visita] può essere diverso (è il campo chiave associato al record della visita specifica). Dovrei vedere la struttura del db per essere più preciso.

                        Private Sub comandoXX_Click()
                            DoCmd.OpenForm "Visite", OpenArgs:=[ID visita]
                        End Sub

                        Mentre il codice dell'evento Load della maschera visite cambia leggermente perchè deve testare OpenArgs:

                        Private Sub Form_Load()
                            If Nz(OpenArgs, "") = "" Then
                                DoCmd.GoToRecord acActiveDataObject, , acNewRec
                            Else
                                DoCmd.GoToRecord acActiveDataObject, , acGoto, OpenArgs
                            End If
                        End Sub

                        Questo è in soldoni, perchè bisognerebbe avere in mano il progetto per andare sul sicuro. 

                        #41296 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          Arkimede ha scritto:

                          nel codice del mio primo messaggio

                          Quel codice è ridondante e in parte fuorviante.

                          La parte del For Each è inutile e il filtro (IDPaziente in <strwhere>) invece pure 🙂 perchè l'operatore IN (...) in quel caso restituisce tutti i record.

                          #41335 Score: 0 | Risposta

                          Arkimede
                          Partecipante

                            Vecchio frac, ho fatto un file identico ma con meno campi, meno maschere se non quelle interessate e senza dati sensibili, così vediamo, perchè son sicuro che sono io a non spiegarmi bene.

                            Allegati:
                            You must be logged in to view attached files.
                            #41339 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              Ok perfetto. Sempre favorevole a lavorare su qualcosa di reale 🙂
                              Ho aggiunto qualche riga alla tabella tblVisite tanto per avere dei dati su cui lavorare.

                              Dammi il tempo di ragionarci per non dirti cavolate e poi ci risentiamo 🙂

                               

                              #41340 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                Ho rimaneggiato un po'. Mi sembra che adesso si comporti tutto nel modo corretto. Riallego il file zippato.

                                Allegati:
                                You must be logged in to view attached files.
                              Login Registrati
                              Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
                              Rispondi a: Posizionare sotto maschera a nuovo record
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni: