updaten recordset na toevoegen record

  • Onderwerp starter Onderwerp starter RB85
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

RB85

Gebruiker
Lid geworden
4 jun 2010
Berichten
55
Goedemiddag,

Ik heb een probleem met het updaten van een recordset. Ik heb het onderstaande formulier:

xek7pu.png


Dit is een formulier met een subformulier. Middels de twee dropdown menu's is het mogelijk een record te kiezen. Het probleem doet zich voor bij de tweede dropdown list, dus het onderste gedeelte van het formulier. Wanneer ik op de knop nieuw record druk zou moet een record worden toegevoegd. De velden worden geleegd, alleen de waarde in het dropdown menu blijft staan. Ook nadat ik alle gegevens ingevoerd heb blijven deze staan en wanneer ik dan op Print Storing druk geeft hij me nog de gegevens van de vorige storing (dus die met de waarde uit het dropdown menu). Op dit moment heb ik het opgelost door een update event aan te roepen wanneer het eerste veld gewijzigd wordt, maar ik wil dit eigenlijk toch ook een mooiere manier gedaan krijgen. Het grootste probleem met de huidige manier van updaten is dat zodra ik de update gedaan heb de recordset weer naar het eerste record gaat. Ook dit is wel weer terug te zetten maar het wordt er allemaal niet mooier op.

Heeft iemand misschien een manier hoe ik zoiets het beste aan kan pakken? Alvast bedankt.
 
Doet het subformulier het wel goed als je de tweede keuzelijst vervangt door een gewoon tekstvak, en je daar het ID veld handmatig invult?
 
Doet het subformulier het wel goed als je de tweede keuzelijst vervangt door een gewoon tekstvak, en je daar het ID veld handmatig invult?

Als ik een tekstvak toevoeg kan ik hierin het ID niet veranderen terwijl deze niet vergrendeld is. Maar ook als ik hier op Nieuw record druk, verschijnt in het tekstvlak ID wel <Nieuw> en krijgt hij een nieuw ID zodra ik ergens iets invul. Alleen wanneer ik nu op Print Storing druk wordt nog steeds het oude record getoond.

Edit: Zie dat dat mijn eigen fout is. Komt doordat ik in query voor het rapport kijk naar de waarde van dit veld. Zal even uit moeten zoeken hoe ik naar een waarde van de huidige recordset kan kijken in een SQL query..

Edit2: Dit is dus inderdaad gelukt, echter heb ik nog 1 probleempje. Wanneer ik nu een record toevoeg wordt in het rapport alle informatie wel goed weergegeven. Ook in de tekstbox met het ID staat nu de goede ID. Alleen in de keuzelijst wordt het ID nog niet geupdate. Ook na een requery krijg ik de waarde nog niet te zien in het keuzeveld. Om deze wel in de lijst te krijgen moet ik het hele formulier een requery geven, wat resulteerd dat ook weer naar het eerste record gegaan wordt. Zodra dit opgelost is ben ik helemaal tevreden. Heb jij enig idee hoe ik dit voor elkaar krijg?
 
Laatst bewerkt:
Wat gebruik je als bron voor de keuzelijst? Als het tekstveld wèl goed werkt, dan zou ik het tekstveld gebruiken, en via <Opmaak>, <Wijzigen in> er een Keuzelijst van maken. Die doet het dan namelijk ook goed... Vervolgens maak je dan de Recordbron opnieuw aan. Het probleem zou kunnen zitten in de Besturingselementbron van de keuzelijst, of in de Recordbron.
 
Wat gebruik je als bron voor de keuzelijst? Als het tekstveld wèl goed werkt, dan zou ik het tekstveld gebruiken, en via <Opmaak>, <Wijzigen in> er een Keuzelijst van maken. Die doet het dan namelijk ook goed... Vervolgens maak je dan de Recordbron opnieuw aan. Het probleem zou kunnen zitten in de Besturingselementbron van de keuzelijst, of in de Recordbron.

Ik maak gebruik van de volgende gegevensbron voor de keuzelijst

Code:
SELECT Tbl_Storing.ID_storing, Tbl_Storing.startdatum, Tbl_Storing.omschrijving FROM Tbl_Storing 
WHERE (((Tbl_Storing.ID_equipment)=[Forms]![Frm_Main]![Sub_Equipment].[Form]![tekstIDequipment]));

