Avatar billede skwat Praktikant
17. september 2002 - 12:06 Der er 22 kommentarer og
1 løsning

.MoveNext og .MovePrevious

Hej Guru'er
Jeg har et problem, jeg har et recordset som jeg i min kode har behov for at bladre i mellem.
.Movenext virker fint, men når jeg forsøger at .moveprevious for jeg at vide at det ikke er muligt i denne sammenhæng.

Er der nogen der kan forklare sammenhængen?

Databasen er Access, og jeg bruger ADO til at lave min forbindelse.

./Skwat
Avatar billede medions Nybegynder
17. september 2002 - 12:08 #1
Jamen hvad er det du vil gøre da? (jeg har aldrig i mine 5 år været ude for at skulle bruge MovePrevious() )

Men prøv at vis mig din kode og fortæl mig hvad du vil, så kigger jeg på det.

//>Rune
Avatar billede medions Nybegynder
17. september 2002 - 12:09 #2
Tror nu du er ude efter denne:

While objRs.EOF
  MsgBox(objRs("felt"))
objRs.MoveNext()
Next

Am i right?

//>Rune
Avatar billede terry Ekspert
17. september 2002 - 12:12 #3
Move to the first, last, next, or previous record in a specified Recordset object and make that record the current record.

Syntax

recordset.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}

The recordset placeholder is an object variable that represents an open Recordset object.

Remarks

Use the Move methods to move from record to record without applying a condition.

Caution If you edit the current record, be sure you use the Update method to save the changes before you move to another record. If you move to another record without updating, your changes are lost without warning.

When you open a Recordset, the first record is current and the BOF property is False. If the Recordset contains no records, the BOF property is True, and there is no current record.

If the first or last record is already current when you use MoveFirst or MoveLast, the current record doesn't change.

If you use MovePrevious when the first record is current, the BOF property is True, and there is no current record. If you use MovePrevious again, an error occurs, and BOF remains True.

If you use MoveNext when the last record is current, the EOF property is True, and there is no current record. If you use MoveNext again, an error occurs, and EOF remains True.

If recordset refers to a table-type Recordset (Microsoft Jet workspaces only), movement follows the current index. You can set the current index by using the Index property. If you don't set the current index, the order of returned records is undefined.

Important  You can use the MoveLast method to fully populate a dynaset- or snapshot-type Recordset to provide the current number of records in the Recordset. However, if you use MoveLast in this way, you can slow down your application's performance. You should only use MoveLast to get a record count if it is absolutely necessary to obtain an accurate record count on a newly opened Recordset. If you use the dbRunAsync constant with MoveLast, the method call is asynchronous. You can use the StillExecuting property to determine when the Recordset is fully populated, and you can use the Cancel method to terminate execution of the asynchronous MoveLast method call.

You can't use the MoveFirst, MoveLast, and MovePrevious methods on a forward-only–type Recordset object.

To move the position of the current record in a Recordset object a specific number of records forward or backward, use the Move method.
Avatar billede -mundi- Nybegynder
17. september 2002 - 12:16 #4
så vidt jeg husker skal man oprette et adodb.recordset object for at bruge movePrev , og ikke bare br=conn.execute(SQL)
Avatar billede bennytordrup Nybegynder
17. september 2002 - 12:18 #5
-mundi- har ret. Hvis du bruger br=conn.execute(sql), så får du et "fire-hose" recordset. Det supporterer kun movenext og movelast.
Avatar billede skwat Praktikant
17. september 2002 - 12:36 #7
medions: Jeg har behov for at bladre tilbage og frem i mit recordset.

Okay det vil sige at hvis jeg har

dim SmartRecordset as recordset
set SmartRecordset = adoconn.execute "select * from Strotabel"

så vil recordset.movenext virke men ikke recordset.moveprevious
Men hvis jeg skriver dim SmartRecordset as adodb.recordset burde det virke? (hvis ja så virker det ikke)

