Newsgroup: it.comp.lang.visual-basic
Titolo: errore in RecordCount ADO

mi connetto al DB:
strconn = "DRIVER={SQL Server};SERVER=X;DATABASE=XXX;UID=sa;PWD=sa;"
cn.CursorLocation = adUseServer
cn.Open (strconn)
 
poi devo aprire una tabella e contare i records :
rs.Open "SELECT * FROM [localita]", cn, adOpenKeySet
rs.RecordCount
mi da errore sul RecordCount indicandomi utlizzo non valido di Property
Perchč ?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Inviato via 
http://arianna.libero.it/usenet/
Perchè Recordcount è una proprietà dell'oggetto recordset che restituisce un 
integer!!!
Dim iCount as Integer
iCount = rs.RecordCount

 iCount = rs.RecordCount
hmmm....
    Private Sub Form_Load()
        Dim i As Integer
        i = 4000000
        MsgBox i
    End Sub
le localita' non saranno tante, ma ci metterei almeno un long...
ado260.chm: <<Returns a Long>>
cmq, non conosco granche' ado, ma il recordcount mi sembrava non fosse
disponibile con tutti i cursori.
<<The cursor type of the Recordset object affects whether the number of
records can be determined>>
hth, j.

 disponibile con tutti i cursori.
Questo è vero, ma in tal caso la recordcount restituisce -1 come valore e 
non genera un'eccezione come dal messaggio


 record per tabella ed un integer va bene
1. integer
Private Sub Form_Load()
    Dim i As Integer
    i = 32768
    MsgBox i
End Sub
help vba su integer:
Le variabili di tipo Integer sono memorizzate come numeri a 16 bit (2 byte)
compresi nell'intervallo fra -32.768 e 32.767.
Il carattere di dichiarazione del tipo per Integer č il segno di percentuale
(%).
2. access 97
DB SIZE: 482.248.704
DISK: 682
DIR: 174.924
FILE: 4.464.250
l'ultima riga e' formattata giusta.
boh, j.


Dalla SDK di ADO:
"
RecordCount Property
Indicates the number of records in a Recordset object.
Return Value
Returns a Long value that indicates the number of records in the
Recordset.
Remarks
Use the RecordCount property to find out how many records are in a
Recordset object. The property returns -1 when ADO cannot determine
the number of records or if the provider or cursor type does not
support RecordCount. Reading the RecordCount property on a closed
Recordset causes an error.
If the Recordset object supports approximate positioning or
bookmarks—that is, Supports (adApproxPosition) or Supports
(adBookmark), respectively, return True—this value will be the exact
number of records in the Recordset, regardless of whether it has been
fully populated. If the Recordset object does not support approximate
positioning, this property may be a significant drain on resources
because all records will have to be retrieved and counted to return an
accurate RecordCount value.
The cursor type of the Recordset object affects whether the number of
records can be determined. The RecordCount property will return -1 for
a forward-only cursor; the actual count for a static or keyset cursor;
and either -1 or the actual count for a dynamic cursor, depending on
the data source.
"
Ma non puoi fare una query di questo tipo:
SELECT count(*) FROM [localita]
leggi il valore, chiudi il recordset e dopo ne apri un altro per farci
le tue operazioni ?
Ti levi un bel po' di casini e di tempo e risorse sprecate a popolare
tutto il recordset per contarne semplicemente le righe.
ciao

 tutto il recordset per contarne semplicemente le righe.
infatti.
Private Sub Command1_Click()
' dao
'    Dim db As Database, rs As Recordset
'    Set db = OpenDatabase("\\server\shareddir\diskcat.mdb")
'    Set rs = db.OpenRecordset("select count(*) from file", dbOpenSnapshot)
'    Caption = rs.Fields(0)
'    rs.Close: Set rs = Nothing
'    db.Close: Set db = Nothing
' ado
    Dim sConn As String, cn As New Connection, rs As New Recordset
    sConn = _
    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=\\server\shareddir\diskcat.mdb;" & _
        "Password=" & Chr(34) & Chr(34) & ";" & _
        "Persist Security Info=False"
    cn.Open sConn
    cn.CursorLocation = adUseClient
    rs.Open "select count(*) from file", cn, adOpenStatic, adLockOptimistic
    Caption = rs.Fields(0)
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
End Sub
hth, j.