Newsgroup: it.comp.appl.access
Titolo: RecordSet: problema stupido

Ho il seguente codice in una funzione per l'esportazione in un file di
interscambio, che fino ad ora ha sempre funzionato egregiamente:
Dim rs As DAO.Recordset
Dim Campo As DAO.Field
Dim Tabella, strSql As String
    Tabella = "DatiDaEsportare"
    strSql = "SELECT * FROM " & Tabella & " WHERE [NrOrdine] = " &
NrOrdine
    Set rs = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
    Print #FileNumber, "Tabella: " & Tabella
    Print #FileNumber, "Record: " & rs.RecordCount
    For Each Campo In rs.Fields
        If Left(Campo.Name, 2) <> "ID" And Campo.Name <> "NrOrdine"
Then
            Print #FileNumber, Campo.Name & "|" & Campo.Value
        End If
    Next Campo
    rs.Close
    Set rs = Nothing
Fino ad ora esisteva un recor per ogni ordine.
Ora hanno deciso che i record possono essere piu' di uno (suddivisione
dell'ordine), per cui mi aspettavo di doverla cambiare semplicemente
con un loop sul "For Each", ma con grande sorpresa il numero di record
che mi scrive sul file e' sempre uno, solo il primo.
Sara' che e' sabato e sto per uscire, ma proprio non capisco dove sia
l'errore...
Ciao e grazie.
Doc Hollywood

 ha scritto nel messaggio
news:adda0833.04022...@posting.google.com...

Se ci sono più record devi "muoverti" nel recordset con rs.MoveNext...
Ciao.
--
Sergio MAZZA

> Se ci sono più record devi "muoverti" nel recordset con rs.MoveNext...
Infatti era la cosa stupida che non ricordavo.
Infatti con questo funziona bene:
 Dim rs As DAO.Recordset
 Dim Campo As DAO.Field
 Dim Tabella, strSql As String
 Tabella = "DatiDaEsportare"
 strSql = "SELECT * FROM " & Tabella & " WHERE [NrOrdine] = " &
NrOrdine
 Set rs = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
 Print #FileNumber, "#Tabella: " & Tabella
 With rs
     .MoveNext
     .MoveFirst
     Print #FileNumber, "#Record: " & rs.RecordCount
     Do While Not .EOF
         For Each Campo In rs.Fields
             If Left(Campo.Name, 2) <> "ID" And Campo.Name <>
"NrOrdine" Then
                 Print #FileNumber, Campo.Name & "|" & Campo.Value
             End If
         Next Campo
         .MoveNext
     Loop
 End With
 rs.Close
 Set rs = Nothing
Quello che mi "sconcerta" (e mi aveva tratto in inganno) e' che il
"RecordCount" rimane ad 1 fino a che non si fa la prima mossa in
avanti. Bug della MS? Chissa'...
Ciao
Doc Hollywood

 ha scritto nel messaggio
news:da374996.04022...@posting.google.com...

A me sconcerterebbe un recordset "pensante" o che indovini cosa voglio fare.
Anch'io cadevo in queste "stupidaggini" ma ho adottato un sistema che mi
preserva da questi errori. Quando scrivo del codice tipo If - End if la
completo subito in ogni sua parte:
es.
If Then
Else
End if
quindi il ciclio in un recordset diventa:
Do while not eof
movenext
loop
Poi la riempio con quello che serve; facendo questo limito i danni...
Ciao.
--
Sergio MAZZA

 Poi la riempio con quello che serve; facendo questo limito i danni...
Di solito lo faccio anch'io.
Questa volta ho fatto il "raffinatone" per cui ne e' nata una sintassi
alquanto "strana", ma che per una cosa cosi' semplice funziona.
Rimane il problema del recordset il quale, fintanto che non viene
fatta la prima mossa, non sa quanti recor contiene... questo forse e'
piu' sconcertante...
Ciao
Doc Hollywood

 Doc Hollywood
Ah! Ma questa è documentato nell'help:
(cito) non nel senso del maschio di cita.
La proprietà RecordCount non indica il numero di record contenuti in un
oggetto Recordset di tipo dynaset, snapshot o forward-only scrolling finché
non si è avuto accesso a tutti i record.
Se vuoi contarli puoi farlo con DCount("*","nomeTabella/query")...
Ciao.
--
Sergio MAZZA

 Se vuoi contarli puoi farlo con DCount("*","nomeTabella/query")...
Faccio prima a fare un passo avanti ed uno indietro...
Doc Hollywood

 Doc Hollywood
Ciao.
--
Sergio MAZZA