Newsgroup: it.comp.appl.access
Titolo: Ricerca di duplicati

Salve non riesco ad uscrie fuori da una situazione di ricerca di dupicati.
In ostanza il mio database è costituito da un front end e da un back end
nel front end durante l'inserimento di alcuni dati in appsite maschere devo 
controllare l'esistenza o meno di record
che abiano contenuti simili.
Mi spiego in una mashera l'utente inserisce tra le altre cose un codice e 
una data
a questo punto se esiste già un record con quel codice e quella data mi deve 
apparire un messaggio
di avviso.
Fino a questo punto ho cercato di utilizzare il segunete codice (che non 
funziona)
inserito su attivato del campo immediatamente successivo a quello da 
controllare:
Private Sub Data_Registrazione_GotFocus()
Dim strSQL As Recordset
Dim ricercaNIF As String
Dim ricercaData As Date
Dim db As Database
Dim rs As Recordset
' mi prendo i valori dalle caselle della maschera
 ' prendo il valore inserito dall'utente nella casella codice NIF
  ricercaNIF = Me!CodiceNIF.Value
 ' prendo il valore inserito dall'utente nella casella data primo agg
  ricercaData = Me![Data primo agg].Value
' fai una query e seleziona i record con codice  e
' data decorrenza uguali a quelli inseriti
  strSQL = "SELECT Tab_DatiGenerali.CodiceNIF, Tab_DatiGenerali.[Data primo 
agg] FROM Tab_DatiGenerali WHERE (((Tab_DatiGenerali.CodiceNIF)=ricercaNIF) 
AND ((Tab_DatiGenerali.[Data primo agg])=ricercaData));"
' apri un recordet passandolgi la query creata
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
If rs.BOF Then
 ' il recordset è vuoto
MsgBox ("nessun record è stato trovato")
Else
MsgBox ("Esiste già un record con codice e data simili")
End If
'azzero gli oggetti
rs.Close: Set rs = Nothing
Set db = Nothing
End Sub 

 controllare:
Non ho fatto prove, ma ti do un paio di suggerimenti:
1. per i controlli dovresti poter utilizzare l'evento AfterUpdate del 
controllo che vuoi controllare.
2. quando costruisci la query, dovresti escludere il record su cui stai 
lavorando.
Qualcosa del tipo WHERE ... AND IDRecord <> " & Me.IDRecord
dove l'IDRecord  č la chiave della tabella che stai controllando.
-- 
Jonathan Canova
infoCHIOCCIOLAaladinoinformatica.com
www.aladinoinformatica.com

 ha scritto nel messaggio 
news:jgMAe.148479$75.63...@news4.tin.it...

Non ho utilizzato l'afterupdate per il fatto che devo spostare il cursore 
con un setfocus sul campo
eliminando allo stesso tempo il valore (con l'evneto afterupdate non risesco 
ad inserire il cursore sullo stesso campo che in quel momento
ha gą il focus)  conosci un modo alternativo?
In merito alla query mi restituische l'errore "Utilizzo non valito di 
Porperty"

 Porperty"
Sostituisci
  strSQL = "SELECT Tab_DatiGenerali.CodiceNIF, Tab_DatiGenerali.[Data primo
agg] FROM Tab_DatiGenerali WHERE (((Tab_DatiGenerali.CodiceNIF)=ricercaNIF)
AND ((Tab_DatiGenerali.[Data primo agg])=ricercaData));"
con qualcosa tipo
  strSQL = "SELECT Tab_DatiGenerali.CodiceNIF, Tab_DatiGenerali.[Data primo
agg] FROM Tab_DatiGenerali WHERE (((Tab_DatiGenerali.CodiceNIF)=" & 
ricercaNIF & ")
AND ((Tab_DatiGenerali.[Data primo agg])=" & ricercaData & "));"
L'SQL non sa cosa sia ricercaNIF


 controllare:
[CUT]
Sul SC alla Sezione FORMS(3) trovi nelle NEWS
una Funzione [3.107 Ricerca duplicati] che
potrebbe servirti.
Ciao
@Alex 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio 
news:DNMAe.148654$75.64...@news4.tin.it...

Ho fatto le modifiche secondo il suggerimento inserendo al posto del doppio 
apice quello singolo (il doppio non lo prende)).
 l'errore è sempre lo stesso
"Utilizo non valido di Porperty" con il cursore che si ferma sulla query 
strSQL 

 ha scritto nel messaggio 
