Newsgroup: it.comp.appl.access
Titolo: Duplicazione di date

Perdonatemi se rischio di essere invadente.
ho fatto un post qualche giorno fa e non ho avuto risposta
non so se è possibile riproporlo, ma ne dubbio, lo faccio lo stesso :-)
ho necessità di aggiungere questa funzione per completare il mio db
 
 
 
con questa istruzione, qualche giorno fa, sono riuscito - con l'aiuto di Karl,ad evitare l'inserimento di date già contenute in periodi precedenti:
 
strSQL = "SELECT periodoDAL FROM NomeDellaTuaTabella" & _ 
" WHERE CIP = '" & Me!CIP & "'" & _ 
" AND DAL <=" & CLng(Me!DAL) & _ 
" AND AL >=" & CLng(Me!DAL) 
 
 
 
Mi servirebbe, per completare l'opera, un'istruzione che associata ad un pulsante di comando sulla maschera, controllasse se in una tabella (o recordset di riferimento (associato all'ID), esistono già periodi sovrapposti, ovvero date duplicate, eventualmente in maniera che le potesse segnalare in qualche modo al termine del controllo (evidenziando i record, o con dei messaggi di avviso). 
 
Con la funzione di query trova duplicati io trovo solo i record perfettamente identici.
ma io ho bisogno di sapere se un giorno di assenza è già ricompreso in un altro periodo di assenza (ovviamente per lo stesso nominativo identificato da un ID)
Grazie

 identificato da un ID) Grazie
 
Basata su Tabella e Form con campi:
ID_Counter ==> AutoNumber
ID_Nome    ==> Long
Assenza_DA ==> Date/Time
Assenza_A  ==> Date/Time
====================================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim db As Database, RS As Recordset, SQL As String
 
Set db = CurrentDb
SQL = "SELECT T_1.ID_Counter, T_1.ID_Nome, T_1.Assenza_DA, "
SQL = SQL & "T_1.Assenza_A FROM T_1 WHERE (((T_1.ID_Nome)="
SQL = SQL & [ID_Nome] & "));"
Set RS = db.openrecordset(SQL, dbOpenDynaset)
 
Do Until RS.EOF
    If [Assenza_DA] >= RS![Assenza_DA] And [Assenza_DA] <= 
RS![Assenza_A] Then
        MsgBox "Assenza_DA giï¿œ compresa nel periodo di assenza " & _
               "del record con ID_Counter = " & RS![ID_Counter]
        Cancel = True
    End If
    If [Assenza_A] >= RS![Assenza_DA] And [Assenza_A] <= RS![Assenza_A] 
Then
        MsgBox "Assenza_A giï¿œ compresa nel periodo di assenza " & _
               "del record con ID_Counter = " & RS![ID_Counter]
        Cancel = True
    End If
    RS.MoveNext
Loop
===============================================
 
Bruno

 Bruno
 
 
 
Ti ringrazio per l'attenzione e te ne chiedo un altro pò!
ho adattato il tuo codice alla mia esigenza associando la funzione al pulsante di comando della maschere e viene una cosa così:
 
Private Sub Comando109_Click()
Dim db As Database, RS As Recordset, SQL As String
Set db = CurrentDb
SQL = "SELECT * from Assenze WHERE CIP = '" & Me!cip & "'"
Set RS = db.OpenRecordset(SQL, dbOpenDynaset)
 
Do Until RS.EOF
If DAL >= RS!DAL And DAL <= RS!AL Then
MsgBox "Assenza DA già compresa nel periodo di assenza del record con ID =" & RS!ID
Cancel = True
End If
If a >= RS!DAL And a <= RS!AL Then
MsgBox "assenza già compresa nel periodo" & RS!ID
Cancel = True
End If
RS.MoveNext
 
Loop
 
End Sub
 
però non funziona
mi puoi aiutare
 
 

 mi puoi aiutare
 
Ho provato e riprovato e coi miei dati funziona perfettamente.
Come posso aiutarti se non mi fai conoscere l'errore che ti manda?
Ricordatene la prossima volta.
 
Bruno

 Bruno
 
Ti chiedo scusa!
Ma non restituisce nessun errore.
clicco sul pulsante e non accade nulla.
eppure ci sono record che si accavallano.
 
l'ambiente è quello di una maschera che contiene i dati del soggetto e poi 
varie schede: in una di queste c'è una sottomaschera che visualizza l'elenco delle assenze per quel determinato nominativo 
 
grazie

 ma io ho bisogno di sapere se un giorno di assenza � gi� ricompreso in un altro periodo di assenza (ovviamente per lo stesso nominativo identificato da un ID)
 
Se ti capisco bene la differenza a questo che abbiamo gi�
fatto � solo che vuoi anche visualizzare i record trovati.
In questo caso prova cos�:
 
 
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String, strRet As String
 
strSQL = "SELECT * FROM NomeDellaTuaTabella" & _
" WHERE CIP = '" & Me!CIP & "'" & _
" AND DAL <=" & CLng(Me!DAL) & _
" AND AL >=" & CLng(Me!DAL)
 
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
 
Do Until rs.EOF
     strRet = strRet & rs!CIP & "da: " & rs!DAL & "a: " & rs!AL & vbCrLf
     rs.MoveNext
Loop
 
If Not rs.BOF Then
     MsgBox "Data gi� presente. Dettagli:" & vbCrLf & strRet
End If
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
Access Lobby: 
http://www.AccessDevelopers.org
 

Che piacere risentirti.
Non ho provato la tua funziona, ma mi spiego meglio. 
Non devo controllare la data che inserisco. 
Ora voglio verificare se tra i record già esistenti ci sono sovrapposizioni.
 
Mi serve per bonificare i dati già inseriti.

 Mi serve per bonificare i dati giï¿œ inseriti.
 
Supponiamo che nella tabella hai una chiave primaria che si chiama Id.
In questo caso puoi usare una query come questa:
 
SELECT A.*
FROM Assenze AS A INNER JOIN Assenze AS B ON (A.DAL <= 
B.AL
) AND (
A.AL
 
 >= B.DAL) WHERE A.CIP = B.CIP AND A.Id <> B.Id;
 
Access non puo mostrare questo tipo di query (non equi join) nella vis. 
struttura ma solo nella vis. SQL. Puoi usarla come origine dati di una 
(sotto)maschera o di un recordset.


 Access Lobby: 
http://www.AccessDevelopers.org
 
 
Vorrei esplodere di felicità....
e' esattamente il risultato che mi serviva
Grazieeeeeeeeeeeee.
 
 
non c'ho capito niente,
ma ho copiato il codice SQL nella mia query e funziona perfettamente.
 
 
ciao


... e solo per notizia in una tabella di 18000 record ce ne sono 404 da bonificare
 
grazie ancora

 ma ho copiato il codice SQL nella mia query e funziona perfettamente.
 
Forse cos� � meglio da capire perch� Access puo anche mostrarlo
in vis. struttura:
 
SELECT A.*
FROM Assenze AS A, Assenze AS B
WHERE A.DAL <= 
B.AL
 AND 
A.AL
 >= B.DAL
     AND A.CIP = B.CIP AND A.Id <> B.Id



grazie, grazie, grazie