Newsgroup: it.comp.appl.access
Titolo: Problema con codice VBA per verificare la presenza di un record

Ciao a tutti,
sto impazzendo per risolvere questo "semplice" problema, ormai ci ho
lavorato delle ore, tra manuali, guida in linea ecc, ma proprio non ne vengo
fuori.
Quindi spero vivamente in un vostro aiuto!!!
Ho realizzato un database in ACCESS con una sola tabella e una sola maschera
collegata alla tabella.
Ora devo verificare che quando inserisco un un nuovo dato nel campo CODICE
questo sia presente o meno, deve essere solo un avviso non voglio obbligare
l'utente a utilizzare codici sempre diversi!
Il codice che ho scritto è il seguente:
Private Sub Codice_AfterUpdate()
    Dim a As String
    Dim rst As DAO.Recordset
    Dim strNomeRicerca As String
    Set rst = Me.Recordset
    strNomeRicerca = Str(Me!Codice)
    MsgBox strNomeRicerca
    rst.FindFirst "Codice = " & Chr(34) & strNomeRicerca & Chr(34)
'******QUI SI VERIFICA L'ERRORE
    If rst.NoMatch Then
        MsgBox "Record non trovato"
    End If
    rst.Close
End Sub
il debug mi dice "Azione eliminata da un oggetto associato", ho premuto il
"?" ma la guida in linea risulta essere bianca.
Che vuol dire??
Ho provato a scrivere anche:
rst.FindFirst "Codice = " & strNomeRicerca
oppure
rst.FindFirst "Codice = " & "'" & strNomeRicerca & "'"
oppure
altre infinite possibilità..... ma l'errore è sempre lo stesso
Ringrazio tutti in anticipo.
Ciao da Emiliano

 End Sub
[...]
-- 
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 > End Sub
    Oops!.. Prima non ci avevo fatto caso. Ma tu intendi chiudere il
recordset del form?... Perche'? A chiuderlo ci pensa la maschera stessa,
alla sua chiusura. Tu non devi "segarle" il recordset sotto ai piedi...


 ha scritto nel messaggio
news:Z6c2a.167410$0v.46...@news1.tin.it...

Secondo me è più semplice usare dlookup.
Ciao

 Ciao da Emiliano
dico anch'io la mia. E se usassi il recordsetclone?
--
a.cara 
Togli qualcosa dall'email

 --
Ciao ti ringrazio, ho finalmete risolto l'errore che non si verifica più.
Ma comunque la macro VBA mi dice sempre che il record non è presente!! anche
se questo è presente!
Mi sai spiegare perchè
Grazie ancora
Ciao da Emiliano

 Mi sai spiegare perchè
    Se leggi bene te l'ho gia' spiegato!... Hai fatto la prova del msgbox?


 ha scritto nel messaggio
news:3E495DD2...@blunet.it...

Non è un problema della mancanza del CHM in quanto ho provato su più PC con
diverse versione di ACCESS e la guida si apre ma è bianca. Bo!
Per quanto riguarda il "recordsetclone" invece la risposta è corretta!
Grazie.
Ciao da Emiliano

 ha scritto nel messaggio
news:b2bn34$1b9cv6$1...@ID-52090.news.dfncis.de...

Si l'ho fatta e mi sembra corretta. Ti riporto l'ultimo codice che ho
scritto, il quale mi dice sempre "Record non trovato":
Private Sub Codice_AfterUpdate()
    Dim a As String
    Dim rst As DAO.Recordset
    Dim strNomeRicerca As String
    Set rst = Me.RecordsetClone
    strNomeRicerca = Format(Me!Codice, "0")
    rst.FindFirst "Codice = " & "'" & strNomeRicerca & "'"
    MsgBox "Codice = " & "'" & strNomeRicerca & "'"
    If rst.NoMatch Then
        MsgBox "Record non trovato"
    Else
        MsgBox "Il record è già presente!!", vbInformation
    End If
End Sub
Spero tu possa aiutarmi perchè ormai per queste 10 righe di codice ho perso
ore e ore di lavoro!
Se vuoi ti mando il file MDB...
Ciao e ancora grazie
Emiliano

 Se vuoi ti mando il file MDB...
secondo me non usi il debug.
Prima o poi mi tocchera' fare una "tirata" sul suo uso.
Con il debug per risolvere il problema, penso, che ci mettevi 10 sec
netti
Il codice sembra corretto, qui ci vuole Buffon (leggasi R.Massoni
con la sua palla di vetro iperoccupata), credo che abbia ragione
Maurizio, il valore che cerchi non e' esattamente quello che c'e'
sul DB, ma c'e' quel valore sul DB?
--
a.cara
togli qualcosa dall'email

 Se vuoi ti mando il file MDB...
    Meglio di no... mi dispiace.
[...]


     Meglio di no... mi dispiace.
Ti capisco....
per quanto riguarda il problema l'ho risolto modificando del tutto il codice
prendendolo dalla guida in linea:
    Dim dbs As Database, rst As DAO.Recordset
    Dim strCriteria As String
    Set dbs = CurrentDb
    strCriteria = "[Codice] = '" & Me!Codice & "'"
    Set rst = dbs.OpenRecordset("ARCHIVIO", dbOpenDynaset)
    rst.FindFirst strCriteria
    If rst.NoMatch = False Then
        MsgBox "ATTENZIONE: Il codice inserito è già presente nel
database.", vbExclamation
    End If
    rst.Close
    Set dbs = Nothing
Per quanto riguarda il codice che avevo scritto in precedenza e gli apici,
ho provato in tutti i modi: apici singoli, doppi apici, con parentesi e
senza parentesi, ma sempre niente da fare.
Il compo "Codice" è un campo di testo come già avevi intuito
Non ho capito il perchè non funzionasse ma ora ho risolto, grazie per
l'infinito aiuto che mi hai dato!!!
Ciao da Emiliano

 ha scritto nel messaggio
news:3E4A0611...@blunet.it...

La mia sfera di cristallo concorda con te che l'ultimo codice postato da
Emiliano é corretto e funzionante e che probabilmente non è stato generato a
fronte dell'evento giusto e/o esiste del vecchio codice spazzatura.
Comunque io avrei usato l'evento "Prima di aggiornare" e non "Dopo
aggiornamento" ed avrei ascoltato il consiglio di Jef usando una funzione di
aggregazione sui dominii (DLookup o DCount che sia) evitando di fare tutto
'sto macello.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------