news:a3a30dc55055ab73ca...@mygate.mailgate.org...

L'ho vista purtroppo effettua la ricerca su un solo campo

 doppio apice quello singolo (il doppio non lo prende)).
No, qualcosa non torna. Il doppio apice lo deve prendere. Ma non apice apice 
(''), ma doppie virgolette (") si.
Comunque, guarda il codice seguente (provato)
Il codice, se è una stringa, va incluso tra apici (ma non ce ne devono 
essere all'interno). Per risolvere entrambi i problemi, c'è la funzione 
FixForSQL
La data, se è una data, va formattata in formato americano. A questo 
provvede la FormattaData.
--------------------------------------------
Option Compare Database
Option Explicit
Sub Testq()
    Const ricercaNIF = "Ciao"
    Dim ricercaDATA As Date
    Dim strSQL As String
    ricercaDATA = Date
    strSQL = "SELECT Tab_DatiGenerali.CodiceNIF, Tab_DatiGenerali.[Data 
primo agg] " _
           & " FROM Tab_DatiGenerali" _
           & " WHERE (((Tab_DatiGenerali.CodiceNIF)=" & 
FixForSQL(ricercaNIF) & " )" _
           & " AND ((Tab_DatiGenerali.[Data primo agg])=" & 
FormattaData(ricercaDATA) & "));"
    Debug.Print strSQL
End Sub
Function FormattaData(data As Date) As String
    FormattaData = "#" & Format(data, "mm/dd/yyyy") & "#"
End Function
Function FixForSQL(ByVal str As String)
    str = Replace(str, vbCrLf, Chr(13))
    str = Replace(str, Chr(39), String(2, 39))
    FixForSQL = "'" & str & "'"
End Function
Option Compare Database
Option Explicit
Sub Test()
    Const ricercaNIF = "Ciao"
    Dim ricercaDATA As Date
    Dim strSQL As String
    ricercaDATA = Date
    strSQL = "SELECT Tab_DatiGenerali.CodiceNIF, Tab_DatiGenerali.[Data 
primo agg] " _
           & " FROM Tab_DatiGenerali" _
           & " WHERE (((Tab_DatiGenerali.CodiceNIF)=" & 
FixForSQL(ricercaNIF) & " )" _
           & " AND ((Tab_DatiGenerali.[Data primo agg])=" & 
FormattaData(ricercaDATA) & "));"
    Debug.Print strSQL
End Sub
Function FormattaData(data As Date) As String
    FormattaData = "#" & Format(data, "mm/dd/yyyy") & "#"
End Function
Function FixForSQL(ByVal str As String)
    str = Replace(str, vbCrLf, Chr(13))
    str = Replace(str, Chr(39), String(2, 39))
    FixForSQL = "'" & str & "'"
End Function
--------------------------------------------


 ha scritto nel messaggio 
news:S4PAe.60205$h5.25...@news3.tin.it...

niente da fare l'errore è sempre lo stesso : uso non valido di property
ecco il codice che ho usato
Function FormattaData(data As Date) As String
    FormattaData = "#" & Format(data, "mm/dd/yyyy") & "#"
End Function
Function FixForSQL(ByVal str As String)
    str = Replace(str, vbCrLf, Chr(13))
    str = Replace(str, Chr(39), String(2, 39))
    FixForSQL = "'" & str & "'"
End Function
Private Sub Data_Registrazione_GotFocus()
Dim strSQL As Recordset
Dim ricercaNIF As String
Dim ricercaData As Date
Dim db As Database
Dim rs As Recordset
 ' prendo il valore inserito dall'utente nella casella codice NIF
  ricercaNIF = Me!CodiceNIF.Value
 ' prendo il valore inserito dall'utente nella casella data primo agg
  ricercaData = Me![Data primo agg].Value
' fai una query e seleziona i record con codice  e
' data decorrenza uguali a quelli inseriti
' la stringa che segue l'ho messa tutt asu una riga
 strSQL = "SELECT Tab_DatiGenerali.CodiceNIF, Tab_DatiGenerali.[Data primo 
agg] FROM Tab_DatiGenerali WHERE (((Tab_DatiGenerali.CodiceNIF)=" & 
FixForSQL(ricercaNIF) & " )AND ((Tab_DatiGenerali.[Data primo agg])=" & 
FormattaData(ricercaData) & "));"


 niente da fare l'errore è sempre lo stesso : uso non valido di property
Su quale riga? :-)