lidt kode:
I keypress evented på en textbox(Bruges til at brugeren skal bladre til han har fundet det han søger.

    Select Case KeyCode
        Case 119 'F8
            With localDBclass
                .RecivRecordset.MoveNext
            End With
        Case 120 'F9
            With localDBclass
                .RecivRecordset.MovePrevious
            End With

        Case Else
   
      End Select

I min klasse har jeg:
    ’under option explicit
  Dim LocalDBcon As New Connection
  Public RecivRecordset As ADODB.Recordset

    Den function der definere recordsettet
    Set RecivRecordset = LocalDBcon.Execute("select * from table")


    LocalDBcon.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\system.mdb"
Avatar billede bennytordrup Nybegynder
17. september 2002 - 12:39 #8
dim SmartRecordset as recordset
with SmartRecordset
  .cursortype = adOpenKeyset
  .locktype = adLockReadOnly (adLockOptimistic, hvis der skal redigeres)

  .open "select * from Strotabel"
end with
Avatar billede -mundi- Nybegynder
17. september 2002 - 12:41 #9
Dim SmartRecordset As New ADODB.Recordset sådan der skulle det gerne virke

det er dog lidt tid siden jeg har rodet med VB så bær over med mmig hvis der er syntaxfejl :-)
Avatar billede bennytordrup Nybegynder
17. september 2002 - 12:42 #10
.open "select * from Strotabel", <Connection>
Avatar billede bennytordrup Nybegynder
17. september 2002 - 12:42 #11
Ja, eller

set SmartRecordset = new recordset

umiddelbart inden, det skal bruges.
Avatar billede skwat Praktikant
17. september 2002 - 12:44 #12
Benny: jeg får runtime error 91 på .cursortype = adOpenKeyset
Avatar billede bennytordrup Nybegynder
17. september 2002 - 12:49 #13
Prøv

<Snip>
dim SmartRecordset as recordset
set SmartRecordset = new ADODB.recordset
with SmartRecordset
  .cursortype = adOpenKeyset
  .locktype = adLockReadOnly (adLockOptimistic, hvis der skal redigeres)

  .open "select * from Strotabel"
end with
</Snip>
Avatar billede skwat Praktikant
17. september 2002 - 13:22 #14
benny: det virker ikke desvære
Avatar billede bennytordrup Nybegynder
17. september 2002 - 13:23 #15
Post din kode
Avatar billede skwat Praktikant
17. september 2002 - 14:18 #16
Kommentar: skwat
17/09-2002 12:36:57
Avatar billede bennytordrup Nybegynder
17. september 2002 - 14:19 #17
Que?
Avatar billede skwat Praktikant
17. september 2002 - 14:22 #18
har kun lavet funktionen om til:

Dim LocalDBcon As New ADODB.Connection
LocalDBcon.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\system.mdb"

Public SmartRecordset As New ADODB.Recordset
SmartRecordset.CursorType = adOpenKeyset
SmartRecordset.LockType = adLockReadOnly
Set SmartRecordset = LocalDBcon.Execute("select * from Reciver where Zipcode = '" & ZipCode & "' and Adr1 like '" & RecivStreet & "%'")

MoveNext virker men MovePri. virker ikke
Avatar billede bennytordrup Nybegynder
17. september 2002 - 14:53 #19
Du skal IKKE bruge localdbcon.execute til at åbne recordsettet. Du SKAL bruge SmartRecordset.Open!
Avatar billede skwat Praktikant
17. september 2002 - 14:58 #20
benny: okay, men hvordan sætter jeg hvilken DB den skal kigge i så?
Avatar billede bennytordrup Nybegynder
17. september 2002 - 15:17 #21
Dim LocalDBcon As New ADODB.Connection
LocalDBcon.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\system.mdb"

Public SmartRecordset As New ADODB.Recordset
SmartRecordset.CursorType = adOpenKeyset
SmartRecordset.LockType = adLockReadOnly
SmartRecordset.Open "select * from Reciver where Zipcode = '" & ZipCode & "' and Adr1 like '" & RecivStreet & "%'", LocalDBCon
Avatar billede skwat Praktikant
17. september 2002 - 15:46 #22
TAK for FEDT
Avatar billede skwat Praktikant
17. september 2002 - 20:32 #23
Syntes ellers at den del så meget optional ud
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester