Criteria funzione DLookup

di il
5 risposte

Criteria funzione DLookup

Buonasera,

Non riesco ad inserire la sintassi che mi selezioni IdPrestazione dell'ultimo record della Tabella Prestazioni (rappresenta la chiave primaria che di aggiorna all'inserimento di ogni nuovo record tramite Recordset.Addnew, e poi Recordset.Update.
Tale dato lo devo poi assegnare alla casella di testo NON ASSOCIATA della maschera (Me.IdPrestazione) per avere certezza inserimento del nuovo record.
IdPrestazione = DLookup("IdPrestazione", "tblPrestazioni", ........)
Inizialmente avevo Me.IdPrestazione associato a tblPrestazioni.IdPrestazione e andava ovviamente bene.
Ora mi occorre NON ASSOCIATO in quanto posso richiamare un record della tblPrestazioni da una sottomaschera associata alla stessa tabella per modificarlo o eliminarlo.

5 Risposte

  • Re: Criteria funzione DLookup

    Non devi affatto usare Dlookup in quanto non affidabile soprattutto in caso di accesso multiutente... se utilizzino metodo Addnew poi usi sicuramente il metodo Update... e poi puoi recuperare il valore con LastModified.

    Qui trovi come:
    https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-lastmodified-property-dao

    La soluzione migliore sarebbe usare @@IDENTITY via SQL.
    Qui trovi come:
    https://stackoverflow.com/questions/29559408/using-identity-in-a-multi-user-environment
  • Re: Criteria funzione DLookup

    Risolto con SQL @@IDENTITY.
    Grazie mille.
    Ma perchè non funziona mettendo come Criteria di DLookp per esempio DLast? o tblPrestazioni.DLast?
    O mettendo dopo Update e Close
    DoCmd.DoToRecord,, acLast?
    In quest'ultimo caso mi fa vedere IdPrestazione = 1 (quella del primo record) e non quella dell'ultimo (che nel caso è 2648).
    Scusa per le ulteriori richieste e grazie ancora per la soluzione fornita che cmq funziona.
    Ciao
  • Re: Criteria funzione DLookup

    Nessuna delle funzioni che hai detto, chiamate funzioni di aggregazione sui domini, andrebbe usata per questo intento, detto ciò il dlookup restituisce il record specifico ma tu non sai quale Id ha, lo vuoi ricavare, quindi come può restituire qualche cosa di sensato...?
    È come dire "restituisci il record della tabella"... ma non dici quale è di record la tabella ne ha molti.
    Dlast invece chiede l'ultimo record della tabella...
  • Re: Criteria funzione DLookup

    Ok, prendo atto.
    Il dubbio derivava dal fatto che, quando avevo associato Me.IdPrestazione a tblPrestazioni.IdPrestazione dopo l'inserimento del nuovo record e dopo l'istruzione DoCmd.GoToRecord,, acLast mi visualizzava correttamente IdPrestazione dell'ultimo record.
    Così come fa ora con:
    Set idRS = Db.OpenRecordset("SELECT @@IDENTITY AS LastID;")
    IdPrestazione = idRS!LastID
    Me.IdPrestazione = IdPrestazione
    Db.Close
    Buon pomeriggio.
  • Re: Criteria funzione DLookup

    Cosa c'entra questa cosa con il Dlookup che agisce sulla tabella e non sulla maschera...
    A prescindere per comprendere la questione servirebbe aver modo di fare qualche test in casondi accesso concorrente in multiutenza, altrimenti è nella sostanza poco probabile comprenderne l'inaffidabilità.
Devi accedere o registrarti per scrivere nel forum
5 risposte