Newsgroup: it.comp.lang.visual-basic
Titolo: [Recordset] .Movelast/.RecordCount...non mi funziona...

Salve,
perchè mi becco questo errore?
Rowset does not support fetching
backward.
Apro un recordset con un record dentro, scrivo .movelast e mi
muore. A me serve sapere il numero dei record, quindi una volta aperto ho
scritto .movelast e poi volevo prendermi il valore dei reocrd con
recordcount ma non funzia.
Saluti...
--------------------------------
Inviato via 
http://usenet.iol.it

 ha scritto nel messaggio
news:151Z24Z146Z171Y...@usenet.iol.it...


       recordset.recordcount
sssst!
dillo piano!
Potrebbero sentirti e seguire il tuo consiglio :)
non serve solo se usi la Order By, perchè il motore è costretto a leggersi
tutti i record per ordinarli.
Ciao

 wrote in message
news:NMgA7.3064$QL2.1...@news2.tin.it...

hehehehehehehe
cmq
Il recordcount di RECORDSET non serve leggerlo, tornerà sempre -1
Perchè?
Prendi un DB, dallo in mano a, non dico tante, due persone.
Una legge, l'altra modifica.
Poni il caso che hai richiesto la lista dei dipendenti.
Mentra tu leggi il recordset (sei uno dei due) l'altro ha eliminato un
dipendente.
Allora?
Il Recordset, posto che i dipendenti erano 100, deve restituirti 100 o 99?
Quindi, dato questo dubbio, puoi capire che ci sono diverse impostazioni per
un recodset adodb.
Primo, dove vuoi che stia il risultato, sul client (fai una "foto" del
risultato) o sul Server (puoi avere sempre i record aggiornati anche mentre
sorri il recordset)?
Secondo, l'oggetto Recordset è quello che ha "vinto il premio europeo come
oggetto più oneroso" in senso generale.
Pertanto esistono 4 "tipizzazioni", sempre in dipendenza di "quello che il
signor programmatore vuole".
Un Recordset adodb appena aperto è di tipo ForwardOnly (il meno oneroso) e
ServerSide.
Quindi, posto che vuoi sapere quanti sono:
Dim RS ad ADODB.Recordset
Dim CN as ADODB.Connection
Set CN=New Connection
Set RS=New Recordset
RS.CursorLocation=adUseClient
CN.OPEN "bla bla bla"
RS.Open "select * from dipendenti"
NumeroRecord=Rs.Recordcount
Ma non fare mai RS.MOVEFIRST o MOVELAST o MOVEPREVIOUS, questo recordset è
FORWARDONLY quindi ti permette solo lo scorrimento in avanti (MOVENEXT).
Se vuoi "muoverti a piacimento" usa un'altro tipo di recordset, impostando
la sua proprietà CursorType, ad esempio = adTypeStatic che è il più
"leggero" tra i tipi a movimento libero.
Ma, se posso, ti consiglierei di creare una Stored Procedure o, se è un
problema, un ADODB.Command, con un bel "select
COUNT(codiceunivocodipendente) from Dipendenti" per evitare di portarti
dietro enormi quantità di dati sulla rete giusto per capire quanti sono.
ciao,
Dads.

 Perchè?
[snip]
Ottima spiegazione.
Che ne dici di approfondire il tutto anche con una panoramica sugli altri
tipi di cursore?
Es. tra lo Static che hai menzionato e il Dynamic?
O meglio ancora, perchè non un bell'articoletto da pubblicare sul Sito
Comune?
Ciao

 wrote in message
news:XvmA7.3625$HT2.1...@news1.tin.it...

Ti ringrazio Zanna, ma non ho mai abbastanza tempo.
Magari a novembre.
Ciao,
Dads.

muore. A me serve sapere il numero dei record, quindi una volta aperto ho
.recordcount e .movelast funzionano soltanto con alcuni tipi di
recordset. Premi <F1> per altre informazioni.
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 0.68, 152
  VBR - Vero Birro RomagnoloŽ, diffidate dalle imitazioni!
Nike Air Up Tempo Sad Walker -- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD
   On contrary of popular belief, Unix *IS* user friendly:
    it just appears to be selective who it is friend with

dietro enormi quantità di dati sulla rete giusto per capire quanti sono.
Infatti generalemte faccio così, evito di scorrermi tutto il recordset per
vedere che ha tirato su, ma lancio la select count(...) almeno il compiuto
di contare i record se lo prende il db, e non il recordset.
Questa volta
però stò facendo una cosa sulla mia macchina con db locale (access), ho
scritto una funzione generale per aprire un recordset, in modo da usare
sempre quella nel mio progetto, che mi ristituisce dei valori in base se il
recodset è vuoto o meno. Mi sembrava una bella mincihiata dopo aver aperto
il recordset, lanciare un altra query per vedere se nel recorset ci poteva
no no essere qualcosa.
Cmq ho risolto, ho già visto tutto sulla
guida...dopo la chattata flash con zanna :)
