När jag vill backa i mitt rcordset  Hej Antar att du har öppnat Recordset adOpenForwardOnly. Ändra till adOpenStatic så bör det fungera. I så fall är det inte något jag medvetet gjort. Jag har varken den ena eller den andra koden någonstans. Är det nåt ställe med inställningar man bockar i? conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=//101.0.0.3/databaser/Fastighet.mdb;uid=Admin"  Njaej, jag är intresserad av att veta hur din kod ser ut från att du deklarerar ditt recordset (inte connection alltså) tills du öppnar det. Om du t.ex öppnar den med execute. Ex: Detta var mycket interessant. Jag hade ingen aning om att det fanns olika cursertyper och jag har inte i min kod satt tillexempel ForwardOnly. Är det så att om man inte sätter något alls att denna typ blir default? Jag inte tillgång till koden här men först deklarer jag en ADODB.Connection och en ADODB.Recordset Har gjort ett litet exempel som kanske hjälper: Att använda tabell i Word är alldeles säker bättre, bara jag visste hur man får över data från mitt recordset på rätt plats i tabellen. Jag vill ha namn och adress utskrivet på på samma sätt som när man gör etiketter. Det är nog lättare att göra en MailMerge. Men om du vill fortsätta med vb varianten så har jag gjort om exemplet till att använda en tabell: Detta var mycket intressant och är nog vad jag behöver. När jag lagt in koden i mitt program får jag ett felmeddelande "Object required" på radSet Table = Doc.Tables.Add(Doc.Range, 1, 2)MoveLast
    
    
rsSokning.MoveLast
får jag meddelandet att "Raduppsättningen stöder inte hämtning bakåt"
Vad kan jag göra åt detta?Sv: MoveLast
    
    
Det var "lurigt".
Du kan inte göra MoveLast om det är ett tomt recordset.
Men annars vet i fae.........
mvh
SvenSv: MoveLast
    
    Sv: MoveLast
    
    Sv: MoveLast
    
    Sv: MoveLast
    
    Sv: MoveLast
    
    
    Set rsTemp = conn.Execute("SELECT * FROM Customers")
Har för mig att ADO har som standard att öppna recordsetet som
Så använder sig ADO av den effektiva recordset typen forwardonly-readonly. Har för mig att dena typ av cursor även kallas firehoose...
Jag rekommendrerar dig att sätta dig i i det olika typerna av cursors som finns.
Liten snabb summering av ADO(Klippt det ur MSDN):
CursorType:
adOpenForwardOnly
    (Default) Opens a forward-only–type cursor.
    Resurs snålaste varianten av cursor eftersom cursor information för navigering behövs.
adOpenKeyset
    Opens a keyset-type cursor.
    Håller reda på dina förändringar och de förändringar som är gjorda på poster som existerar i recordsetet. 
adOpenDynamic 
    Opens a dynamic-type cursor.
    Kan även se poster som andra användare laggt till. Kräver mest resurser.
adOpenStatic 
    Opens a static-type cursor.
    Hämtar informationen som en polaroid bild ungefär. Ser inga förändringar.
LockType:
adLockReadOnly 
    (Default) Read-only—you cannot alter the data. 
adLockPessimistic 
    Pessimistic locking, record by record—the provider does what is necessary to ensure successful editing of the records, 
    usually by locking records at the data source immediately upon editing. 
adLockOptimistic 
    Optimistic locking, record by record—the provider uses optimistic locking, locking records only when you call the Update method. 
adLockBatchOptimistic 
    Optimistic batch updates—required for batch update mode as opposed to immediate update mode. 
Om du inte ska updaterar recordsettet utan bara navigera kan du använda följande sats:
    rsTemp.Open "SELECT * FROM Customers", conn, adOpenStatic, adLockReadOnly
Skall du även redigera:
    rsTemp.Open "SELECT * FROM Customers", conn, adOpenKeyset, adLockOptimistic 
Finns ofta många sätt för att slippa navigera genom ett recordset efter som det inte är så effektivt.
Om du ändå väljer att navigera genom ditt recordset. Kan det i vissa fall vara effektivare att hämta hela recordsetet eller åtminstonde hela cursor informationen. Eller helt enkelt använda ett Disconnected recordset. Detta gör du med CursorLocation egenskapen.
    rsTemp.CursorLocation = adUseClient
    rsTemp.Open "SELECT * FROM Customers", conn, adOpenStatic, adLockReadOnly
För att göra det Disconnected lägger du även till:
   Set rsTemp.ActiveConnection = Nothing
Finns mycket att sätta sig in i. Men förhoppningsvis har du fått en lite mer information om ADO.Sv: MoveLast
    
    Sv: MoveLast
    
    
