Jag har en programsnutt där jag vid ett tillfälle ska räkna antalet rader i en RecordSet. -1 betyder att den har fått träff men att du har öppnat databasen på fel sätt. Oki, tack för det... Vad vill du göra? Vill du bar hämta antalet poster? Skall du bara läsa eller även skriva till recordset'et? Jag ska läsa hur många rader som det finns i databasen som matchar ett visst kriterie. Behöver du hämta antalet för du tar bort?Varför returnerar RST.RecordCount -1?
    
    
Men jag får inte det att fungera. Varför returneras -1 och ibland 0? 
Jag vet att svaret på SQL-frågan är ca 2000 rader.
Här kommer koden...
/Frasse
'Skapa nya object för databasen
Set CON = New ADODB.Connection
'Definiera anslutningssträngen mot databasen
CON.ConnectionString = "driver={SQL Server};server=" & Main.ThisSystem.ComputerName & ";database=" & Databas
'Timeout för anslutningen
CON.CommandTimeout = 180
'Öppna anslutningen mot databasen
CON.Open
'Beräkna Datumgränsen
DatumGrans = DateAdd("d", Dagar, Date)
'SQL-fråga för att hämta antalet poster som är äldre än Datumgränsen från tabellen.
strSQL = "SELECT TS FROM " & Tabell & " WHERE TS < '" & DatumGrans & " 00:00:00'"
'Skapa ett Recordset
Set RST = CON.Execute(strSQL)
'För över antalet rader som matchade frågan till variabel
AntRader = RST.RecordCountSv: Varför returnerar RST.RecordCount -1?
    
    
Titta i tråden [RecordCount, det blir bara fel...] den tar upp just ditt problem.
//Anna-KarinSv:  Varför returnerar RST.RecordCount -1?
    
    
Då ska det nog se hur såhär...
'Skapa nya object för databasen
Set CON = New ADODB.Connection
'Definiera anslutningssträngen mot databasen
CON.ConnectionString = "driver={SQL Server};server=" & Main.ThisSystem.ComputerName & ";database=" & Databas
'Timeout för anslutningen
CON.CommandTimeout = 180
'Öppna anslutningen mot databasen
CON.Open
'Skapa ett Recordset
Set RST = New ADODB.Recordset
'Bestäm cursor
RST.CursorLocation = aduseclient
'Öppna Recordset
RST.open strSQL, CON, adopendynamic
'Tilldela lokal variabel antalet rader i recordset'en
AntRader = RST.RecordCountSv:   Varför returnerar RST.RecordCount -1?
    
    Sv:    Varför returnerar RST.RecordCount -1?
    
    
Därefter ska jag ta bort dessa rader i databasen.
/FrasseSv:     Varför returnerar RST.RecordCount -1?
    
    
<code>
    'Skapar Where vilkor 
        strWHERE = "FältNmn = 12"
    'Skapa nya object för databasen 
        Set CON = New ADODB.Connection 
    'Definiera anslutningssträngen mot databasen 
        CON.ConnectionString = "driver={SQL Server};" & _ 
                               "server=" & Main.ThisSystem.ComputerName & ";" & _ 
                               "database=" & Databas 
    'Timeout för anslutningen 
        CON.CommandTimeout = 180 
    'Öppna anslutningen mot databasen 
        CON.Open 
    'Skapa SQL-sats
        strSQL = "DELETE FROM TabellNamn" & vbCrLf & _
                 "WHERE " & strWHERE
        CON.Execute strSQL, AntRader
    'Stänger anslutningen mot databasen 
        CON.Close 
    'Frigör anslutningen 
        Set CON = Nothing
</code>
Alternativt om du vill ha antalet poster först:
<code>
    'Skapar Where vilkor 
        strWHERE = "FältNmn = 12"
    'Skapa nya object för databasen 
        Set CON = New ADODB.Connection 
    'Definiera anslutningssträngen mot databasen 
        CON.ConnectionString = "driver={SQL Server};" & _ 
                               "server=" & Main.ThisSystem.ComputerName & ";" & _ 
                               "database=" & Databas 
    'Timeout för anslutningen 
        CON.CommandTimeout = 180 
    'Öppna anslutningen mot databasen 
        CON.Open 
    'Skapa ett Recordset 
        Set RST = New ADODB.Recordset 
    'Skapa SQL-sats
        strSQL = "SELECT COUNT(*) As AntalPoster" & vbCrLf & _
                 "FROM TabellNamn" & vbCrLf & _
                 "WHERE " & strWHERE
    'Öppna Recordset 
        RST.open strSQL, CON, adOpenStatic 
    'Tilldela lokal variabel antalet rader i recordset'en 
        If RST.EOF Then
            AntRader = 0
        Else
            AntRader = RST("AntalPoster")
        End If
    'Stänger Recordset 
        RST.Close
    'Frigör Recordset 
        Set RST = Nothing
    'Skapa SQL-sats
        strSQL = "DELETE FROM TabellNamn" & vbCrLf & _
                 "WHERE " & strWHERE
        CON.Execute strSQL
    'Stänger anslutningen mot databasen 
        CON.Close 
    'Frigör anslutningen 
        Set CON = Nothing
</code>
Du bör överväg att använda OLEDB Proviodern för Microsoft SQL Server:
<code>
    'Definiera anslutningssträngen mot databasen 
        CON.ConnectionString = "Provider=SQLOLEDB.1;" & _ 
                               "Data Source=" & Main.ThisSystem.ComputerName & ";" & _ 
                               "Initial Catalog=" & Databas & ";" & _ 
                               "Integrated Security=SSPI;" & _ 
                               "Persist Security Info=False;"
</code>