Valori duplicati in campo data

di il
22 risposte

Valori duplicati in campo data

Ciao a tutti. ho una sottomaschera che registra ogni giorno le attività degli utenti. Ha un campo data che è la data dell'attività, Siccome succede che chi apre un nuovo record a volte mette una data già esistente, vorrei fare in modo che arrivi un messaggio di errore se la data dell'attività  per quell'utente è già presente. Dopo molte ricerche ho adattato questo codice che però da un errore:

Private Sub data_attivita_AfterUpdate()
If Not IsNull(DLookup("data_attivita", "tbl_attivita", "data_attivita = " & Chr$(34) & Me!data_attivita & Chr$(34))) Then
MsgBox Me!data_attivita & " Data già esistente!", vbOKOnly, "Data duplicata!"
Me.Undo
DoCmd.GoToRecord , , acNewRec
End If
End Sub

mi da Errore di Runtime 3464

dove sbaglio?

grazie

22 Risposte

  • Re: Valori duplicati in campo data

    Non si capisce cosa devi fare.

    hai una tabella con data, utente, memo e vuoi che se utente oggi si logga n volte vuoi inserire un solo record per quella data ed aggiungere le attività svolte dall'utente le altre n-1 volte?

  • Re: Valori duplicati in campo data

    No, non è l'utente che si logga. Ogni giorno un addetto compila su una sottomaschera un nuovo record che contiene varie attività svolte dall'utente in quella data. Il giorno dopo l'addetto dovrebbe compilare un altro record con le attività che l'utente svolge nella nuova data. Vorrei che sulla maschera il campo data contenga una data diversa da quelle che sono state già registrate per quell'utente, insomma, che l'addetto se inserisce una data (data_attivita) che è già stata usata precedentemente per quell'utente gli arrivi un messaggio di errore che lo avvisi che una data uguale è già stata usata per quell'utente e che per continuare deve cambiare data, visto che è una giornata diversa. Altrimenti mi ritrovo con utenti a cui sono state registrate delle attività di giornate diverse ma con la stessa data, il che non va bene. Grazie

  • Re: Valori duplicati in campo data

    Io ti direi select * from tabella where campodata=datadacontrollare and campooperatore=campooperatoredacontrollare

    Ma

    https://www.iprogrammatori.it/forum-programmazione/access/impedire-inserimento-dati-doppi-nel-db-t53959.html

    È già stato trattato… access ti semplifica la vita.

  • Re: Valori duplicati in campo data

    Non condivido il metodo, ma guarda bene la sintassi di dlookup.

  • Re: Valori duplicati in campo data

    In effetti l'editor VBA mi evidenzia in rosso proprio quella riga, ma mi sto sbattendo in rete da ore per capire dov'è l'errore.…

  • Re: Valori duplicati in campo data

    26/09/2024 - Lucky56 ha scritto:

    capire dov'è l'errore.…

    Errore 3464 = Tipo di dati non corrispondente a criteri

    Chr$(34) è il doppioapice. Lo uso per racchiudere il valore della data nella where condition di DLookup. Il criterio sui campi data deve essere racchiuso tra cancelletti #, 

    "data_attivita = #" & Me!data_attivita & "#"
    'oppure
    "data_attivita = " & Chr$(35) & Me!data_attivita & Chr$(35)

    ma attenzione al formato della data: se è GG/MM/AAAA il programma cercherà di convertirlo in MM/DD/YYYY. A volte andrà bene, a volte no, quindi non gli si deve dare la possibilità di commettere errori, passando già il valore giusto in formato MM/DD/YYYY.

  • Re: Valori duplicati in campo data

    Ma perche' scrivere codice inutile quando nativamente c'e' gia' la soluzione pronta (anzi ce ne sono due…)

    La prima e' inserire la condizione nelle regole di convalida dei dati della tabella: (IDutente + Data valore univoco), a cui puoi associare anche un messaggio in caso di errore.

    La seconda soluzione e' creare un indice univoco che combina i due valori ID utente e Data

    Re-edit: ora si vedono le immagini??

  • Re: Valori duplicati in campo data

    27/09/2024 - Mailman ha scritto:

    a cui puoi associare anche un messaggio in caso di errore.

    Non si vede niente.

    La seconda soluzione e' creare un indice univoco che combina i due valori ID utente e Data

    Come indicato nel thread segnatalo da sihsandrea.

  • Re: Valori duplicati in campo data

    Come già suggerito, Indice Multicampo Univoco. Leggi qui
    Creare e utilizzare un indice per migliorare le prestazioni - Supporto tecnico Microsoft
    Vai al paragrafo “Creare un indice multicampo”. Segui attentamente i punti 3.4.5. dove devi scegliere i campi Data e Utente. In corrispondenza del primo campo scelto (direi Data) devi impostare Univoco: Sì.

  • Re: Valori duplicati in campo data

    Grazie a tutti. ho preso la soluzione di Philcattivocarattere che era la più vicina ai miei tentativi e funziona perfettamente!

  • Re: Valori duplicati in campo data

    27/09/2024 - Philcattivocarattere ha scritto:


    26/09/2024 - Lucky56 ha scritto:

    capire dov'è l'errore.…

    Errore 3464 = Tipo di dati non corrispondente a criteri

    Chr$(34) è il doppioapice. Lo uso per racchiudere il valore della data nella where condition di DLookup. Il criterio sui campi data deve essere racchiuso tra cancelletti #, 

    "data_attivita = #" & Me!data_attivita & "#"
    'oppure
    "data_attivita = " & Chr$(35) & Me!data_attivita & Chr$(35)

    ma attenzione al formato della data: se è GG/MM/AAAA il programma cercherà di convertirlo in MM/DD/YYYY. A volte andrà bene, a volte no, quindi non gli si deve dare la possibilità di commettere errori, passando già il valore giusto in formato MM/DD/YYYY.

    Appunto quella sintassi è sostanzialmente errata… perchè la conversione in realtà lui la fa SEMPRE non solo a volte…, cosa fa si che a volte funzioni ed a volte no…?
    Il Mese/Giorno… se il GG>12 non può fare l'inversione, allora lascia GG/MM altrimenti inverte…

    01/02/2024 (1° Febbraio 2024 in IT, verrà converito in 2 Gennaio 2024)

    ma

    13/02/2024 non verrà convertito in nulla e rimarrà 13 Febbraio 2024

    Per ovviare si modifica la funzione con un Format:

    "data_attivita = #" & Format(Me!data_attivita,"mm/dd/yyyy") & "#"

    oppure:

    "data_attivita = " & clng(Me!data_attivita)      ' se non ci sono hh:mm:ss
    "data_attivita = " & str(cdbl(Me!data_attivita)) ' se il formato ha hh:mm:ss
  • Re: Valori duplicati in campo data

    27/09/2024 - Lucky56 ha scritto:


    Grazie a tutti. ho preso la soluzione di Philcattivocarattere che era la più vicina ai miei tentativi e funziona perfettamente!

    Sicuro…? Temo non sia cosi.

  • Re: Valori duplicati in campo data

    A voler essere pignoli, è vero che la soluzione di Philcattivocarattere funziona perfettamente ma forse non ho specificato che la routine dovrebbe filtrare i record per IDUtente. Con questa soluzione infatti, essendo un'agenda, se nella data di oggi voglio aggiornare le attività per più utenti, posso mettere la data di oggi solo al primo che compilo, per gli altri non lo posso più fare perchè la data di oggi l'ho già spesa e mi dà errore. Bisognerebbe che i duplicati siano impediti a livello di ID e non su tutta la lista degli utenti. Festeggiato troppo presto.

  • Re: Valori duplicati in campo data

    Credimi non funziona la gestione della data in quel modo, sopra ho dato la soluzione.

    Ovviamente fai come credi.

Devi accedere o registrarti per scrivere nel forum
22 risposte