Hej! While... WEnd satser är "gammal" BASIC. JAg rekommenderar att du använder Do Loop: Tack för era snabba svar! Man kanske skulle kunna tänka sig något i den här stilen: Access använder DAO internt. ADO endast i "access projekt". Man kan ju använda ADO i Access. Men då finns det två anslutninger till databasen genom två olika databas motorer. Vilket är mycket onödigt. Tusen tack!Stega genom tabell
Hur gör jag för att stega genom en tabell och hämta ett värde från varje post?
Jag har gjort en dold listruta som jag fyller med innehåll, markerar alla rader, och kör "for each item in itemsselected". Men jag skulle vilja hämta direkt från tabellen utan omvägen om listrutan. Finns det något enkelt sätt?Sv: Stega genom tabell
'Gå till första posten
rst.MoveFirst
'Går från start till slut
While Not rst.EOF()
MsgBox rst("Mittvärde")
rst.MoveNext
WEnd
Mvh, Janne
Sv: Stega genom tabell
<code>
Do Until rst.EOF
'Det du vill göra med varje post
rst.MoveNext
Loop
</code>
Om du vill göra en MoveFirst, vilket ofta är helt onödigt. Bör du först kolla om det finns poster:
<code>
If rst.BOF And rst.EOF Then
'Inga poster. Inget behov att göra något
Else
rst.MoveFirst
Do Until rst.EOF
'Det du vill göra med varje post
rst.MoveNext
Loop
End If
</code>
Om inga poster finns så kan ju ingen vissas. Det är som at fråga efter färgen på den första bilen jag äget om jag aldrig ägt en bil. Sv: Stega genom tabell
Själva stegandet har jag kläm på. Det jag behöver hjälp med är att koppla "rst" till en tabell i aktuell databas. Jag kan koppla ett recordset från ett formulär, men har inte lyckats koppla en tabell direkt. Hoppas jag uttrycker mig rätt.Sv: Stega genom tabell
Sub TestaRst()
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "Tabell1", CurrentProject.Connection, adOpenForwardOnly, _
adLockReadOnly, adCmdTableDirect
Do While Not rst.EOF
MsgBox rst("MittTal")
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
End Sub
Detta öppnar och stegar igenom ett skrivskyddat recordset som innehåller allt i tabellen "Tabell1" i aktuell databas. Sedan beror det ju på vad du vill göra. Om du vill ändra i posterna ska du ju inte öppna med skrivskydd. Vill du bara ha vissa poster kanske du bör basera recordsetet på en fråga istället för på hela tabellen.
Koden ovan använder ADO, om du har en äldre version av Access kanske du behöver använda DAO istället.Sv: Stega genom tabell
I DAO öppnar du ett recordset så här:
<code>
Private Sub Kommandoknapp2_Click()
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb()
Set rs = db.OpenRecordset("Customer", dbOpenForwardOnly)
Do Until rs.EOF
rs.MoveNext
Loop
rs.Close
db.Close
End Sub
</code>
Det finns även möjlighet att komunicera med ett formulärs recordset:
<code>
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
If rs.BOF And rs.EOF Then
Else
rs.MoveFirst
Do
Debug.Print rs(0)
rs.MoveNext
Loop Until rs.EOF
End If
rs.Close
</code>
Me.RecordsetClone navigerar inte aktuell post medans Me.Recordset gör det. Sv: Stega genom tabell
Det var precis den knuffen jag behövde för att ramla över mållinjen.
Må solen lysa på er!
/Håkan