Toon posts:

[vb] 3 tabbellen gekoppeld met .Find

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een aardig groot probleem en ik kom er niet uit. Ben de hele dag wezen debuggen en dergelijke, maar nee hoor, kan er niet uitkomen. Heeft iemand een idee hoe ik zoiets kan oplossen?

Ik heb 3 tabbelen. Ieder tabel heeft een persoonsnummer en versienummer. Ik maak gebruik van een SSTab1 waar 3 tabs onderverdeeld staan waar elk een tabbel in staat.

Als ik naar de volgende tab ga, gebruik ik de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Static zoekactie As String
Static zoekversie As String
zoekactie = txtPersoonsnummer.Text
zoekversie = txtVersienummer.Text
rsTabel2.MoveFirst
rsTabel2.Find ("Persoonsnummer = ") & zoekactie
rsTabel2.Find ("Versienummer = ") & zoekversie
rsTabel3.MoveFirst
rsTabel3.Find ("Persoonsnummer = ") & zoekactie
rsTabel3.Find ("Versienummer = ") & zoekversie
rsTabel1.MoveFirst
rsTabel1.Find ("Persoonsnummer = ") & zoekactie
rsTabel1.Find ("Versienummer = ") & zoekversie
If SSTab1.Tab = 0 Then readrecord 'sub aanroep
If SSTab1.Tab = 1 Then readrecord1 'zoekt gegevens bij persoon
If SSTab1.Tab = 2 Then readrecord2


De readrecords zijn gewoon GetValues voor tekstvakken te vullen.
Waarom gebruik ik dit script? Als ik naar 'volgende' of 'vorige' ga dan zoekt hij de juiste gegevens bij de persoon met de juiste versie.
Maar als ik iets wijzig en ga naar de volgende tab (tab2), en weer terug (tab1), dan gaat hij natuurlijk weer door dat script heen en gooit hij de oude gegevens er weer in.
Ik kan geen oplossing bedenken hoe ik dit moet oplossen....

Maak gebruik trouwens van een Access Database

Weet wie het?

Alvast bedankt _/-\o_

zet de volgende keer aub zelf [code=vb] om je code...

[ Voor 8% gewijzigd door curry684 op 26-09-2003 21:15 ]


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

Static zoekactie As String
Static zoekversie As String

Dat is sowieso nutteloos. Dat kan gewoon Dim worden. :)

Ten tweede, je bedoeld dus dat als je in Tab 1 bijv iets veranderd, dan naar Tab 2 gaat, en dan weer naar tab1, de oude waarde er weer staat? :) Lijkt me dat je ergens .Update en .Refresh moet gebruiken om de gewijzigde gegevens in de database te bewaren (zodat als je de tab verandert de geupdate gegevens worden "geladen"...)

Verwijderd

Topicstarter
Was dat maar zo makkelijk;)
Ik wil dat er alleen gesaved wordt wanneer ik op mijn 'save' knopje klik.
Maar er moeten dus ook dingen tijdelijk gesaved worden...
Ik heb ook nog een 'save as' knop, maar die weet ik wel werkend te krijgen denk ik als mijn 'save' knop het doet....

Verwijderd

Kijk eens hoe je de recordset geopend hebt:
rsTabel1.open [SQL],[conn], [CURSORTYPE],...
Het hangt van Cursortype af wat de data in je rsTabel1 voorstelt. Ik weet niet precies welke waarde wat doet, maar ik dacht bijvoorbeeld dat [adOpenKeyset] ervoor zorgt dat de data altijd hetzelfde blijft vanaf het moment dat je de recordset opent. Dus ook als je veranderingen uitvoert aan de originele tabel zal jouw rsTabel1 nog steeds er zo uitzien als op het moment je .open aangeroepen hebt. Ik dacht dat openen met adOpenDynamic ervoor zorgt dat je wel de huidige dataset krijgt.
Zorg in ieder geval ook voor een .update als je data hebt gewijzigd.

Wat ik niet snap is wat je doet met
rsTabel2.Find ("Persoonsnummer = ") & zoekactie
rsTabel2.Find ("Versienummer = ") & zoekversie
Dit zijn 2 totaal onafhankelijke zoekfuncties; de tweede maakt de eerste nutteloos. Als je wil zoeken op EN zoekactie EN zoekversie dan moet je iets doen als .Find "Persoonsnummer = bla AND versienummer = BLA"
Die kromme haken () kunnen ook weg, en movefirst hoeft ook niet omdat find default bij de eerste record begint.

Verwijderd

Topicstarter
Ah, ik zal maandag even testen met die cursortype... Hopelijk zat daar het probleem in. Die find die werkt op beide op 1 of andere manier. Ik zal dat nog wel even uitgebreid testen, en anders gebruik ik dat stukje van jou wel:) Bedankt alvast. Je hoort nog oft werkt....:)

Verwijderd

Topicstarter
Ok, mijn probleem is opgelost:D Maar Sjoerd, wat je zei, heb je gelijk in...
Over die .Find...
Nu heb ik dat veranderd in wat jij zei...
Ik heb nu dus:
[code=vb]
Dim zoekactie As String
Dim zoekversie As String
zoekactie = txtPersoonsnummer.Text
zoekversie = txtVersienummer.Text
rsGegevenspersoon.Find "Leerlingen = " & zoekactie & " AND versienummer = " & zoekversie & """"
[code=vb]

Als ik hem door de immediate haal krijg ik gewoon een normale statement, zoals:
Persoonsnummer = 12345 AND versienummer = 1

Toch krijg ik de foutmelding:
De argumenten zijn van het verkeerde type, vallen buiten het toegestane bereik of zijn in conflict met elkaar

Hoe kan dat??

[ Voor 6% gewijzigd door Verwijderd op 29-09-2003 12:05 ]

Pagina: 1