› Excel e gli applicativi Microsoft Office › Posizionare sotto maschera a nuovo record
-
AutoreArticoli
-
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 SubC'è qualcuno che può aiutarmi? Grazie anticipatamente a tutti.
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 SubVecchio 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.
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", acNewReco simile).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
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.

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 SubQuesto apre la sottomaschera e si posiziona in modalità Nuovo record, ma ti permette di scorrere all'indietro per visualizzare quelli già inseriti.
grazie grazie grazie Vecchio Frac, quest'ultimo post è quello che mi serviva. Grazie ancora.
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 Subsi 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
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 SubMentre 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 SubQuesto è in soldoni, perchè bisognerebbe avere in mano il progetto per andare sul sicuro.
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.
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.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 🙂
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. -
AutoreArticoli
