Newsgroup: it.comp.appl.access
Titolo: Metodo FINDFIRST non valido ?

Ho provato ad utilizzare il metodo FINDFIRST per trovare un record specifico
all'interno di una tabella.
Mi viene segnalato, pero' l' errore di runtime N. 3251 - Operazione non
supportata per questo tipo di oggetto.
Vi riporto di seguito il codice :
Set db = CurrentDb
Set rsMirageAna = db.OpenRecordset("GASANA01")
rsMirageAna.FindFirst "COGNOME = 'ROSSI'"
Dov'e' il problema ?
Grazie
Aldo

 ha scritto nel messaggio
news:tW8T6.741$7F4....@news.infostrada.it...

Rpreso dall'help di Access:
======================
Metodi FindFirst, FindLast, FindNext, FindPrevious
Individuano il primo, l'ultimo, il successivo o il precedente record in un
oggetto Recordset di tipo dynaset o di tipo snapshot che soddisfa i criteri
specificati e lo rendono il record corrente. Solo per le aree di lavoro di
Microsoft Jet.
<omissis>
Osservazioni
Se si desidera includere nella ricerca tutti i record e non solo quelli che
soddisfano una condizione specifica, utilizzare i metodi Move per spostarsi
da un record ad un altro. Per individuare un record in un oggetto Recordset
di tipo tabella, utilizzare il metodo Seek.
<omissis>
=========================
Naturalmente dai un'occhiata agli esempi dell'help.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 wrote in message
tW8T6.741$7F4....@news.infostrada.it...

Il problema è una cosa che non ho mai capito, ma che bisogna fa così se no
non funziona, anche se non è ben documentato.
Per usare quei metodi sui recordset, bisogna aprire il recordset con
l'opzione dynaset, quindi
Set rsMirageAna = db.OpenRecordset("GASANA01", DbOpenDynaset)
Perchè faccia così però, questo lo ignoro...
Antonio

Aldo ha scritto:

db.OpenRecordset("GASANA01")
Apri il Recordset senza definire un tipo.
In questo caso viene preso il tipo standard "dbOpenTable".
Per questo tipo i metodi Find non funzionano come dice
il messaggio di errore. Prendi
db.OpenRecordset("GASANA01", dbOpenDynaset)
Per solo leggere è anche possibile
db.OpenRecordset("GASANA01", dbOpenSnapshot)
--
HTH
Karl
*********
Non meravigliarti del mio strano italiano. M'esercito qui.
Access-FAQ (tedesco): 
http://www.donkarl.com

 Perchè faccia così però, questo lo ignoro...
Ti ringrazio.
In effetti mi era sfuggito quel "piccolo" dettaglio.   :-(
Adesso funziona.
Vorrei chiederti una cosa :
ho provato ad utilizzare il metodo FindNext per trovare tutti i record di
una tabella che corrispondono ad un criterio.
Non riesco , pero', a chiudere la ricerca una volta raggiunto l'ultimo
record trovato.
Mi spiego con un esempio :
se in una tabella ci sono , per esempio, i seguenti valori :
Mario
Maria
Marzia
vorrei che giunti all'ultimo record: "Marzia" il ciclo si interrompa.
Ho provato impostandolo cosi' ma non funziona.
-----------------------------------------------------------
Sub prova()
Dim db As Database
Dim rsClienti As Recordset
Set db = CurrentDb
Set rsClienti = db.OpenRecordset("clienti", dbOpenDynaset)
rsClienti.MoveFirst
Do While Not rsClienti.EOF
rsClienti.FindNext "Nome LIKE ' Ma* ' "
MsgBox (rsClienti.AbsolutePosition)
Loop
End Sub
-----------------------------------------------------------
Continua a restituirmi l'ultimo record (Marzia) senza fermarsi.
Come posso fare ?
Grazie
Aldo



Ahi ahi ahi, tu non svisceri l'help on line allora.
C'è un bell'esempio in cui si vede che il ciclo si fa testando il valore
della proprietà nomatch del recordset.
Pertanto sarà
rst.findfirst criterio
do until rst.nomatch
  lavora su rst corrente
  rst.findnext criterio
loop
Antonio

 loop
So che corro il rischio di sembrare rinco....,  ma la verita' e' che
l'esempio l'ho visto , solo che non ci ho capito un'acca !!!
Il tuo esempio, invece, semplice semplice e' molto piu' chiaro (almeno per
me).
Quindi ... per me ... sei meglio della guida in linea !!!
:-)
Altro esempio ... :
Seguendo il consiglio dell' help in linea, ho aperto un recordset di typo
dynaset (per poter usare i metodi findfirst, findnext... etc.) ponendo come
fonte di dati una semplice query sql :
=========================================
Sub contarecords ()
Dim db As Database
Dim rs As Recordset
Dim criterio As String
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM clienti", dbOpenDynaset)
MsgBox (rs.RecordCount)
End Sub
=========================================
Mi spieghi perche' la proprieta' RecordCount mi restituisce come valore = 1
, mentre nella tabella ci sono piu' di un record ????
Eppure ho seguito le indicazioni dell'esempio...
Grazie se avrai la pazienza di sopportarmi ancora (e di rispondermi).
:-)
Aldo

Caro Antonio,
dimenticati la mia domanda !!!!
Ho trovato la soluzione al mio problema attraverso il sito comune e la
BELLISSIMA, ECCEZIONALE, FANTASTICA, FUNZIONALE, INCREDIBILE (e chi piu' ne
ha , piu' ne metta) NUOVA sezione ICAA !!!!
Chi bisogna ringraziare per questo bellissimo sito comune ???
Ciao
Aldo

 , mentre nella tabella ci sono piu' di un record ????
Normalmente questo succede con le tabelle allegate in cui è necessario prima
portarsi sull'ultimo record col movelast e quindi testare il valore di
recordcount. Comunque, se ti serve solo il totale dei record, invece di
aprire un recordset puoi usare la funzione DCount
msgbox DCount("*","clienti")
Antonio
