Veld automatisch vullen

Status
Niet open voor verdere reacties.

tonp60

Gebruiker
Lid geworden
29 jul 2009
Berichten
136
Hallo,

Ik gebruik onderstaande code om het veld Materiaalsoort automatisch te vullen met de waarde uit een tabel, bij het selecteren van een waarde uit dezelfde tabel voor het veld MateriaalBenaming.

Code:
Private Sub MateriaalBenaming_AfterUpdate()
Dim con As ADODB.Connection, rs As ADODB.Recordset
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "KtblMateriaalBenaming", con, adOpenKeyset, adLockOptimistic

rs.MoveFirst
    Do Until rs.EOF
        If Me.MateriaalBenaming = rs.Fields("MateriaalBenaming") Then
            Me.MateriaalSoort = rs!MateriaalSoort
            Exit Do
        End If
        rs.MoveNext
    Loop
   
rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
End Sub

Is het mogelijk om ook een 2e veld automatisch te vullen via een dergelijke code. Ik bedoel dan het veld MateriaalAfbeelding.
Dit veld bevindt zich ook in de tabel KtblMateriaalBenaming. Het veld MateriaalBenaming is het sleutelveld.

Groet.
 
Om te beginnen: jouw methode is de meest onhandige die je kunt bedenken, dus daar zou ik snel mee stoppen. Want het is zo eenvoudig: zet de te plaatsen gegevens in de query van je keuzelijst (en geef die een fatsoenlijke naam, bijvoorbeeld cboMateriaalbenaming), en haal de waarden uit de keuzelijst. Zoiets bijvoorbeeld:
Code:
Private Sub cboMateriaalBenaming_Click()
    Me.MateriaalSoort = MateriaalBenaming.Column(2)
    Me.MateriaalAfbeelding = MateriaalBenaming.Column(3)
End Sub

Overigens riekt dit geheel naar dataredundantie (waarom zou je Materiaalsoort en Materiaalafbeelding nog extra opslaan?) dus het kan nog veel simpeler door de twee tekstvakken de volgende formules te geven als Besturingselementbron:
Code:
    Me.MateriaalSoort: [cboMateriaalBenaming].Column(2)
    Me.MateriaalAfbeelding:  cboMateriaalBenaming].Column(3)

Ben je gelijk klaar.
 
Een heel mooi antwoord, maar ik begrijp er echt helemaal niets van. Er is mij aangeleerd dat ik een tabel moet maken, waardoor ik eventuele nieuwe waarden makkelijker kan toevoegen.
Je zegt nu dat ik de te plaatsen gegevens in de query van mijn keuzelijst moet plaatsen en de waarden uit de keuzelijst moet halen???
Ik heb geen flauw idee wat je bedoelt en ik weet dus ook absoluut niet hoe ik dat moet doen.
Daarna praat je nog over data redundantie?, daar ben ik je helemaal kwijt. De gegevens moet ik toch opslaan om ze te kunnen gebruiken.
 
Ik reageer op je oorspronkelijke vraag, en die luidt:
Ik gebruik onderstaande code om het veld Materiaalsoort automatisch te vullen met de waarde uit een tabel, bij het selecteren van een waarde uit dezelfde tabel voor het veld MateriaalBenaming.
Je geeft dus aan dat de waarden al in de tabel staan. Er is dus geen sprake van "De gegevens moet ik toch opslaan om ze te kunnen gebruiken." Of lees ik nu verkeerd? Zoals ik het lees, heb je een tabel (met formulier uiteraaard) waarin je de sleutelwaarde uit je opzoektabel (weer een aanname: [KtblMateriaalBenaming]) gebruikt om materialen in een andere tabel op te slaan. Daarbij wil je (ik ga gewoon door met aannames) dat je uit diezelfde tabel ook andere velden wilt zien op je formulier. En dáár gebruik je dan dus je code voor.

Als je in je (onbenoemde) tabel óók die andere velden wilt opslaan, dán ben je dus bezig met het dubbel opslaan van gegevens (want ze staan immers al in [KtblMateriaalBenaming]) en dat noemen we dus dataredundantie.
Wellicht is het handig als je even uitlegt wat je precies aan het doen bent, want zoals je begrijpt, ben ik de draad nu enigszins kwijt.
 
Ik zal het proberen.
Ik heb een tabel Werkorder. Die is gerelateerd aan de tabel WerkorderMateriaal. In de tabel WerkorderMateriaal komen de materialen te staan die bij een specifieke Werkorder benodigd zijn. Vandaar de relatie met het Werkordernummer.
In de keuzetabel KtblWerkmateraalBenaming staan de diverse materialen. Kolom 1 = Soort (Glas, spiegel of paneel), Kolom 2 = Benaming (zie keuzelijst in afbeelding) en Kolom 3 = Afbeelding
Wat nu eigenlijk de bedoeling is dat als ik in het koppelformulier de benaming kies, bijv. Penelope Sand, het veld MateriaalSoort gevuld wordt met, in dit geval Paneel en het veld MateriaalAfbeelding gevuld wordt met de bijbehorende afbeelding. Een naam van een materiaal zegt weinig, maar een soort en afbeelding erbij, maakt alles duidelijk.
Ik heb er een afbeelding bij gedaan van de tabellen, het formulier en de relatie.KoppelFrm.jpg
Ik hoop dat je nu begrijpt wat ik bedoel :confused:
 
Om te beginnen: de relatie tussen [tblWerkorder] en [tblWerkorderMateriaal] is volkomen nutteloos, en doet helemaal niks. Kun je net zo goed weglaten. Daarnaast maak je volgens mij een denkfout, want je kunt op basis van een keuze in cbolWerkmateraalBenaming nooit automatisch een Paneel laten zien, want je slaat die informatie niet in de tabel [KtblWerkmateraalBenaming] op. Dus dan kun je dat er nooit uithalen. Wél heb je daar [MateriaalAfbeelding] in staan, dus dat kun je er wél uithalen. Overigens raad ik al jaren iedereen af om daar OLE objecten voor te gebruiken, maar alleen met tekstvelden (die het pad + de naam van de afbeelding bevatten) te werken. Dit maakt je db gruwelijk snel heel groot.

Ik zou de SQL van de query van die keuzelijst(en) wel eens willen zien, want op basis van dit plaatje is al wel een deel duidelijker, maar nog niet alles :).
 
Je bedoelt dit:
Code:
SELECT KtblMateriaalBenaming.MateriaalBenaming
FROM KtblMateriaalBenaming
ORDER BY KtblMateriaalBenaming.[MateriaalBenaming];
 
Zoiets ja :). Op basis hiervan kan ik in ieder geval wel zeggen dat mijn oplossing niet werkt, omdat je de extra velden die je nodig hebt niet in de query hebt zitten. En dat moet dan uiteraard wel. Maar ik snap dus ook heel weinig van je tabelopzet. Wellicht is een voorbeeld bestandje beter. In ieder geval sneller voor een antwoord.
 
Als het goed is heb je die al, dit zit er ook in verwerkt
 
Ik zal er uiteraard even naar kijken. Maar daarmee staan andere potentiële helpers wel werkloos aan de kant :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan