Newsgroup: it.comp.appl.access
Titolo: Query ricerca duplicati

Premessa.
Ho una query di ricerca duplicati  basata su 5 campi, che è
origine record di una msk che viene aperta sull'evento afterupdate
del 5° campo, in ordine di tab,se la query contiene duplicati,
visualizzandomi dove è presente l'altro duplicato
-Come far visualizzare anche i duplicati che in un campo
non presentano valori ma per i restanti sono uguali?
L'altro problema è che se l'operatore decide cmq di
salvare il duplicato anzichè eliminarlo,
al successivo inserimento di un
altro duplicato, la rivisualizzazione ne conterrà 4.
- Come fare per escludere quello che ho deciso
 di salvare.
Io ho pensato di creare una cosa di questo tipo:
Creare una condizione,se la query contiene valori attivami
questa casella di controllo che sarà anche il  filtro per
l'esclusione di tale record duplicato alla prossima visualizzazione.
:-)))) Che brava! (modesta).
Si ma come sviluppare il tutto  in codice? :°-(((((((((((((( (che scarsa!)
Mi indichereste la strada? Grazie anticipatamente.
--
Debora

 ha scritto nel messaggio
news:a4Kf9.13554$6O4.2...@twister1.libero.it...

Debby? Sei proprio tu? Debora Maniero alias Randy?  wow
da insegnante ad allieva, tesoro ci sono io x te se ha bisogno,
 fammi un fischio e ....corro.
Giansergio

 ha scritto nel messaggio
news:alpdr6$ro8$1...@nntp.weblinea.it...

Sei come il prezzemolo, adesso anche qui.
Qualcosa la puoi fare per me ora che ci penso....
non rompere, lo apprezzerei tanto. Grazie.
--
Debora


Scusa ma cosa ti ho fatto, perchč sei cosě sgarbata?
Giansergio
p.s. ma quanti nick hai, labirinto????(orrendo)

 ha scritto nel messaggio
news:alphl2$52a$1...@nntp.weblinea.it...

Hai ragione,perdonami.
il nick? orrendo? infatti non č il mio,
stavo usando il pc da un altro ufficio. (Ora sono col mio,
va bene cosě?)
--
Debora

 ha scritto nel messaggio
news:a4Kf9.13554$6O4.2...@twister1.libero.it...

Nessuna risposta! :°-(
Non credevo fosse così difficile.
Pazienza.
--
Debora

 ha scritto nel messaggio
news:a4Kf9.13554$6O4.2...@twister1.libero.it...

Nessuna risposta! :°-(


 Mi indichereste la strada? Grazie anticipatamente.
Aggiungi un campo alla tabella, di tipo Sì/no inizializzato sempre a no.
Quando l'utente decide di salvare il record, tu setti a Sì quel campo.
La query di ricerca duplicati deve filtrare solo i record col valore del
campo a No
Antonio

 ha scritto nel messaggio
news:KWYf9.16185$Oz2.2...@twister2.libero.it...

Ciao Antonio
non pensavo che alla fine mi rispondevi proprio tu,
dopo i miei commenti poco simpatici sul modo che hai
di rispondere evasivamente,faccio un mea culpa!.
Si avevo già aggiunto il campo si/no alla tabella,
 e anche la query.
Sto cercando nei 3d precedenti, alla visualizzazione
del msgbox il modo di "settare" a Si quel campo
ma credo che sia sufficiente un banalissimo
me.caselladicontrollo.value=true sull'ok dato
dall'utente.
Grazie, Debora

 dall'utente.
Se hai messo un controllo associato al campo sì/no ti basta in effetti
assegnare al controllo, quindi al campo il valore true.
Ma allora puoi far sì che l'operazione di salvataggio sia proprio lo
"spunto" della checkbox associata a quel campo.
Altrimenti ti apri un recordset sul record che si vuole salvare (o su tutta
la tabella e poi salti con una findfirst su quel record) e quindi con una
rst.edit
rst.fields("campo") = true e
rst.update
hai risolto
Antonio

 ha scritto nel messaggio
news:xAZf9.16352$Oz2.2...@twister2.libero.it...

ho risolto?  uhmmm... non proprio
devo capire "apri un recordset ....", ma ci voglio
arrivare da sola. Al limite se proprio ho difficoltà
ti rompo ancora. Per ora grazie.
--
Debora

 ti rompo ancora. Per ora grazie.
Dai, che mi pagano per questo.
Poi oggi c'è poco traffico di altri utenti...
set rst = currentdb.openrecordset(str)
str può essere una tabella, una query salvata, una stringa SQL
Prepariamola dinamicamente per esempio
str = "SELECT tuatab.* FROM tuatab WHERE ID=" & me.idrecordcorrente
In questo modo il recordset è composto da un unico record, quello del record
corrente sulla maschera.
con rst.movefirst lo punti per farci quello che vuoi e che poi vedremo
Oppure, anche per altri usi, vediamo come aprire il rcordset globale e poi
cosa farci
str = "SELECT tuatab.* FROM tuatab"
set rst = currentdb.openrecordset(str,dbopendynaset)
Perchè c'è un parametro in più?
Perchè, siccome nel recordset ci sono tutti i record della tabella e voglio
trovare quello del record corrente e lo farò con il metodo findfirst, questo
metodo funziona solo se c'è quell'opzione
crit = "IDrecord=" & me.idrecordcorrente
rst.findfirst crit
e abbiamo puntato il primo record che verifica la condizione
a questo punto con l'insieme fields possiamo verificare il contenuto del
record corrente del recordset oppure scriverci dentro.
Per scrivere dobbiamo editarlo
rst.edit
rst.fields("CampoSalvataggio") = true
rst.update con questa vengono salvate le modifiche
facciamo infine un
set rst = nothing
per pulire un po' la memoria ed evitare alcuni effetti collaterali e siamo a
posto
Direi che è tutto per ora...
Antonio

[cut]
questo dovrebbe essere la tua soluzione
applicata al mio caso:
set rst=currentdb.openrecordset("query ricerda duplicati")
str = "query ricerca diuplicati"
set rst = currentdb.openrecordset(str,dbopendynaset)
crit = "codiceutente=" & me.codiceutente
 rst.findfirst crit
rst.edit
rst.fields("casellacontrollo") = true
rst.update
set rst = nothing
Io ho questo sull'evento primaaggiorn della msk:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strmessaggio As String
Dim intOpzioni As Integer
Dim bytscelta As Byte
If Not IsNull("query ricerca duplicati") Then
docmd.openform (mostra record duplicati)....
strmessaggio = "Questo dato è stato già presente in archivio." & _
"Vuoi salvarlo comunque?"
intOpzioni = vbQuestion + vbOKCancel
bytscelta = MsgBox(strmessaggio, intOpzioni)
If bytscelta = vbCancel Then
Mappale.SetFocus
Cancel = True
If bytscelta = vbOK Then
Me.Caselladicontrollo1.Value = True
DoCmd.Save
End If
End If
End If
End Sub
Il punto è:
la tua soluzione non so proprio dove inserirla.
malgrado mi sia fatta due ore di lettura dell'help.
nella mia, intanto non so se funge, ma in ogni caso
mi manca come far eseguire la queryricdupl.
Probabilmente ho scritto un pò di cavolate
Mi puoi chiarire?
--
Debora

 Mi puoi chiarire?
Spero di averti chiarito, anche se mi devi delle risposte ancora
Antonio

 Che intendi?
come far eseguire le 2 query da codice
Sicuramente manca qualcosa,ossia quando il record
appena inserito non è un duplicato, la query o meglio
il controllo della query in cui ho inserito il criterio >1
è null, e se questo avviene non deve succedere niente
ma questo mi pare che non  l'ho previsto
dovrei aggiungere un if isnull(controlloquery) then
miocontrollo.setfocus
probabilmente ho fatto il giro della luna per arrivare
allo scopo, ma come dire, se non provi non impari,
poi col tempo si imparano le scorciatoie, o no?

 End Sub
[cut]
non riguarda il tuo quesito.
Per quello sei nelle mani del valente Biso.
Hai copiato e incollato?
Quando impari ad "indentare"?
Mi rifiuto di leggere codice non "indentato"
--
a.cara

 ha scritto nel messaggio
news:3D80CAC3...@blunet.it...

che vuol dire indentare?
--
Debora

 che vuol dire indentare?
Eeehhh... c'ha ragione alessandro... è alla base della stesura di un buon
programma perchè poi è leggibile. Questo è un esempio di indentazione
corretta:
If Not IsNull("query ricerca duplicati") Then
   docmd.openform (mostra record duplicati)....
   strmessaggio = "Questo dato è stato già presente in archivio." & _
   "Vuoi salvarlo comunque?"
   intOpzioni = vbQuestion + vbOKCancel
   bytscelta = MsgBox(strmessaggio, intOpzioni)
   If bytscelta = vbCancel Then
      Mappale.SetFocus
      Cancel = True
      If bytscelta = vbOK Then
          Me.Caselladicontrollo1.Value = True
          DoCmd.Save
      End If
   End If
End If
End Sub
Riesci a notare la differenza?!?
Antonio

 ha scritto nel messaggio
news:Tt4g9.1217$my3....@twister2.libero.it...

ahhh...si in effetti è più leggibile.
Ale, ti chiedo umilmente scusa!!!! ;-PPPP
--
Debora

 che vuol dire indentare?
questo
If Not IsNull("query ricerca duplicati") Then
   docmd.openform (mostra record duplicati)....
   strmessaggio = "Questo dato è stato già presente in archivio." & _
          "Vuoi salvarlo comunque?"
   intOpzioni = vbQuestion + vbOKCancel
   bytscelta = MsgBox(strmessaggio, intOpzioni)
   If bytscelta = vbCancel Then
      Mappale.SetFocus
      Cancel = True
      If bytscelta = vbOK Then
         Me.Caselladicontrollo1.Value = True
         DoCmd.Save
      End If
   End If
End If
End Sub
--
a.cara

Spero di averti chiarito, anche se mi devi delle risposte ancora
Antò, tra le risposte che ti deve la tu' donna, c'è anche quella se ha
intenzione di mettersi a quotare con decenza?

"Jojo" <sup...@pirotti.ct> ha scritto nel messaggio
news:om43oukm4s8jmbgul...@4ax.com...

Caro Jojo, sono una persona piuttosto educata, non credo di
che dovresti esserlo anche tu.
le richiesta fatta da te riguarda me non Antonio, pertanto
sei pregato se nn ti vanno le cose che scrivono i visitatori
del NG rivolgiti direttamente a loro. faresti anche una bella
figura.
Sono sicura che,intellegente come sei, avrai capito che non
voglio farti la paternale, ti chiedo solo correttezza.
grazie
--
Debora

grazie
Non c'č di che.
PS: Anto', la tu' donna mi cazzia! :-(

 PS: Anto', la tu' donna mi cazzia! :-(
Sei come l'universo, ...non hai confini!
P.S. Non sarai mica geloso?
--
Debora

P.S. Non sarai mica geloso?
Ebbene sì... impossibile competere con un ragazzo brillante e simpa
come il Biso.
(Antò, sono le solite ducentomila all'indirizzo che sai)


Cancello tutto e ricomincio da capo perchè secondo me c'è un approccio non
completamente corretto al tuo problema.
Allora, tu dici che stai caricando qualcosa, e inserisci un codice.
A questo punto, se esiste già un record con quel codice, deve essere data la
possibilità all'utente di salvarlo.
Qui mi vengono due dubbi:
Prima di tutto, che significa salvarlo? Il record è già salvato, infatti
parlammo di settare un campo sì/no, cosicchè quelli a sì non devono più
essere toccati e quindi considerati per altre ricerche duplicati. Ok, ma
allora se si decide di non "salvarlo" che si deve fare con quel record?
Semplicemente lasciare tutto così, cancellarlo dalla tabella o cosa?
Seconda cosa: hai detto che di duplicati ce ne può essere SOLO uno. Perchè?
Non capisco come fai ad essere certa che capiterà solo questa eventualità.
Comunque, lasciando in sospeso questi problemi, direi che le rogne che ti
sei presa con query ricerca duplicati e cose del genere... sono appunto solo
rogne!
All'inserimento del codice, vai a testare in altra maniera se esiste un
record con quel codice, e se esiste, chiedi se si vuole salvarlo e quindi lo
salvi.
Allora, si potrebbe usare una dlookup, ma conviene usare un recordset in
modo che, se devi salvare il record, già hai il mezzo per farlo.
Scriverai:
crit = "Select tab.* from tab where id=" & idinserito & " AND CampoSì/No =
0"
' il crit ti da gli eventuali duplicati mai salvati
set rst = currentdb.openrecorset(crit)
if rst.recordcount > 0 then 'c'è un duplicato
  rst.movefirst
  msg = "Attenzione!@Esiste già un record con quell'id, la cui descrizione è
"
  msg = msg & rst.fields("Desc") & " compilato in data " &
rst.fields("data_comp")
  msg = msg & "@Vuoi salvarlo?"
' ho fatto così per farti vedere che puoi anche fornire info sul record via
msgbox
  if msgbox(msg, vbinformation+vbyesno,"Conferma operazione") = vbno then
    set rst = nothing
    exit sub
  end if
  rst.edit 'se arrivi qui significa che ha risposto yes
  rst.fields("CampoSì/No") = true
  rst.update
end if
set rst = nothing
Altro discorso è se tu lo vuoi anche visualizzare in maschera, ma, a parte
usare query e cose varie, potresti sfruttare i fields, come ho fatto sopra
per la msgbox, per inserire in una serie di caselle di testo, il valore dei
vari campi del record trovato.
Il codice scritto lo puoi inserire tutto nel dopo aggiornamento del campo
idinserito
Ok, per ora mi fermo qui...
Antonio


Allora, ci ho ragionato sopra e ho deciso che mi sparo.
No meglio di no, farei contento solo jojo :-PPPPPPPP
è meglio lasciare che venga visualizzato solo un messaggio
che dica che il record è già esistente, tutto il resto lo elimino.
Imposto solo il campo si/no diventa =true al verificarsi della condizione.
Nelle stampe a video o su stampante, i record duplicati avranno il
campo si/no flagato,in modo che salti subito all'occhio dell'operatore,
e il gioco è fatto.
Le righe di codice che hai scritto su sono ancora valide alla luce
di quello che ho detto?  Scusami Antonio ti sto stressando troppo.

 (Antò, sono le solite ducentomila all'indirizzo che sai)
Simpaticone. permetti una domanda?
Da dove sei saltato fuori, non avevo ancora visto il tuo nick in giro
--
Debora !

 di quello che ho detto?  Scusami Antonio ti sto stressando troppo.
Per la modifica del campo sì/no direi di sì
Antonio

 Da dove sei saltato fuori, non avevo ancora visto il tuo nick in giro
Gianni, a questo punto, o mi paghi tu, o lascio che continui a sbranarti!!!
Antonio

 Antonio
Private Sub Sub_AfterUpdate()
  crit = "Select tab.* from tab where id=" & idinserito & " AND CampoSì/No
=false"
  Set rst = CurrentDb.openrecorset(crit)
If rst.RecordCount > 0 Then 'c'è un duplicato
   rst.MoveFirst
   msg = "Attenzione!@Esiste già un record con quell'id,"" "
   'msg = msg & rst.Fields("Desc") & " compilato in data " &
rst.Fields("data_comp")
   'msg = msg & "@Vuoi salvarlo?"
   If MsgBox(msg, vbInformation + vbYesNo, "Conferma operazione") = vbNo
Then
     Set rst = Nothing
     Exit Sub
   End If
  rst.edit 'se arrivi qui significa che ha risposto yes
  rst.Fields("CampoSì/No") = True
  rst.Update
 End If
Set rst = Nothing
End sub
Questo è quello che ho inserito nell'ultimo dei 4 controlli
(comune,foglio,mapp,sub).
Devo farti alcune domande, citi "idinserito",  cosa intendi?
- "desc" e "data_comp" sono gli ipotetici controlli del record che si è
duplicato ossia del
    primo record inserito? o cosa?
- Li devo sostituire semplicemente col nome del mio controllo o devo
impostargli il percorso?
Scusa se ti faccio queste domande, ma sn necessarie per capire.
P.S. x     A.cara:    va bene l'indentato?  ;-P
        x     Jojo:        il quoting è decente?
--
Debora

 Scusa se ti faccio queste domande, ma sn necessarie per capire.
Beh, direi che č scontato no?
Antonio

Da dove sei saltato fuori, non avevo ancora visto il tuo nick in giro
Io salto fuori una volta all'anno, quando ho finito di fare il
bugget...
Il resto del tempo lo passo a fare i database per il Biso, in modo che
lui possa fare bella figura spacciandoli per suoi.

Gianni, a questo punto, o mi paghi tu, o lascio che continui a sbranarti!!!
Antò, io mica pago gli uomini come fai te! Eccheccazzo...

 > idinserito
Private Sub Sub_AfterUpdate()
   crit = "Select tab.* from tab where id=" & codiceditta & " AND CampoSì/No
=0"
nella riga sopra mi da un errore : variabile non definita
   Set rst = CurrentDb.openrecorset(crit)
 If rst.RecordCount > 0 Then 'c'è un duplicato
    rst.MoveFirst
    msg = "Attenzione!@Esiste già un record con quell'id,"" "
    'msg = msg & rst.Fields("Desc") & " compilato in data " &
 rst.Fields("data_comp")
    'msg = msg & "@Vuoi salvarlo?"
    If MsgBox(msg, vbInformation + vbYesNo, "Conferma operazione") = vbNo
 Then
      Set rst = Nothing
      Exit Sub
    End If
   rst.edit 'se arrivi qui significa che ha risposto yes
   rst.Fields("CampoSì/No") = True
   rst.Update
  End If
 Set rst = Nothing
 End sub
 --
 Debora

"Jojo" <sup...@pirotti.ct> ha scritto nel messaggio
news:ifa4ouk2b16cjl1a4...@4ax.com...

Si ho visto le tue risposte nei 3d's precedenti.
Hai visto, sai scrivere anche senza citare altre persone. ;-PPPPPPP
--
Debora

 nella riga sopra mi da un errore : variabile non definita
E tu definiscila
dim crit as string
Antonio

Hai visto, sai scrivere anche senza citare altre persone. ;-PPPPPPP
Fortunatamente anche tu ti sei resa conto che il Biso non è una
persona...

 > Private Sub Sub_AfterUpdate()
bene ora lo da qui ed evidenzia   rst =
Set rst = CurrentDb.openrecordset(crit)
--
Debora

"Jojo" <sup...@pirotti.ct> ha scritto nel messaggio
news:pfs5ousss348cisf8...@4ax.com...

Ma sei matto? Sarete sicuramente amici....è l'unica spiegazione.
--
Debora

 ha scritto nel messaggio
news:ntCg9.9526$eG6.1...@twister1.libero.it...

Debora!!!!
Devi dichiararle tutte le variabili che usi!!!!
rst è un recordset quindi dovrai fare
dim rst as recordset
Antonio

 ha scritto nel messaggio
news:PvCg9.10182$my3.1...@twister2.libero.it...

Non ti sta venendo il dubbio che sia leggerissimamente invidioso?
Antonio

Ma sei matto? Sarete sicuramente amici....č l'unica spiegazione.
Adesso sě che mi ritengo offeso...

 dim rst as recordset
cmq avevo già dichiarato le variabili.(tutte)
Sono andata avanti da sola, e dopo una serie di
msg di errore, che ho risolto, ne ho incontrato uno
su  rst.edit, mi evidenzia .EDIT. Sono andata a vedere
l'help, ma l'unica cosa che ho trovato è editmode.
Però ho l'impressione che ci sia un problema a monte, magari
nella dichiarazione del "crit". Ti dico come è strutturata la mia Tbl.
Idproprieta (chiave univoca,contatore)
codiceutente(numerico,dupl ammessi)
poi altri campi fra i quali
Comune (testo), foglio (numerico), mapp(numerico), Sub(testo)
questi 4 sono i controlli in cui faccio la ricerca di duplicati.
Poi ho aggiunto una caselladicontrollo (campo si/no).
Ora ti riporto il codice che ho messo sull'evento AfterUpdate del controllo
Sub:
Dim crit as string
Dim rst as recordset
Dim msg as string
Set rst = CurrentDb.openrecorset(crit)
crit = "Select tab.* from tab where id=" & idproprieta & " _
AND caselladicontrollo42=0"
If rst.RecordCount > 0 Then
    rst.MoveFirst
    msg = "Attenzione!@Esiste già un record con quell'id,"" "
    msg = msg & rst.Fields("codiceutente") & " intestato a " &
                rst.Fields("Cognome")
    msg = msg & "@Vuoi salvarlo?"
    If MsgBox(msg, vbInformation + vbYesNo, _
        "Conferma operazione") = vbNo    Then
      Set rst = Nothing
      Exit Sub
    End If
   rst.edit 'se arrivi qui significa che ha risposto yes
   rst.Fields("caselladicontrollo42") = True
   rst.Update
  End If
 Set rst = Nothing
 End sub
Che mi sai dire?
--
Debora

"Jojo" <sup...@pirotti.ct> ha scritto nel messaggio
news:ms06oug9qil592ptb...@4ax.com...

Ci credo!?  Pufffff!!!!!
--
Debora

 Che mi sai dire?
Quello che ho detto!
Antonio

 Quello che ho detto!
Ok riprovo.

 ti propone una lista, č EDIT non cč.
usi ADO o DAO?
[cut]

 ha scritto nel messaggio
news:3D85A13B...@blunet.it...

DAO, perchč?
--
Debora

 Già. :-(
Su, su.. pat pat
Antonio


non mi pare possibile accludo un pezzetto di software 
(stesso ambiente 2000 con DAO)
e ti assicuro che funziona perfettamente
***************
                    Set rstclone = Me.RecordsetClone
                    rstclone.FindFirst criterio
                    Do While rstclone.NoMatch = False
                        With rstclone
                            .Edit
                            !Controllo = False
                            !Controllo1 = False
                            .Update
                        End With
                        rstclone.FindNext criterio
                    Loop
                    rstclone.Close
**********
--
a.cara

 ha scritto nel messaggio
news:3D85A6DF...@blunet.it...

Non so che dire, ho verificato la libreria, DAO!
Perň non funge.
--
Debora


Hai verificato il solito giochetto dei riferimenti spuntati?
Antonio

 AND caselladicontrollo42=0"
e' questa la tua sequenza!!!!!!!!!!!!!!
ma porca miseria, prima attivi  il recordset e poi valorizzi crit?????
Non so proprio cosa possa esserci in quel recordset!
se e' cosi'. Rimandata in tutte le materie
[cut]

 ha scritto nel messaggio
news:3D85C977...@blunet.it...

Senti! Nummela trattà male!
L'ho già cazziata io!!!
Antonio

 ha scritto nel messaggio
news:3D85C977...@blunet.it...

Ale! Ma che ti succede oggi? Xkè sei così scortese?
Hai percaso fatto cilecca ieri? ;-P
--
Debora

 ha scritto nel messaggio
news:0Qjh9.1940$j15....@twister2.libero.it...

Ho verificato tutto, e dato che era spuntata anche la ADO,
ho selezionato la Dao e lo spostata sopra.
Ora riconosce quel rst.edit. ma mi restituisce un errore
3078 (non trova la tab o la query di input)
--
Debora

 Hai percaso fatto cilecca ieri? ;-P
mica ho scritto che ti bocciavo.
per fare cilecca
(se ho compreso il velato riferimento)
c'e' bisogno della materia prima
in questo momento il mio magazzino ne e' sprovvisto
e la mia azienda fornitrice tarda ad esaudire il 
mio ordine
l'hai sistemata la sequenza delle istruzioni?
--
a.cara

 ha scritto nel messaggio
news:3D85EA82...@blunet.it...

Si, ma non ci capisco più nulla. Ho paura che fra un pò viene
fuori dal monitor l'assistente di office e cominci a schiaffeggiarmi.
Hai letto il mio post delle 16.16 ?
--
Debora

 ha scritto nel messaggio
news:9Jlh9.1613$wr.2...@twister1.libero.it...

Ok, allora è scritta male la query contenuta nella crit
Antonio

 Hai letto il mio post delle 16.16 ?
si l'ho letto. per questo ti ho chiesto se avevi sistemato la 
sequenza. L'errore poteva essere sulla "set" del recordset.
--
a.cara

 ha scritto nel messaggio
news:_kmh9.43$Hc7...@twister1.libero.it...

Mi è venuto un dubbio attroce:
Ma, non è che devo creare un indice su questi 4 campi
nella tabella che li contiene?
--
Debora

 nella tabella che li contiene?
debora non scrivere "bischerate"
gli indici servono solo per far andare le cose piu' velocemente
(generalmente)
cutta e pasta il codice che stai eseguendo
--
a.cara

>>>nella riga sopra sto provando un pň di soluzioni, quella che
  mi ha suggerito Antonio č:
  crit = "Select tab.* from tab where id=" & idinserito & " AND
  CampoSě/No =0"
If rst.RecordCount > 0 Then 'c'č un duplicato
  rst.MoveFirst
  msg = "Attenzione!@Esiste giŕ un record con quell'id,"" "
  'msg = msg & rst.Fields("Desc") & " compilato in data " &
rst.Fields("data_comp")
  'msg = msg & "@Vuoi salvarlo?"
  If MsgBox(msg, vbInformation + vbYesNo, "Conferma operazione") = vbNo Then
    Set rst = Nothing
    Exit Sub
  End If
  rst.Edit
  rst.Fields("duplicato") = True
  rst.Update
End If
Set rst = Nothing
End Sub
--
Debora

 Hai letto il mio post delle 16.16 ?
Ma Debora ... sei almeno una bella topina?  :-))

 nella tabella che li contiene?
Debora... non dire bischerate
Cutta e pasta
Antonio

 ha scritto nel messaggio
news:Beoh9.686$Hc7....@twister1.libero.it...

Sai Damiano, noi due abbiamo una cosa in comune:
UN PROBLEMA,
io con access, tu mentale!
--
Debora

 ha scritto nel messaggio
news:lioh9.685$Av4....@twister2.libero.it...

Gia fatto, leggi il post precedente. ;-P
--
Debora

 io con access, tu mentale!
:-(

 ha scritto nel messaggio
news:Lmoh9.731$Hc7....@twister1.libero.it...

ehh, scusami, ma sto diventando pazza con
questo problema e tu ne vieni fuori con una cavolata
simile!
--
Debora

 simile!
In realtà mi hai frainteso: non intendevo affatto essere scortese o
offensivo ... la mia era semplice curiosità.
... per il tuo problema, dato che il 3D è ormai antico perchè non lo riposti
con un nuovo subject, così magari altri possono aiutarti.
Fai la brava :-)
Damiano


Io sono sempre brava, finchè gli altri
fanno i bravi con me! ;-)
--
Debora


tu stai a fa' diventa' pazzo me 
--
a.cara

 duplicato=0"
e poi dici che non mi devo imbufalire
ma 'ste due istruzioni le voi 'nverti' o no
prima "hai" da impostare "crit"
e poi (poiiiiiiiiiiiiiiiiii) aprire il recordset
cosi' com'e' nun va bene!!!!!!!!!!!!!!!
[cut]
--
a.cara

 marito!
Ah, quindi l'avevi già detto! ;-)

 a.cara
o santo Dio,  è giusto. ti spiego, ho
creato una copia del database in cui sto facendo le prove
io ti ho incollato quello in cui non ho ancora apportato le
modifiche.
Sto modificando la crit a tentativi, infatti sono arrivata ad un altro
errore,pare che manchi un parametro, previsto 1.
--
Debora

 ha scritto nel messaggio
news:Yjoh9.697$Av4....@twister2.libero.it...

ROTFL!!!
Antonio

 errore,pare che manchi un parametro, previsto 1.
90 su 100 hai sbagliato nome campo
o id o duplicato
controlla i nomi sulla struttura tabella
--
a.cara

 ha scritto nel messaggio
news:3D861D91...@blunet.it...

Ti posso chiedere di scrivermi la sintassi per quel crit?
ho i dubbi su
 crit = "Select (????) from (proprieta????) where (id)="_
                        ^^^               ^^^^                        ^
& (IDProprieta) & " AND duplicato=0"
         ^^^
Dopo SELECT che ci va? l'asterisco?
dopo FROM? il nome della tbl ("proprieta")
dopo WHERE ? è un riferimento a un campo o a un
controllo?
dopo & io ci ho messo l'idproprieta (chiave univoca)
La sintassi è corretta? sembra che manchi un parametro!
--
Debora

 La sintassi è corretta? sembra che manchi un parametro!
Adesso è chiaro?
Antonio

  crit = "Select (????) from (proprieta????) where (id)="_
la sintassi e' questa
"Select * from tabella where nomecampo = valore....."
Tabella = nome della tua tabella (proprieta?)
nomecampo = id (sicuro?)
valore = idproprieta (nome controllo form sicuro?)
nomecampo = duplicato (sicuro?)
valore = 0
crit="select * from proprieta where id=" & idproprieta & " and
duplicato=0"
--
a.cara

 Adesso è chiaro?
Sembra di si, adesso provo.
--
Debora

 Sembra di si, adesso provo.
FUNZIONA!!!!!!!!!!!!!!!!!!!!!!!!!!!
Però cè un problemino.
Ho provato ad inserire un duplicato, ovviamente
(visto che funziona), mi restituisce il msg
"esiste già quel......"
vuoi salvarlo? io rispondo si.
Vado a controllare nella tbl e trovo
che mi va a selezionare a VERO solo la caselladicontrollo
del primo record duplicato.
A me, servirebbe che li selezionasse entrambi i duplicati!
Dai un piccolo sforzo ancora, ci siamo quasi, poi
promesso, vi porto a pranzo, però dovete venire qua da me!!! ;-PPPPPPPPP
--
Debora
P.S. Non sto tentando di corrompervi!!!

 dato che è univoco non può trovarmi altri record con quel id!!!!
sono straimbufalito
cosa kaiser c'entra il fatto che non trovi record
con il fatto dell'errore formale sulla select
ahhahhhhahha la "loggica"
--
a.cara

 ha scritto nel messaggio
news:3D8628B0...@blunet.it...

La logica?
Meglio non farsi troppe domande?
So solo che il mio ragionamento giusto o sbagliato
che sia ha dato i suoi frutti. Ecco qua il risultato:
Private Sub Sub_AfterUpdate()
Dim crit As String
Dim rst As Recordset
Dim msg As String
crit = "Select proprieta.* from proprieta where mappale=" & Mappale & " AND
duplicato=0"
Set rst = CurrentDb.openrecordset(crit)
If rst.RecordCount > 0 Then 'c'è un duplicato
  rst.MoveFirst
  msg = "Attenzione!@Esiste già un record con quell'id,"" "
  'msg = msg & rst.Fields("Desc") & " compilato in data " &
rst.Fields("data_comp")
  'msg = msg & "@Vuoi salvarlo?"
  If MsgBox(msg, vbInformation + vbYesNo, "Conferma operazione") = vbNo Then
    Set rst = Nothing
    Exit Sub
  End If
  'rst.Update
  rst.Edit
  rst.Fields("duplicato") = True
  rst.Update
End If
Set rst = Nothing
End Sub
Scusa la mia ignoranza ma  where mappale=" & Mappale
non vuol dire :come mappale(campo)=Mappale(controllo) ?
se io ci metto l'id (come condizione) quello mi troverà sempre
e solo un record visto che è univoco!
Invece me ne deve trovare almeno due nel caso di un duplicato!
A me sembra che non faccia una piega il mio ragionamento.
A te non sembra?
--
Debora

"Debora.Maniero" wrote:
nuovo topic --> nuovo post
fai sto sforzo che il 3d "Query ricerca duplicati" e' diventato
un gran casino
--
a.cara

 A te non sembra?
di pieghe ne fa una cifra
prima erravi poiche' secondo me non esiste sulla tua tabella
il campo ID et quindi il sistema lo considera un parametro
se l'id  (ma si chiama poi cosi' il campo?) e' univoco e'
chiaro come una birra chiara che te ne trova uno (se l'azzecchi)
altrimenti nessuno
ma se l'id e' univoco mi spieghi come fa  a trovartene 2?
non te lo fa inserire.
mo' me vado a magna' na pizza.
--
a.cara

 If rst.RecordCount > 0 Then
    Consulta la guida a proposito di
        Property RecordCount As Long
            sola lettura
            Membro di DAO.Recordset
in particolare dove dice:
**********
La proprietą RecordCount non indica il numero di record contenuti in un
oggetto Recordset di tipo dynaset, snapshot o forward-only scrolling finché
non si č avuto accesso a tutti i record.
[...]
Quando si utilizzano oggetti TableDef collegati, la proprietą RecordCount č
sempre impostata a –1.
**********
    Considera il codice seguente:
        If ((rst.BOF=True) And (rst.EOF=True)) Then
            '
            ' Nessun record.
            '
            MsgBox <...>
        Else
            '
            ' Scorre tutti i record.
            '
            Do Until rst.EOF = True
                ' ...
                rst.Movenext
            Loop
        End If
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

"[cut]
Maurizio, ti ho risposto nel nuovo 3d "Query dupl....(2).
--
Debora

 ha scritto nel messaggio
news:Beoh9.686$Hc7....@twister1.libero.it...

ohhhhh

 ha scritto nel messaggio
news:am6g65$pg6$1...@nntp.weblinea.it...

Damiano ...Damiano, una bella topina?
Debby č un gran pezzo di Fig.....liola.
Qui la chiamano Randy, perchč č identica a Randy Ingermann
ma secondo me č piů bella.
Debby non ti arrabbiare ma loro non ti vedono,
altrimenti non riuscirebbero nemmeno a parlare, dalla
bava che gli si formerebbe in bocca!!!!
Giansergio

 non si č avuto accesso a tutti i record.
Questa cosa, con Access 97 non č mai stata vera!!!!
Antonio

 Questa cosa, con Access 97 non è mai stata vera!!!!
    Puo' darsi. Ma non e' rilevante. Non ne faccio una questione di come e'
o come non e' ma di prudenza. Capiamoci: si scrive del codice e funziona.
Poi si cambia una riga e non funziona piu'. Magari quella riga funziona, ma
il problema si manifesta in un'altra parte del codice. Credo che tutti noi
conosciamo bene situazioni di questo tipo, no? Perche' succede questo?
Perche' introduciamo delle dipendenze fra le varie parti del codice. Cioe'
una riga funziona *a condizione* che una precedente riga, magari molte righe
piu' su, o in altra routine, sia scritta in un certo modo. A volte non si
possono proprio evitare queste dipendenze perche' sono strutturali del
linguaggio o degli oggetti che manipoliamo. Ma quando si possono evitare va
tutto a nostro vantaggio.
    Se allora il funzionamento del mio programma si basa sul test
dell'esistenza o meno di record in una tabella e quindi scrivo *da qualche
parte* nel mio codice*:
        If <oggetto>.RecordCount > 0 Then
e funziona, e ha sempre funzionato, chi mi garantisce pero' che un
piripicchio qualsiasi, o io stesso, un bel giorno non decidiamo di scrivere,
per esempio:
        Set <oggetto> = Workspaces(0).Databases(0).TableDefs("Tabella1")
?
    Essendo "Tabella1" una tabella collegata --come generalmente e' o
dovrebbe essere-- il valore di RecordCount me lo trovo uguale a -1 e il mio
codice non funziona piu'.
    Caso raro? Puo' darsi. Caso improbabile? Puo' darsi. Pero' come la
mettiamo con la legge di Murphy?
    Percio' personalmente preferisco testare BOF e EOF che sicuramente
producono sempre lo stesso effetto, *indipendentemente* dalle altre righe
del mio codice.


 mettiamo con la legge di Murphy?
Aspč... per le tabelle allegate č vero, per quelle locali non mi č MAI
successo quello che dice l'help
Antonio