listbox juiste kolom opslaan

Status
Niet open voor verdere reacties.

VB noob

Gebruiker
Lid geworden
11 feb 2009
Berichten
78
Hoi allemaal,

Ik heb een formulier met (frmSightings) daarop een listbox (lstBehaviour). In deze lijst wordt een waarde geselecteerd die opgeslagen moet worden in de tabel tblSightings.

De waardes van lstBehaviour worden uit tblBehaviour gehaald.

Bij een aantal waarden van lstBehaviour wordt een 2e formulier geopend om aanvullen info op te slaan. Bijv. bij de waarde 'Hunting' wordt het formulier 'Hunting' geopend.

Dit wordt gedaan met behuld van de volgende code:
Code:
Public Sub lstBehaviour_AfterUpdate()
If Me.lstBehaviour.Value = True Then
DoCmd.OpenForm Me.lstBehaviour.Column(2), , , , acFormAdd, , Me.SightingID
End If
End Sub

De tabel tblBehaviour is als volgt opgebouwd:
Kolom: ID - unieke ID van Behaviour
Kolom: OpenForm - Yes/No veld
Kolom: Behaviour - Naam van Behaviour

Als ik in lstBehaviour voor 'Hunting' kies wordt het formulier 'Hunting' geopend, kies ik bijvoorbeeld voor 'Resting' dan niet.
So far so good.

Echter...in de tabel tblSightings wordt alleen 0 of -1 opgeslagen, de waarde uit de Yes/No kolom uit tblBehaviour.
Verander ik de afhankelijke kolom in de eigenschappen van het veld dan krijg ik foutmelding bij het kiezen van een Behaviour waarbij geen formulier moet worden geopend en ook dan wordt alleen 0 of -1 opgeslagen.
Graag zou ik de waardes uit de kolom 'Behaviour' opslaan.
Heb al het een en ander geprobeert (nieuw evenement in bijvoorbeeld 'on exit') maar ik kom er niet uit.

Iemand een idee?
 
Als ik het zo kan bekijken, dan snap ik wel enigszins waarom je keuzelijst niet helemaal doet wat je wil. Jammer genoeg heb je de query die je als Source gebruikt voor de keuzelijst er niet bijgezet, dat zou het probleem (voor mij in ieder geval) wat duidelijker zijn.
Normaal gesproken verwacht ik, dat je het ID opslaat in de tabel Sightings, omdat dat je sleutelwaarde is in Behaviour. Je wilt echter het veld Behaviour opslaan, wat naar ik aanneem een tekstveld is? Op zich hoeft dat geen probleem te zijn, maar ik zou zowiezo het sleutelveld opslaan, zodat je in toekomstige queries altijd de actieve waarde van Behaviour terugkrijgt. In je huidige configuratie krijg je bijvoorbeeld verschillende waarden terug, als je later besluit om de tekst van Behaviour te veranderen. Je slaat dan verschillende begrippen op in de tabel Sightings, die eigenlijk naar hetzelfde record zouden moeten wijzen in Behaviour. Maar het kan uiteraard wel zo, er is in ieder geval geen technische belemmering.

Wat jouw probleem veroorzaakt, is dat je verschillende veldwaarden uit de tabel Behaviour wilt gebruiken om verschillende zaken te regelen, zoals het doorstarten van je formulier. Je kunt maar één veld gebruiken als afhankelijke kolom, dus kolom 2 (OpenForm) is daarvoor niet geschikt. Ik zou dus kiezen voor het veld ID, en de overige informatie in aparte tekstvelden op je formulier weg laten zetten. Je kunt dan bijvoorbeeld met dLookUp de velden Behaviour en OpenForm vullen met de gegevens vanuit je keuzelijst.

Het formulier Hunting kun je laten openen nadat je de bijbehorende waarde hebt laten opzoeken a.d.h.v de ID-Waarde.

Michel
 
Dit is de query:
Code:
SELECT tblBehaviour.Id, tblBehaviour.OpenForm, tblBehaviour.Behaviour FROM tblBehaviour ORDER BY [Behaviour];

Bedankt met wat betreft de tip voor het opslaan van de ID ipv het tekstveld. Is inderdaad een robustere manier. Ik verwacht eigenlijk geen wijzigingen in de benamingen van 'Behaviour', hooguit toevoegingen, maar toch, denk wel dat ik het aanpas.

Als ik het goed begrijp laat ik lstBehaviour nu staan en verander de afhankelijke kolom.
Vervolgens voeg ik 2 velden toe aan mijn formulier, beide velden krijgen de hun waarde ingevuld met behulp van DLookup die de waarde uit lstBehaviour haalt. Het ene nieuwe veld 'saved' naar de tabel en het andere 'nieuwe' veld opent eventueel een nieuw formulier.

Ik ga ermee aan de slag!

(Beetje retorisch misschien mijn tekst, maar was ook even voor mezelf om het op een rijtje te krijgen)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan