Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Metodo FINDFIRST non valido ?

415 views
Skip to first unread message

Aldo

unread,
Jun 5, 2001, 1:47:05 PM6/5/01
to
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


Roberto dal portatile

unread,
Jun 5, 2001, 2:32:49 PM6/5/01
to

"Aldo" <al...@nospam.it> 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
---------------------------------------------


Antonio Biso

unread,
Jun 5, 2001, 4:04:42 PM6/5/01
to
Aldo <al...@nospam.it> 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


Karl Donaubauer

unread,
Jun 5, 2001, 4:50:41 PM6/5/01
to
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


Aldo

unread,
Jun 5, 2001, 6:29:07 PM6/5/01
to
"Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
news:uXaT6.2107$7F4....@news.infostrada.it...

---cut---

> 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...

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


Antonio Biso

unread,
Jun 6, 2001, 9:20:33 AM6/6/01
to
Aldo <al...@nospam.it> wrote in message
T2dT6.3518$7F4.1...@news.infostrada.it...

> "Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
> news:uXaT6.2107$7F4....@news.infostrada.it...
>

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


Aldo

unread,
Jun 6, 2001, 6:56:49 PM6/6/01
to

"Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
news:B6qT6.6049$7F4.2...@news.infostrada.it...

---cut----

> 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

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

Aldo

unread,
Jun 6, 2001, 7:03:16 PM6/6/01
to
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

Antonio Biso

unread,
Jun 7, 2001, 2:30:40 AM6/7/01
to
Aldo <al...@nospam.it> wrote in message
RyyT6.3989$Ft6.1...@news.infostrada.it...

>
> Quindi ... per me ... sei meglio della guida in linea !!!
> :-)

Cambierò nome in Guido!

> 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 ????

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

0 new messages