Newsgroup: it.comp.appl.access
Titolo: RecordCount errato

Salve a tutti.
Creo un recordset che mi restituisce due record (copio il codice nella finestra immediata e verifico con una query il risultato).
In Vba però la proprietà rs.RecordCount mi restituisce sempre 1.
Può dipendere dal fatto che l'origine del recordset è una query e non una o più tabelle?
Se sì come posso ovviare? 
Ricreare l'origine query nel recordset non è possibile. 
A patto che si possano  avere 1, 2 o 3  record nel recordset in base al valore di 3 campi dello stesso record della tabella origine.
Grazie.
Giuseppe

Al primo utilizzo devi aggiornare il Bookmark prima... quindi
Rs.MoveLast
Rs.MoveFirst
 
MsgBox Es.Recordcount
 
@Alex


Grazie Alex per la risposta, ma in questo caso il recordset l'ho aperto non per eseguire un ciclo ma per sapere di quanti record è composto il recordset.
Questo perchè se il record è uno, riempio i controlli con i dati dell'unico record presente nel recordset, altrimenti l'operatore deve eseguire un filtro sui record esplosi e successivamente riempire i controlli in base al record filtrato.
Nel frattempo ho adottato la seguente soluzione e sembra funzionare: 
Dim lngPresenze As Long
Dim lngAssenze As Long
Dim lngRicoveri As Long
Dim lngConteggio As Long
    lngPresenze = RicercaDato("SELECT TotalePresenze AS DATO FROM tblAssistiti INNER JOIN (tblDegenze INNER JOIN tblDegenzeMensili ON tblDegenze.IDDegenza = tblDegenzeMensili.IDDegenza) ON tblAssistiti.IDAssistito = tblDegenze.IDAssistito WHERE IdAnagrafica = " & lngIdAnagrafica & " AND Anno = " & Form_mFattura.txtAnno & " AND IDMese = " & Me.cmbIdMese)
    lngAssenze = RicercaDato("SELECT TotaleAssenze AS DATO FROM tblAssistiti INNER JOIN (tblDegenze INNER JOIN tblDegenzeMensili ON tblDegenze.IDDegenza = tblDegenzeMensili.IDDegenza) ON tblAssistiti.IDAssistito = tblDegenze.IDAssistito WHERE IdAnagrafica = " & lngIdAnagrafica & " AND Anno = " & Form_mFattura.txtAnno & " AND IDMese = " & Me.cmbIdMese)
    lngRicoveri = RicercaDato("SELECT TotaleRicoveri AS DATO FROM tblAssistiti INNER JOIN (tblDegenze INNER JOIN tblDegenzeMensili ON tblDegenze.IDDegenza = tblDegenzeMensili.IDDegenza) ON tblAssistiti.IDAssistito = tblDegenze.IDAssistito WHERE IdAnagrafica = " & lngIdAnagrafica & " AND Anno = " & Form_mFattura.txtAnno & " AND IDMese = " & Me.cmbIdMese)
    lngConteggio = IIf(lngPresenze = 0, 0, 1) + IIf(lngAssenze = 0, 0, 1) + IIf(lngRicoveri = 0, 0, 1)
    If lngConteggio = 1 Then
Dim rsPresenze As DAO.Recordset
        Set rsPresenze = CurrentDb.OpenRecordset("SELECT IdTipo, TotaleDegenza, IdAnagrafica, Anno, IDMese FROM qryDegenzeMensili WHERE IdAnagrafica = " & lngIdAnagrafica & " AND Anno = " & Form_mFattura.txtAnno & " AND IDMese = " & Me.cmbIdMese)
 ecc.....
 
Giuseppe

 
 
prova questo, opportunamente adattato
 
TotR = rs.RecordsetClone.RecordCount
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........


Grazie.
Provo.
Giuseppe

 Grazie Alex per la risposta, ma in questo caso il recordset l'ho aperto non per eseguire un ciclo ma per sapere di quanti record è composto il recordset. 
 
 
E infatti la sua risposta risolve il tuo problema.
Il .MoveLast/.MoveFirst sarà pure un giro seccante, ma è l'unico modo per avere il giusto .RecordCount di un recordset in tutti gli scenari.
 
Saluti
 
 


Grazie a tutti.
Alex è stato sufficiente aver inserito quelle due righe subito dopo la creazione del recordset.
Giuseppe

 Giuseppe
 
Già... ;-)
 
Ora tuttavia quello che fai è migliorabile... in quanto se avessi detto ti serviva SOLO il numero dei records... ti avrei detto di creare una query di conteggio estremamente più veloce e non richiede quel giochetto... oppure usa DCOUNT sulla PK con condizione ed è ancora più conveniente.
 
SELECT COUNT(*) FROM T1 WHERE (TUA CONDIZIONE)
Se apri il recordset Readonly in Snapshot il Fields(0) contiene i records.
 
Oppure DCOUNT("tuaPK",tuaTabella,tuaCondizione)
 
Decisamente quello che fai sarebbe da evitare.
 
@Alex

 Oppure DCOUNT("tuaPK",tuaTabella,tuaCondizione) 
 
Grazie e buon weekend.
Giuseppe