Newsgroup: it.comp.appl.access
Titolo: Recordset vuoto?

Quando si deve lavorare con i record di una tabella
solitamente la prima cosa da fare e' verificare che
il recordset in questione non si vuoto.
Ho letto qualche vecchio post sulla questione
"Contollare se un recordset e' vuoto".
Le soluzioni generalmente proposte indicano
l'uso di DCount o RecodsetCount
        If DCount("*","tblA") > 0 Then
            Set rst = CurrentDb.OpenRecordset("tblA")
            ....
opp.
        Set rst = CurrentDb.OpenRecordset("tblA")
        'rst.MoveLast
        If rst.RecordCount > 0 Then
            ....
Ma:
    - DCount comporta un accesso in piu' alla tabella
    - RecordCount fa sorgere il quesito:
        "uso MoveLast (rischiando rallentamenti)
        o non uso MoveLast (rischiando errori)?"
La mia domanda e': se l'obbiettivo NON e' conoscere
il numero di record ma solamente verificare
che il recondeset non sia vuoto, non conviene scrivere:
        Set rst = CurrentDb.OpenRecordset("tblA")
        rst.FinFirst
        If Not(NoMatch) Then
            ...
che dite?
---
leo_duca

         o non uso MoveLast (rischiando errori)?"
A parte che movelast è richiesto solo perchè IN ALCUNI CASI con tabelle
allegate, il recordcount è 0 anche se ci sono i record se prima non si fa il
movelast. La maggior parte dei casi è pleonastico.
A parte quello puoi anche fare
if rst.eof = rst.bof 'questo significa che non ci sono record
Antonio

 ha scritto nel messaggio
news:zOlo8.81817$1S3.2...@twister1.libero.it...

Non può funzionare perchè nel momento in cui ti sposti sul primo ottieni un
errore se il primo non esiste, quindi devi usare recordCount.
Ciao Roberto - Syd

 che dite?
No, con un Recordset vuoto il FindFirst ti da un errore.
Invece basta
If rs.BOF Then ...
come prima azione con il recordset perché BOF è True
in questo momento se non ci sono Record.
--
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com

 wrote in message
4boo8.80760$%g7.25...@twister2.libero.it...

Qualcuno (a cui chiedo di scrivere comunque sul NG) mi ha fatto GIUSTAMENTE
notare che il mio suggerimento era impreciso (anche se il codice propostomi
era comunque errato).
eof e bof sono proprietà che valgono true rispettivamente se ci si trova
dopo l'ultimo record e prima del primo, false altrimenti.
Se il recordset è vuoto entrambi sono true e quindi è vero che se il
recordset è vuoto le proprietà sono uguali, ma sono uguali anche quando sono
entrambe false cioè quando ci si trova in un record valido del recordset non
vuoto.
Pertanto il test giusto da poter fare è:
if (rst.eof and rst.bof) then ... 'non ci sono record
Antonio

 ha scritto nel messaggio
news:zOlo8.81817$1S3.2...@twister1.libero.it...

Stavolta la tiratina d'orecchi spetta a me :(
Dall'help di "BOF":
"Un metodo OpenRecordset richiama internamente un metodo MoveFirst. Di
conseguenza, un metodo OpenRecordset su un set di record vuoto fa sģ che le
proprietą BOF e EOF siano impostate a True."
Tnks!!
---
leo_duca

 proprietà BOF e EOF siano impostate a True."
Sì, ma la gente spesso crede che si debbe provare tutti e
due proprietà. Invece basta di provare una dopo l'apertura del rs.
Per questo ho scritto di: If rs.BOF Then...
Per la gente che non mi crede ;-) questo punto è detto più
chiaro nel MSDN:
http://msdn.microsoft.com/library/devprods/vs6/vbasic/dao360/damthmovefirst
.
htm


 ha scritto nel messaggio
news:a7un5o$olf5n$1...@ID-46617.news.dfncis.de...

Ti conosco di fama Karl e quindi non ho motivo di dubitare :)
Ciao
---
leo_duca


saggia decisione
Saluti.
Emanuele.