Newsgroup: it.comp.lang.visual-basic
Titolo: URGENTE. RecordCount

Premesso che ho incominciato da poco ad usare il Visual Basic, perchč la
funzione Recordcount mi ritorna valore -1? (Vi assicuro che il recordset non
č vuoto)
Ringazio tutti anticipatamente.
Programma:
Private Sub RMEP()
    Dim recs As New Recordset
    Dim Recset As ADODB.Recordset
    Dim tablerst As String
    Dim i As Integer, t As Integer
    Dim selectvalues As String
    Dim cut_point(1000) As Double
    Dim risp As Integer
    Dim row As Integer
    Dim col As Integer
    tablerst = Writerst     'create a table from rst
    If tablerst = Empty Then
        rst.Open query, cnn
        Exit Sub
    End If
    frmDiscretization.Hide
    FrmLabelClass.Show vbModal
    For i = 0 To (ListVars.ListCount - 1)
        recs.Open n_query(tablerst, i), cnn
        recs.MoveFirst
        risp = recs.RecordCount   *** Istruzione Incriminata****
        If recs.EOF Then
            MsgBox "Recordset is empty! It is impossible discretize",
vbExclamation, "Error"
        Exit Sub
        End If
        cut_point(0) = recs.Fields(ListVars.List(i)).Value
        Do While Not (recs.EOF)
            cut_point(1) = recs.Fields(ListVars.List(i)).Value
            recs.MoveNext
        Loop
        t = 1
        HeartRMEP recs, i, cut_point(), t
        Table_results recs, cut_point(), t, i, tablerst
        recs.Close
    Next i
 .....
Private Function n_query(tablerst, i) As String
    n_query = "SELECT " & ListVars.List(i) & "," &_
                       FrmLabelClass.CmbLabel.Text & _
                      " FROM " & tablerst & _
               " WHERE " & ListVars.List(i) & " IS NOT NULL ORDER BY " & _
               ListVars.List(i) & ";"
End Function

>è vuoto)
La proprieta' RecordCount non e' disponibile per tutti i tipi di cursore. Per sapere se puoi contare i record puoi usare il metodo Supports(...). Ad esempio con un cursore di tipo keyset RecordCount funziona bene (non bisogna neanche andare al fondo del recordset come bisognava fare con DAO).
Antonio

 vbExclamation, "Error"
ecc...ecc...
Ecco, al posto di recs.MoveFirst metti recs.MoveLast , dopo dovrebbe darti
il numero di record. Appena dopo "risp = recs.rec..." metti recs.movefirst
(o forse dopo il "if recs.EOF" .. prova)
Ciao, DaVe


Come dice ->DaVe<- ,
prima devi riempire il recordeset con una
istruzione MoveLast e dopo MoveFist in
questo modo RecordCount
conterą i recor che popolano il recorset
ciao              ;-)) Davide ((-:

Ciao
non è assolutamente vero che con ADO devi prima passare all'ultimo record
per poi andare al primo per poter avere il numero dei record.
Questo succedeva con il buon vecchio DAO, con ADO non più. il valore -1
viene restituito perché il cursore utilizzato non è il grado di stabilire il
numero di record presenti nella tabella. Soluzione cambiare il cursore,
ricordo a Remix (che fai il DJ?!?) che dal codice che ha scritto quando
richiama il metodo Open dell'oggetto Recordset non specifica il cursore da
utilizzare, ADO usa di default il cursore adOpenForwardOnly che appunto non
è il grado di fornire il numero dei record. Come non lo è neanche il cursore
adOpenDynamic. Quindi le soluzioni possono essere due:
1) cambiare il cursore;
2) utilizzare la funzione COUNT in una stringa SQL del tipo "SELECT
COUNT(campo1),campo2 ... FROM Tabella" il primo campo restituirà il numero
dei record della tabella.
Il codice che segue utilizza il cursore  adOpenStatic  e riesce a ricavare
il numero dei record:
   Dim adoCon As ADODB.Connection
   Dim adoRec As ADODB.Recordset
   Set adoCon = New ADODB.Connection
   Set adoRec = New ADODB.Recordset
   With adoCon
      .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Programmi\Microsoft Visual Studio\VB98\Nwind.mdb"
      .Open
      With adoRec
         .Open "Orders", adoCon, adOpenStatic, adLockReadOnly
         Debug.Print .RecordCount
         .Close
      End With
      .Close
   End With
   Set adoCon = Nothing
   Set adoRec = Nothing
Ciao Luca