Ik heb voorheen al eerder geprobeerd om via opmaak -> wijzigen in, een tekstbox te wijzigen in een keuzelijst. Dit heeft echter geen resultaat. De problemen blijven hetzelfde. Ik heb de keuzelijst via de wizard zo ingesteld dat het via deze keuzelijst mogelijk is om door de records te bladeren. Het lijkt er op dat het niet mogelijk is om de keuzelijst informatie te laten zien, en deze tegelijkertijd te gebruiken om door records te lopen. Alleen lijkt me dit heel onwaarschijnlijk.
 
Dat is uiteraard ook heel onwaarschijnlijk ;) Waarom gebruik je een filter op de keuzelijst?
 
Dat is uiteraard ook heel onwaarschijnlijk ;) Waarom gebruik je een filter op de keuzelijst?

De gegevens van de onderste keuzelijst zijn afhankelijk van de gegevens van de bovenste keuzelijst. Maar als ik daar zo over nadenk is het niet nodig om een filter in te stellen aangezien ik het subformulier gewoon gekoppeld heb. Of zie ik dit verkeerd?
 
Dat hangt er maar vanaf hoe je het tweede formulier gebuikt. Normaal is het zo, dat je een subformulier koppelt aan het Sleutelveld op het Hoofdformulier. Van een Klant zie je dan bijvoorbeeld in het Hoofdformulier de klantgegevens, en in het subformulier zie je dan de bestellingen. In de tabel Bestellingen heb je dan uiteraard wel een veld KlantID nodig om te koppelen.
Omdat je op een gegeven moment in de draad vermeld dat je wel de waarde Nieuw ziet in het ID veld, vermoed ik dat je niet koppelt op een veld in de hoofdtabel, maar de keuzelijst baseert op het sleutelveld uit het subformulier. Dat is een situatie die nooit gaat werken, want ik neem aan dat het Subformulier niet is gelinkt op een één-op-één basis aan het hoofdformulier. Ook vermoed ik dat het ID veld een Autonummerveld is.
 
Dat hangt er maar vanaf hoe je het tweede formulier gebuikt. Normaal is het zo, dat je een subformulier koppelt aan het Sleutelveld op het Hoofdformulier. Van een Klant zie je dan bijvoorbeeld in het Hoofdformulier de klantgegevens, en in het subformulier zie je dan de bestellingen. In de tabel Bestellingen heb je dan uiteraard wel een veld KlantID nodig om te koppelen.
Omdat je op een gegeven moment in de draad vermeld dat je wel de waarde Nieuw ziet in het ID veld, vermoed ik dat je niet koppelt op een veld in de hoofdtabel, maar de keuzelijst baseert op het sleutelveld uit het subformulier. Dat is een situatie die nooit gaat werken, want ik neem aan dat het Subformulier niet is gelinkt op een één-op-één basis aan het hoofdformulier. Ook vermoed ik dat het ID veld een Autonummerveld is.

Ik heb het nagekeken. Het Subformulier zit wel gekoppeld aan het hoofdformulier en heb het filter dus ook gewoon zonder problemen kunnen verwijderen. het subformulier is gelinkt middels een een-op-veel relatie. Het ID veld is inderdaad wel een autonummer veld.

Situatie is dus als volgt:

Het hoofdveld bevat een aantal records (Equipments). Ieder van deze records bevat een aantal subrecords (Storingen).

Het hoofdveld ID_Equipment zit gekoppeld aan het subveld ID_Equipment van het subformulier. Wanneer ik op het hoofdformulier een equipment selecteer, is het mogelijk om met de keuzelijst op het subformulier door alle storingen bij de zojuist geselecteerde equipment te bladeren.

Tot zover werkt het ook. Enige probleem is nog dat wanneer ik een nieuwe storing maak voor een equipment, het ID_Storing (Autonummering) niet mee veranderd en op de storing blijft staat die hiervoor geselecteerd was. Ook in de keuzelijst is de nieuwe waarde niet terug te vinden.

Ik hoop dat het zo duidelijk is wat ik probeer te bereiken..
 
Als ik het zo lees, mag het veld StoringID ook helemaal niet veranderen...
Enige probleem is nog dat wanneer ik een nieuwe storing maak voor een equipment, het ID_Storing (Autonummering) niet mee veranderd en op de storing blijft staat die hiervoor geselecteerd was. Ook in de keuzelijst is de nieuwe waarde niet terug te vinden.

