Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


MoveLast

Postades av 2001-06-21 16:04:00 - Kjell Andersson, i forum databaser, Tråden har 15 Kommentarer och lästs av 875 personer

När jag vill backa i mitt rcordset
rsSokning.MoveLast
får jag meddelandet att "Raduppsättningen stöder inte hämtning bakåt"
Vad kan jag göra åt detta?


Svara

Sv: MoveLast

Postades av 2001-06-21 16:35:00 - Sven Åke Persson

Hej
Det var "lurigt".
Du kan inte göra MoveLast om det är ett tomt recordset.
Men annars vet i fae.........

mvh
Sven


Svara

Sv: MoveLast

Postades av 2001-06-21 17:29:00 - Christoffer Hedgate

Antar att du har öppnat Recordset adOpenForwardOnly. Ändra till adOpenStatic så bör det fungera.


Svara

Sv: MoveLast

Postades av 2001-06-21 22:32:00 - Kjell Andersson

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?


Svara

Sv: MoveLast

Postades av 2001-06-21 22:33:00 - Kjell Andersson

Det funkar inte heller med Move.Previus


Svara

Sv: MoveLast

Postades av 2001-06-23 19:31:00 - Christoffer Hedgate

Hur öppnar du ditt Recordset då?


Svara

Sv: MoveLast

Postades av 2001-06-24 17:42:00 - Kjell Andersson

conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=//101.0.0.3/databaser/Fastighet.mdb;uid=Admin"


Svara

Sv: MoveLast

Postades av 2001-06-24 23:19:00 - Christoffer Hedgate

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.


Svara

Sv: MoveLast

Postades av 2001-06-25 07:45:00 - Andreas Hillqvist

Om du t.ex öppnar den med execute. Ex:
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.


Svara

Sv: MoveLast

Postades av 2001-06-25 07:49:00 - Kjell Andersson

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?


Svara

Sv: MoveLast

Postades av 2001-06-25 08:13:00 - Kjell Andersson

Jag inte tillgång till koden här men först deklarer jag en ADODB.Connection och en ADODB.Recordset

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 MoveLast


Svara

Sv: MoveLast

Postades av 2001-06-26 10:51:00 - Andreas Hillqvist

Har gjort ett litet exempel som kanske hjälper:

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?


Svara

Sv: MoveLast

Postades av 2001-06-26 16:24:00 - Kjell Andersson

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.


Svara

Sv: MoveLast

Postades av 2001-06-26 18:24:00 - Andreas Hillqvist

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:

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 Sub


Svara

Sv: MoveLast

Postades av 2001-06-27 08:20:00 - Kjell Andersson

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)

Kan man styra var på pappret den högra kolumnen skal börja?


Svara

Nyligen

  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 872
27 965
271 770
622
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies