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>