Waarom wil je überhaupt het ID_Storing kunnen kiezen/veranderen? Als je een nieuwe storing toevoegt, wordt er automatisch een ID_Storing ingevuld; het is immers een Autonummerveld. Dus a) hoef je het zelf niet in te vullen en b) is het ook nog eens veel beter om het veld uit te schakelen, om te voorkomen dat er per ongeluk mee geknoeid wordt. Dus: tekstveld van maken, en de eigenschappen <Ingeschakeld> op Nee, en <Vergrendeld> op Ja. Daarmee is het veld onbereikbaar voor muis en toetsenbord.
 
Als ik het zo lees, mag het veld StoringID ook helemaal niet veranderen...


Waarom wil je überhaupt het ID_Storing kunnen kiezen/veranderen? Als je een nieuwe storing toevoegt, wordt er automatisch een ID_Storing ingevuld; het is immers een Autonummerveld. Dus a) hoef je het zelf niet in te vullen en b) is het ook nog eens veel beter om het veld uit te schakelen, om te voorkomen dat er per ongeluk mee geknoeid wordt. Dus: tekstveld van maken, en de eigenschappen <Ingeschakeld> op Nee, en <Vergrendeld> op Ja. Daarmee is het veld onbereikbaar voor muis en toetsenbord.

Ik wil de ID_Storing niet kunnen veranderen. Het blijft autonummering. Maar ik gebruik de keuzelijst voor recordnavigatie. Zodra ik iets anders invul daar, wordt dus naar het betreffende record genavigeerd. Ik kan je eventueel het bestand toevoegen dan kun je zien wat ik bedoel.

Het ID_Storing wordt dus automatisch toegekend. En alle aanwezige ID's staan in de keuzelijst zodat ik door daar te kiezen de betreffende storing kan kiezen. Werkt goed tot nu toe, alleen niet wanneer ik een nieuwe record toevoeg.
 
Je haalt twee zaken door elkaar; en dat levert dus het probleem op wat je nu hebt. Een keuzelijst om een record op te zoeken maakt een kloon van de recordset van het formulier. Meestal zet je zo'n keuzelijst in de koptekst, om snel een klant o.i.d. te kunnen vinden. De keuzelijst is dan nooit verbonden aan een veld, omdat je uiteraard niet de gegevens van een record wilt veranderen; je wilt het record slechts opzoeken.
Jij wilt een keuzelijst maken op een veld in je formulier. Daarmee verander je dus de gegevens, i.p.v. dat je iets opzoekt. En het hoeft ook helemaal niet, want je subformulier is gekoppeld aan je hoofdformulier, dus je ziet toch al alleen de records die bij het hoofdformulier horen. Dus verder zoeken is nauwelijks zinvol, tenzij het om duizenden records gaat. En dan nog: wat heeft het voor nut om een bestaand record te gebruiken voor een nieuw record? Je kunt dan beter een knop maken waarmee je op basis van een bestaand record een nieuwe maakt, door de gegevens te kopieëren.
Dus, samenvattend: je hoofdformulier en subformulier zijn gekoppeld op basis van het veld ID_Equipment. Het veld ID is een Autnummerveld, en wordt vanzelf gevuld als je een nieuw record maakt. Als je op een Equipment record in het hoofdformulier een record in het subformulier wilt opzoeken, dan gebruik je een niet-gebonden keuzelijst in de koptekst van dat subformulier. Op het subformulier gebruik je alleen keuzelijsten die zijn gekoppeld aan een veld in de bron van het subformulier, wat je waarschijnlijk bij het veld Soort hebt gedaan. Ik neem aan, dat je met die keuzelijst een soort opzoekt in de tabel tblSoort, en waarvan je de ID waarde opslaat in je subformulier. En zo hoor je dat ook te gebruiken.
De Keuzelijst voor het veld ID is dus absoluut niet nodig, en zal nooit goed gaan werken...
 
Allereerst excuses voor de late reactie. Heb een paar dagen niet kunnen werken aan mn tool.

Ik heb de tool even op internet gezet. Als je wil kun je daar even kijken zodat je ziet wat ik precies bedoel.

http://www.megaupload.com/?d=GEXW289D
ww= helpmij

Heb het probleem nu even opgelost door wat code onder het onderwerp veld te zetten, maar dit is niet echt een mooie oplossing.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan