Gestione evento newrecord in access

di
Anonimizzato10504
il
8 risposte

Gestione evento newrecord in access

Buon Giorno, premetto che sn nuovo del sito e di access. Ho una maschera Mask_tblPartNew in cui inserisco degli articoli. Ho un'altra maschera Mask_stringa in cui vi è un tasto che si chiama cmdAssegna. In pratica vorrei che ogni qualvolta si inserisca un nuovo record (da tasto freccia* o da tasto creato da me) nella prima maschera venga aperta la seconda mediante un filtro che lega i due campi ID delle 2 maschere ed attivi il tasto cmdAssegna (insomma simuli il mio click sul tasto). Come devo fare?
io nell'evento current della prima maschera ho inserito il seguente codice
If Me.NewRecord = -1 Then
MsgBox "è stato inserito un nuovo record"
Dim criterio1 As String
criterio1 = "[id]=" & Me![id]
DoCmd.OpenForm "Mask_stringa", , , criterio1
Form_Mask_stringa.IdIn8 = Me.id
Form_Mask_stringa.IdFin8 = Me.id
Form_Mask_stringa.cmdAssegna.Enabled = True
Form_Mask_stringa.cmdAssegna = True
End If
In pratica non entra mai nell'if poichè nn appare mai il msgbox.Inoltre non so come attivare l'evento click di cmdAssegna.
in cosa sbaglio? Grazie d tutto

8 Risposte

  • Re: Gestione evento newrecord in access

    Buona giornata, Francesco;
    sono un novellino anch’io e non so riesco a rispondere correttamente alla Tua richiesta, ci provo.
    Per legare l’apertura di una seconda maschera attribuendo la routine ad un evento, (credo che “Dopo aggiornamento” soddisfi le Tue esigenze), la routine che uso è la seguente:

    1. Nel “Form Mask_tblPartNew” inserisco la routine:

    Private Sub NomeForm_AfterUpdate() ‘Dove NomeForm è il “Nome elemento” del form
    On Error GoTo 10
    DoCmd.OpenForm "Mask_stringa"
    DoCmd.FindRecord [NomeForm], , True, , True
    End
    10:
    DoCmd.Close acForm, "Mask_stringa", acSavePrompt
    End Sub

    A questo punto si è aperta la maschera "Mask_stringa" e viene selezionato il Record che, nel campo [NomeForm], contenga il valore corrispondente a [NomeForm] della maschera “Mask_tblPartNew”. Questo nel caso il nuovo record sia già presente nella maschera "Mask_stringa". Mentre nel caso non esista, come mi pare di capire, avrei bisogno di sapere se [NomeForm] è l'unico campo da inserire o se c e ne sono altri.

    Cordiali saluti e buon lavoro.

    A disposizione.

    Giuseppe Guernieri
  • Re: Gestione evento newrecord in access

    Grazie x avermi risposto. Ho già provato a inserire il codice nei vari eventi, afterUpdate, beforeupdate ecc ma non cambia nulla. Il mio dilemma è capire come faccio a capire se si è inserito un nuovo record? e poi come faccio ad attivare l'evento click del mouse, nella maschera 1, di un tasto che invece è nella maschera 2? L'aprire o meno la seconda maschera ed applicare il filtro per mia fortuna sono istruzioni che bene o male so far funzionare. scusa se nn m sn spiegato bene ma ho iniziato da pochissimo a usare access e nn conosco nemmeno i nomi corretti.
  • Re: Gestione evento newrecord in access

    Scusa ora ho capito il problema ed il tuo aiuto mi è stato fondamentale. Non c'è bisogno di usare l'if se inserisco il codice nell'evento ufterupdate. Ora l'unico problema che mi resta e attivare (o simulare) il click del mouse.
  • Re: Gestione evento newrecord in access

    Scusa come non detto. Se non uso l'if la Mask_stringa si apre anche quando modifico un record e non solo quando ne creo uno nuovo
  • Re: Gestione evento newrecord in access

    Buon pomeriggio, Francesco;
    sicuramnete se vuoi solo inserire un nuovo record e, nel caso esista, non modificare quello esistente, non puoi usare l'evento "AfterUpdate" ma la routine va legata al
    "cmdAssegna_Click"

    Private Sub cmdAssegna_Click()
    On Error GoTo 10
    DoCmd.OpenForm "Mask_tblPartNew"
    DoCmd.GoToRecord , , acNewRec ' Predispone "Mask_tblPartNew" ad accettare un nuovo record.
    End
    10:
    End Sub
  • Re: Gestione evento newrecord in access

    Io però voglio che mentre sia aperta la prima maschera e solo se vi è un newrecord in questa maschera si attivino tutte le operazioni che ci sono in cmdAssegna (che sta nella seconda maschera), in teoria non ho nemmeno bisogno che la mask 2 sia attiva o visibile.
    Cmq credo di aver risolto. ho reso la funzione click di cmdAssegna public e non private.
    Mi scuso se può sembrare che abbia snobbato i consigli, ma è solo che li ho letto dopo aver risolto parte dei problemi. Sorry.
  • Re: Gestione evento newrecord in access

    La proprietà NewRecord è leggibile solo finchè non viene Salvato il NUOVO RECORD, pertanto leggibile fino a BeforeInsert(nel caso di NuovoRecord)... evento che peraltro espone il Parametro CANCEL che consente l'annullamento nel caso di non corrispondenza... che dovria gestire tu.

    Nel tuo caso poi si potrebbe usare la proprietà DIRTY e l'evento BeforeUpdate...

    Per recuperare l'ID del Nuovo Record tuttavia serve avere una visione più tecnica del lavoro.
    Se vuoi usare una maschera per l'inserimento la devi aprire in modalità [acDialog], in questo modo l'apertura diventa SINCRONA ed il codice della CHIAMANTE verrà sospeso finchè la form chiamata non si CHIUDE o non diventa VISIBLE=FALSE.

    Userai ovviamente la 2° rendendola NON VISIBILE, mettendo un Button nella maschera di inserimento che attiva la proprietà Me.Visible=False.
    A questo punto il codice riprende nella CHIAMANTE e da li potrai recuperare l'ID del NUOVO RECORD, quindi andrai a chiudere la Form di Inserimento.
  • Re: Gestione evento newrecord in access

    Vorrei innanzitutto scusarmi per il mostruoso ritardo nel fornire una risposta ai vostri aiuti, e ringraziarvi per il tempo dedicatomi. Per questioni lavorative ho dovuto sospendere il lavoro e iniziarne un altro, ma adesso sono ritornato ad access e tutti i vecchi problemi lasciati irrisolti.
    Vorrei chiedere ad alex se può essere molto più descrittivo, data la mia scarsa competenza in materia.Io clicco sul tasto preimpostato della maschera >* , mi appare la maschera con i campi vuoti, riempio tali campi e basta. Non so bene che azioni esegue access come e quando esegue BeforeInsert. Io vorrei che quando viene creato un nuovo recrd il campo "datacreazione" si autocompili (venga cioè scritto in automatico) con la funzione Date(), quando invece modifico un record preesistente (sempre attraverso una modifica su uno dei campi della maschera), si autocompili il campo "dataultimamodifica".
    Mi scuso ancora per le enormi lacune, ma ho iniziato ad usare access da poche settimane. grazie, ciao
Devi accedere o registrarti per scrivere nel forum
8 risposte