Evitare inserimento duplicati

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Evitare inserimento duplicati

    Lucfire ha scritto:


    ... il ragionamento iniziale è stato che siccome il dipendente presenta il foglio per il pagamento strutturato in un certo modo, l'inserimento in maschera delle prestazione doveva rispecchiare il più possibile il cartaceo.
    Invece come dici tu sarebbe stato necessario creare più record "Straordinari" per un unico documento contenente più periodi.
    Il mio approccio è sempre quello di mettermi dalla parte dell'utilizzatore finale, forse sbagliando ma trovo molte meno obiezioni o osservazioni.
    ...
    come dici tu si deve sempre guardare dal punto di vista dell'utilizzatore ma non vuol dire strutturare non adeguatamente la banca dati. La presentazione è una cosa, la struttura "dietro" è un'altra, sta allo sviluppatore poi
    Dal punto di vista tecnico avresti (sempre secondo me) creare una struttura come ti ho scritto nel post precedente e presentata come vuole il cliente
  • Re: Evitare inserimento duplicati

    Risolto
    funziona alla grande, addirittura controlla anche gli accavallamenti!!!!
    Grazie per l'aiuto preziosissimo.
  • Re: Evitare inserimento duplicati

    Lucfire ha scritto:


    Risolto
    funziona alla grande, addirittura controlla anche gli accavallamenti!!!!
    Grazie per l'aiuto preziosissimo.
    Ciao. Cosa hai utilizzato.
  • Re: Evitare inserimento duplicati

    muttley005 ha scritto:



    non sono d'accordo, io probabilmente avrei fatto un'unica tabella TBL_Straordinari così composta:
    ID_Straordinario (PK)
    ID_Personale (FK sulla TBL_Personale)
    Tipologia straordinario
    Sede (al momento dello straordinario)
    Qualifica (al momento dello straordinario)
    DataOraInizio
    DataOraFine

    pensaci, sono tutti dati appartenenti allo stesso concetto, poco importa se presentano un documento con varie voci per la stessa tipologia e qualifica.
    Tecnicamente a quel punto avresti potuto mettere come univoci i campi senza problemi

    .......
    EDIT: se non vuoi cambiare struttura puoi passare da una dlookup/dcount/dmax ... certo ... ma rimane che per me la struttura è sbagliata e te lo dimostrano queste complicazioni.
    Ciao.

    Sicuramente mi sfugge qualcosa, ma indipendentemente da dove si vanno a pescare i dati, da una o più tabelle, ma poi, il controllo se esistono già dati inseriti identici, come lo fai, se non usando un dcount o un dlookup?
  • Re: Evitare inserimento duplicati

    fratac ha scritto:



    Ciao. Cosa hai utilizzato.
    Ho creato una semplicissima query denominata "Controllo" con le due tabelle collegate "Straordinari" e "Dettagli_Straordinari" da cui ho estratto IDPersonale, DataOraInizio e DataOraFine.

    Poi sull'evento BeforeUpdate della sottomaschera "Dettaglio_Straordinari" ho inserito:

    Private Sub Form_BeforeUpdate(Cancel As Integer)

    If DCount("*", "Controllo", "[IDPersonale] =" & [Forms]![Straordinari]![IDPersonale] & _
    " AND [DataOraInizio] < #" & _
    Format(Me!DataOraFine, "mm/dd/yyyy hh:mm") & _
    "# AND [DataOraFine] > #" & _
    Format(Me!DataOraInizio, "mm/dd/yyyy hh:mm") & "#") > 0 Then
    MsgBox "Prestazione già inserita o a cavallo di una esistente", _
    vbCritical, "Verifica periodo di inserimento"
    Me.Undo
    Cancel = True
    Me.DataOraInizio.SetFocus
    End If

    End Sub

    Il tutto funziona alla grande consentendo anche di inserire una DataOraInizio uguale ad una DataOraFine di un periodo già inserito, p.e. (7/8/2022 09:00 > 7/8/2022 10:00) e poi (7/8/2022 10:00 > 7/8/2022 11:00).

    Buona giornata a tutti.
  • Re: Evitare inserimento duplicati

    fratac ha scritto:


    ...
    Sicuramente mi sfugge qualcosa, ma indipendentemente da dove si vanno a pescare i dati, da una o più tabelle, ma poi, il controllo se esistono già dati inseriti identici, come lo fai, se non usando un dcount o un dlookup?
    Avendo tutto in una tabella unica (TBL_Straordinari) a cosa serve il dlookup o dcount ??
Devi accedere o registrarti per scrivere nel forum
20 risposte