Valori duplicati in campo data

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Valori duplicati in campo data

    A mio avviso Ti conviene creare a livello di tabella un indice multicampo univoco come suggerito gia' tre volte: e' nativo di Access, fa quello che chiedi e non devi scrivere una riga di codice a meno che Tu non voglia dare un messaggio di errore specifico, nel qual caso il link di sihsandrea

     e' esaustivo.

    Poi vedi tu….

  • Re: Valori duplicati in campo data

    Ma il mio problema non è la formattazione delle date, Questa Sub fa il suo lavoro e la data la formatta correttamente:

    Private Sub DataAttivita_AfterUpdate()
    If DCount("data_attivita", "attivita", "DataAttivita" & " and ID=" & Me.Parent.ID) > 0 Then
       MsgBox "DATA GIÀ UTILIZZATA PER QUESTO UTENTE. USARE UN'ALTRA DATA!", vbCritical, "Duplicato!"
       
       Me.DataAttivita.SetFocus
    End If

    End Sub

    solo che bisognerebbe che i duplicati siano impediti a livello di IDUtente e non su tutta la lista degli utenti come è adesso con questa Sub. <DataAttivita> è un controllo di una sottomaschera che filtra da una combo uno specifico IDUtente, enella tabella non posso indicizzare il campo <data_attività> (duplicati non ammessi) perchè ci sono altri IDUtente che possono avere la stessa data. E' lo stesso utente che non può avere date uguali. Un bel problema…

  • Re: Valori duplicati in campo data

    Secondo me prima di capire come risolvere il problema in modo tecnico, bisogna capire come funziona il campo attività.

    E' un campo indicizzato a scelta obbligatoria da parte dell'utente, oppure è un campo ad inserimento libero?

    Perchè se è un campo ad inserimento libero non indicizzato, possiamo inventarci tutti i sistemi possibili immaginari, ma non si riuscirà mai a confrontarlo in modo esatto.

  • Re: Valori duplicati in campo data

    Ho risolto in questo modo:

    nella tabella tblAttivita ho inserito un campo calcolato “Duplicati” con l'espressione: 

    [ID] & "-" & [data_attivita]

    e sull'evento dopo aggiornamento del controllo data_attivita questo codice:

    Private Sub data_attivita_AfterUpdate()
    If Not IsNull(DLookup("Duplicati", "TblAttivita", "Duplicati = " & Chr$(34) & Me!Duplicati & Chr$(34))) Then

    MsgBox "Attenzione! Data già esistente per questo Utente, cambiare data!", vbCritical, "Data Duplicata!"

    Me.Undo
    Me.note.SetFocus
    Me.data_attivita.SetFocus

    End If
    End Sub

    e tutto funziona perfettamente. non si può usare la stessa data per lo stesso ID ma si può usare per un altro ID che non l'abbia già usata. Può sembrare strana la doppia istruzione SetFocus, ma era l'unico modo per fare ritornare il cursore sul campo data_attivita, altrimenti cancellava la data errata ma andava al campo successivo.

    Contento se può servire a qualcuno

    grazie a tutti. 

  • Re: Valori duplicati in campo data

    27/09/2024 - Lucky56 ha scritto:


    solo che bisognerebbe che i duplicati siano impediti a livello di IDUtente e non su tutta la lista degli utenti come è adesso con questa Sub. <DataAttivita> è un controllo di una sottomaschera che filtra da una combo uno specifico IDUtente, enella tabella non posso indicizzare il campo <data_attività> (duplicati non ammessi) perchè ci sono altri IDUtente che possono avere la stessa data. E' lo stesso utente che non può avere date uguali. Un bel problema

    Ma tu hai capito come funziona una chiave composta?

    Chiave semplice: campoA

    Valore 1 ok

    Valore 2 ok

    Valore 1 violazione di chiave! Impossibile inserire il valore…

    Chiave composta: campoA + campoB

    Valore 1 + pippo ok

    Valore 1 + pluto ok

    Valore 2 + pippo ok

    Valore 1 + pluto violazione di chiave la combinazione 1 + pluto esiste già 

    Ora immagina che campoA sia la data e campoB l'utente e ragionaci sopra…

    Occhio al tipo dtata tra 28/09/2024 e now… perché il tipo data si porta dietto ore, minuti e secondi.

    27/09/2024 10:30 è diverso da 27/09/2024 11:29

    Fai le tue considerazioni…

  • Re: Valori duplicati in campo data

    Difatti è quello che ho fatto. Se leggi il mio ultimo post lo capisci. E non ho problemi di formattazione di data. Ma anche questo l'avevo detto precedentemente. Grazie

  • Re: Valori duplicati in campo data

    Ciao, non so se ho compreso correttamente la domanda,

    ma mi pare di aver capito che tu hai dei dati duplicati in una tabella del database e non vuoi mostrare a schermo dei doppioni delle date

    se il problema è questo puoi fare una stored procedure in cui metti la tua query sql usando la clausola DISTINCT e degli ORDER BY sulle date

    e poi con il linguaggio che stai usando, mi sembra che è visual basic, quindi con l'oggetto ADO puoi accedere a tale stored procedure e recuperare i dati

    EDIT 13:37: ah no scusami, ho visto adesso che è una discussione su Microsoft Access, pensavo riguardasse SQL Server

  • Re: Valori duplicati in campo data

    28/09/2024 - sihsandrea ha scritto:


    non posso indicizzare il campo <data_attività> (duplicati non ammessi) perchè ci sono altri IDUtente che possono avere la stessa data. E

    Se crei un indice composto non avrai la necessità di inserire duplicati non ammessi…

    Se proprio non vuoi alterare il database basta eseguire una query come detto prima così:

    • Se controlli prima di inserire basta verificare che la sql sua vuota
    • Se controlli dopo l'inserimento basta controllare che abbia un solo record

    La codizione “unico e solo” va bene per campi che non possono avere duplicati come un codice fiscale

    Se lo metti su nome, data nascita ecc .. potresti non inserire un omonimo o un nato alla stessa data.

    Per questo prediligo, data l'esperienza, l'uso di sql. L'esecuzione impiega un battito di ciglia (ci stai di più a scrivere i dati che a verificarli) in più potresti anche decidere di forzare l'inserimento se necessario o estendere il controllo su n campi se la sql la prelevi da un file o da una tabella di servizio senza dover riaprire il sorgente.

Devi accedere o registrarti per scrivere nel forum
22 risposte