I en subrutin öppnar jag Connection och sedan kommer en SQL som exekceras med 
Set rs = conn.Execute(SQL)
Därefter 
rs.MoveFirst
Jag skriver så ut data till Word som jag deklareat i subrutinen 
Dim D As Word.Document
Set W = CreateObject("Word.Application")
Set D = W.Documents.Add
While Not rs.EOF
If Not IsNull(rs.Fields("NAMN").Value) Then 
    W.Selection.TypeText rs.Fields("NAMN").Value 
End If
W.Selection.TypeText ("  ")
rs.MoveNext
If Not IsNull(rs.Fields("NAMN").Value) Then 
    W.Selection.TypeText rs.Fields("NAMN").Value 
End If
W.Selection.TypeText (vbCrLf)
rs.MoveLast
If Not IsNull(rs.Fields("ADRESS").Value) Then 
    W.Selection.TypeText rs.Fields("ADRESS").Value 
End If
W.Selection.TypeText ("  ")
rs.MoveNext
If Not IsNull(rs.Fields("ADRESS").Value) Then 
    W.Selection.TypeText rs.Fields("ADRESS").Value 
End If
rs.MoveNext
Wend
Jag önskar (med min kanske dåliga lösning) skriva första postens NAMN, ett mellanrum, andra postens NAMN, ny rad, första postens ADRESS, mellanslag, anrdra postens ADRESS, ny rad, tredje postens NAMN osv...
Men det funkar alltså inte med MoveLastSv: MoveLast
    
    
Form: Form1
* Lägg till en CommandButton
--------------------------------------------------------
Option Explicit
Private Sub Command1_Click()
Dim W As Word.Application
Dim Doc As Word.Document
Dim sTemp As String
Dim BreakRow As Boolean
Dim rs As ADODB.Recordset
Dim fldNAMN As ADODB.Field
Dim fldADRESS As ADODB.Field
    Set W = CreateObject("Word.Application")
    Set Doc = W.Documents.Add
    Set rs = GetRecordset()
    Set fldNAMN = rs("NAMN")
    Set fldADRESS = rs("ADRESS")
    Do Until rs.EOF
        If BreakRow Then
            Doc.Range.InsertAfter "  " & fldNAMN.Value & vbCrLf & _
                                  sTemp & "  " & fldADRESS.Value & vbCrLf
            sTemp = ""
        Else
            Doc.Range.InsertAfter fldNAMN.Value
            sTemp = "" & fldADRESS.Value
        End If
            
        BreakRow = Not BreakRow
        rs.MoveNext
    Loop
    If Len(sTemp) Then
        Doc.Range.InsertAfter vbCrLf & _
                              sTemp & vbCrLf
    End If
    
    W.Visible = True
End Sub
Private Function GetRecordset() As ADODB.Recordset
    Set GetRecordset = New ADODB.Recordset
    With GetRecordset
        With .Fields
            .Append "NAMN", adVarChar, 20
            .Append "ADRESS", adVarChar, 20
        End With
        
        .Open
        .AddNew Array("NAMN", "ADRESS"), Array("Adam", "Norrlandsvägen 5")
        .AddNew Array("NAMN", "ADRESS"), Array("Bengt", "Storavägen 15")
        .AddNew Array("NAMN", "ADRESS"), Array("Charlie", "Hamngatan 13")
        .MoveFirst
    End With
End Function
--------------------------------------------------------
Vore det inte lättare att använda sig av en tabell i word dokumentet?Sv: MoveLast
    
    Sv: MoveLast
    
    
Private Sub Command2_Click()
Dim W As Word.Application
Dim Doc As Word.Document
Dim Table As Word.Table
Dim Row As Long
Dim Column As Long
Const Columns = 2
Dim rs As ADODB.Recordset
Dim fldNAMN As ADODB.Field
Dim fldADRESS As ADODB.Field
    Set W = CreateObject("Word.Application")
    Set Doc = W.Documents.Add
    
    Set rs = GetRecordset()
    If rs.BOF And rs.EOF Then
        MsgBox "Data saknas"
    Else
        Set fldNAMN = rs("NAMN")
        Set fldADRESS = rs("ADRESS")
        Set Table = Doc.Tables.Add(Doc.Range, 1, 2)
        Row = 1
        
    
        Do Until rs.EOF
            Column = Column + 1
            If Column > Columns Then
                Column = 1
                Row = Row + 1
                Table.Rows.Add
            End If
            Table.Cell(Row, Column).Range.InsertAfter fldNAMN.Value & vbCrLf & fldADRESS
            
            rs.MoveNext
        Loop
    
        W.Visible = True
    End If
End SubSv: MoveLast
    
    
Kan man styra var på pappret den högra kolumnen skal börja?