[Access/SQL Server] Recordset.Find vind juiste record niet

Pagina: 1
Acties:

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Topicstarter
Ik ben momenteel bezig met het schrijven van een zoek functie voor een applicatie met een Access XP frontend. De data wordt hierbij opgeslagen in SQL Server 200. Hierbij loop ik tegen het volgende vreemde probleem aan:

Ik gebruik het volgende stukje code om de recordset door te wandelen en een record met het juiste ID te vinden:

code:
1
2
3
4
5
6
7
8
9
Form_frmRelatiePersoon.Recordset.MoveFirst

' tijdelijk hardcoded t.b.v. debugging
Form_frmRelatiePersoon.Recordset.Find "id=4933", , adSearchForward, 1

Form_frmRelatiePersoon.Visible = True

Debug.Print Form_frmRelatiePersoon.RecordsetClone.AbsolutePosition
Debug.Print Form_frmRelatiePersoon.Recordset.AbsolutePosition


Het kan aan mij liggen, maar je zou denken dat Access nu naar het juiste record in de recordset springt. Echter is dit niet zo. Als we naar de 2 Debug.Print's in het Immediate Window kijken zien we de volgende waardes:

code:
1
2
1 '  waarde in RecordsetClone
2454 ' waarde in Recordset


Het bizarre is dat het formulier wat getoond wordt dus ook op het eerste record blijf hangen (degene in RecordsetClone dus). Heeft iemand het idee hoe ik in het formulier het juiste record (zie Recordset) kan tonen? Heb reeds van alles geprobeerd, daarbij dagen bezig geweest en ben nu echt aan het eind van m'n latijn...

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • Lethalis
  • Registratie: April 2002
  • Niet online
De id waarde (identifier ws) hoeft toch niet per se overeen te komen met de record position (absolute positie in recordset)?

Ask yourself if you are happy and then you cease to be.


  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Topicstarter
id verwijst naar het veld id ja ;)

En zoals je hierboven kunt lezen staat het record met id 4933 op positie 2454 in de recordset... alleen laat hij dus op het formulier de eerste (op positie 1 dus) zien - dat bedoel ik dus hierboven duidelijk te maken :)

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Doe mij eens een plezier en lees deze pagina eens nauwkeurig door ;)
Er zal je een boel duidelijk worden.

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Topicstarter
OK,

Ik heb nu deze code:

code:
1
2
3
4
5
6
7
Dim rst As Recordset
Set rst = Form_frmRelatiePersoon.RecordsetClone
rst.Find "id=4933"
Debug.Print rst.EOF
Form_frmRelatiePersoon.bookmark = rst.bookmark
Form_frmRelatiePersoon.Visible = True
rst.Close


Als ik een breakpoint zet op de regel waar de bookmark geset wordt zet, en vervolgens trace vind Access blijkbaar het juiste record. Als ik het automatisch doe verschijnt de volgende melding op het scherm: "Fout 2001 tijdens uitvoeren. U hebt de vorige bewerking geannuleerd.". Lekker vaag weer allemaal 8)7

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • Boss
  • Registratie: September 1999
  • Laatst online: 17:29

Boss

+1 Overgewaardeerd

En als je het zonder de (overbodige) variabele rst doet:
code:
1
2
3
Form_frmRelatiePersoon.RecordsetClone.Find "id=4933"
Form_frmRelatiePersoon.bookmark = Form_frmRelatiePersoon.RecordsetClone.bookmark
Form_frmRelatiePersoon.Visible = True


En nog netter is natuurlijk even controleren op een nomatch:
code:
1
2
3
4
5
6
7
Form_frmRelatiePersoon.RecordsetClone.Find "id=4933"
if not Form_frmRelatiePersoon.RecordsetClone.NoMatch then
  Form_frmRelatiePersoon.bookmark = Form_frmRelatiePersoon.RecordsetClone.bookmark
  Form_frmRelatiePersoon.Visible = True
else
  ' foutmelding
end if

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Topicstarter
Ik wil eerst werkende code, daarna bouw ik het verder uit met errorhandling e.d. ;)

Maar volgens mij heb ik de oorzaak al te pakken: een "ongeopend" formulier :X

Als het formulier reeds visible is, en vervolgens zoek je het record dan vindt Access ook in 1x het juiste record. Als het formulier gesloten is, geopend wordt en je dán op zoek gaat naar het juiste record dan vindt Access helemaal niks. Dus i.p.v. dat je formulieren geheel sluit moet je ze dus blijkbaar hidden of visible maken.

Wat een onzin...

[ Voor 54% gewijzigd door mindcrash op 01-10-2004 11:49 ]

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Beetje offtopic, maar RecordSet.Find is een vrij 'dure' operatie. Kun je niet filteren op de database met een WHERE statement?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Topicstarter
P_de_B schreef op 01 oktober 2004 @ 11:32:
Beetje offtopic, maar RecordSet.Find is een vrij 'dure' operatie. Kun je niet filteren op de database met een WHERE statement?
Dat weet ik, maar de gehele set aan records MOET na het zoeken nog steeds makkelijk beschikbaar zijn voor de user. Een 'gefilterde' recordset maken met SELECT... WHERE is dus niet echt mogelijk volgens mij.

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 14-08 11:59

sopsop

[v] [;,,;] [v]

Je kunt je filter er ook later opzetten, dus op je geopende recordset.

En zo'n filter sloop je er net zo makkelijk af als dat je het erop heb gezet. En dan heb je weer je oude RS.

[ Voor 30% gewijzigd door sopsop op 01-10-2004 13:46 ]

Pagina: 1