Newsgroup: it.comp.appl.access
Titolo: Metodo FindFirst non funzionante.

Ciao.
Chiedo gentilmente se qualcuno può indicarmi dov'è  sbagliata questa
routine.
La ruotine controlla sull'evento prima di aggiornare, se il nominativo di un
cliente è già stato inserito e qui funziona (sempre grazie a un vostro
precedente aiuto), a questo punto in caso affermativo io volevo che
diventasse corrente il record contenente il nominativo del cliente in
questione. E questo non funziona. Mi compare un messaggio di errore: Errore
di run time 3251 operazione non supportata per questo tipo di oggetto.
Private Sub CognomeNome_BeforeUpdate(Cancel As Integer)
Dim dbs As Database
Dim rst As Recordset
Dim strCriteria As String
If Not IsNull(DLookup("[CognomeNome]", "Clienti", "[CognomeNome] = '" &
Me.[CognomeNome] & "'")) Then
        MsgBox "Attenzione il cliente" & "  " & Me.[CognomeNome] & "  " & "è
già presente in anagrafica!", vbInformation, "DBclienti"
        Cancel = True
        Me![CognomeNome].Undo
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Clienti")
    strCriteria = "[CognomeNome] = '" & Me.[CognomeNome] & "'"
    rst.FindFirst strCriteria
    rst.Close
    Set dbs = Nothing
    End If
End Sub
Nella finestra di debug mi evidenzia in giallo la riga "rst.FindFirst
strCriteria"
Forse ho sbagliato proprio tutto?
Grazie in anticipo. Paolo.

 ha scritto nel messaggio
news:akbk7f$stm$1...@lacerta.tiscalinet.it...

L'errore è dovuto al fatto che tu apri una tabella e non un recordset di
tipo dynaset. Leggiti il metodo nella guida.
Sarebbe sufficiente aprire una query che deriva dalla tabella clienti
(SQClienti per esempio).
Per i recordset di tipo tabella devi usare il metodo seek.
Comunque non capisco quello che vuoi fare aprendo e chiudendo un recordset
dopo averne trovato il cognome uguale a quello presente nella maschera.
Forse potrebbe servirti a cercare la chiave primaria corrispondente al
cognome per poi utilizzarla per spostarti al record corrispondente sulla
maschera.
Se è questo che vuoi ottenere la routine andrebbe scritta così, sempre che
la tabella contenga un campo chiave primaria che si chiama "ID":
spostare il codice a "dopo aggiornamento"
Private Sub CognomeNome_AfterUpdate()
Dim dbs As Database
Dim rst As Recordset
Dim strCriteria As String
If Not IsNull(DLookup("[CognomeNome]", "Clienti", "[CognomeNome] = '" &
Me.[CognomeNome] & "'")) Then
        MsgBox "Attenzione il cliente" & "  " & Me.[CognomeNome] & "  " & "è
già presente in anagrafica!", vbInformation, "DBclienti"
        Me![CognomeNome].Undo
    Dim NuovoID
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("SQClienti") 'qui ho usato una query con la
tabella clienti
    strCriteria = "[CognomeNome] = '" & Me.[CognomeNome] & "'"
    rst.FindFirst strCriteria
    NuovoID = rst!ID
    rst.Close
    Set dbs = Nothing
    Me.Undo
    DoCmd.GoToControl "ID"
    DoCmd.FindRecord NuovoID
    End If
End Sub
Ciao, Carlo

 wrote in message
akbk7f$stm$1...@lacerta.tiscalinet.it...

Prova a sostituire:
Set rst = dbs.OpenRecordset("Clienti")
con
Set rst = dbs.OpenRecordset("Clienti, dbOpenDynaset")
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

     Set rst = dbs.OpenRecordset("Clienti")
Set rst = dbs.OpenRecordset("Clienti", dbopendynaset)
Antonio

 ha scritto nel messaggio
news:akbk7f$stm$1...@lacerta.tiscalinet.it...

Se vuoi far diventare il record corrente quello del cliente trovato devi
agire sul recordset della maschera o Form
-- per AccessXp
Me.Recordset.findfirst strCriteria
-- per Access97
Me.Recordsetclone.findfirst strCriteria
If Me.Recordsetclone.nomatch=False then
   Me.Bookmark=Me.recordsetclone.bookmark
end if