Newsgroup: it.comp.lang.visual-basic
Titolo: openrecordset con errore

scusate : posso sapere perche' il seguente codice mi da come risultato
sempre 1
For x = 1 To 6
        tot = 0
        criterio = "select * from [gio] where dif = " & x & ""
        Set tabr = db.OpenRecordset(criterio)
        tot = tab.RecordCount
        With tab
            .MoveFirst
            .MoveLast
        End With
next x
quando invece i record dell'archivio presentano per x= 1 n. 179 x=2 50 x=3
143 ecc... ?
nell'mdb dif = campo numerico
Grazie


la parte sotto deve andare prima di quella sopra (dove leggi il numero di
record), poi controlla bene il nome dell'oggetto recordset, è tab o tabr,
poi per me il criterio non ha bisogno delle virgolette finali.....insomma
sistema un po' tutto....e vedrai che funzionerà.....


Ciao da Alex.
Presumo l'errore possa essere l'abuso delle VIRGOLETTE, se x è un numero non
serve nulla se x è stringa diventa nell'altro modo,  guarda bene che il
carattere inserito è l'apice.
For x = 1 To 6
        tot = 0
    ************* x=integer ****************
        criterio = "select * from [gio] where dif = " & x
   ************** x=string *****************
        criterio = "select * from [gio] where dif = '" & x & "'"
     Set tabr = db.OpenRecordset(criterio)
        tot = tab.RecordCount
        With tab
            .MoveFirst
            .MoveLast
        End With
next x
Prova. Alex
-- 
Posted from [212.141.54.102] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:gVD47.17586$m06.6...@news.infostrada.it...

innanzitutto io farei
criterio = "select * from [gio] where dif = " & CStr(x)
non è indispensabile, ma le conversioni di tipo implicite non mi sono
mai piaciute (x l'hai dichiarata come Integer, vero?  :))
poi cambierei queste righe:
        tot = tab.RecordCount
        With tab
            .MoveFirst
            .MoveLast
        End With
in
        If Not (RS.EOF And RS.BOF) Then
            tab.MoveLast
            tot = tab.RecordCount
        Else
            tot = 0
        End If
questo perché cmq quanto apri un RS il cursore è sul primo record
(ovvero non c'è bisogno del MoveFirst), ed eviti l'errore che ti
capiterebbe se il RS fosse vuoto.
cmq se ti serve sapere _solo_ in numero di record potresti fare una
SELECT COUNT(*) AS NRec FROM [gio] WHERE dif = " & CStr(x)
molto più performante, specie nel caso in cui il RS contenga molti
record
Ciao
Faber

 SELECT COUNT(*) AS NRec FROM [gio] WHERE dif = " & CStr(x)
1**** ) Cosi', pero' non funziona. nella variabile NRec come risultato ho
sempre "0", facendo col metodo precedente ottengo il giusto numero 2041.
Mi sai spiegare perche ?
2****) Mi sai dire perche' in questo ciclo :
for x = 1 to 6
    ... leggo i record con l'istruzione in oggetto
    ... assegno a label1(x) = nrec
next x
a video si vedono le label aggiornate tuttein una alla volta e non una alla
volta ?
Poiche' il mio ciclo non si ferma a 6 bensi' a 26 e i record sono tanti,
quasi 80.000, vorrei che l'utente non debba aspettare senza vedere niente,
come se nulla accadesse, ed avesse la possibilita', se vuole di ANNULLARE
l'operazione. Ma questo non sono riuscito proprio a farlo.
Ciao

 l'operazione. Ma questo non sono riuscito proprio a farlo.
dichiara a livello di modulo (form) una variabile booleana
es.:
Private bAnnullato As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nel pulsante che causa l'interruzione del ciclo metti:
bAnnullato = True
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prima del ciclo For metti:
bAnnullato = False
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nel ciclo, prima di Next x, metti:
DoEvents    'Permette all'utente di premere il pulsante Annulla  :)
If bAnnullato Then Exit For    'Esce dal ciclo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ciao
Faber
P.S.: se usi DoEvents in quel modo non hai bisogno di chiamare il metodo
Refresh della Label

G R A Z I E   1000    !!!!

 G R A Z I E   1000    !!!!
:-)
Faber

 non si aggiorna ? e cosi' pure se utilizzo un msflexgrid ?
uhmmm non è che devi fare un Refresh del DataControl?
Faber