velden uit geselecteerd record (stambestand) overnemen

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

AdvB

Gebruiker
Lid geworden
1 jul 2021
Berichten
48
Goeiedag,

Ik heb getracht in dit forum de oplossing te vinden maar niet gevonden vandaar dat ik vraag stel.

Ik heb 2 tabellen ([klanten] en [orders]) die ik in 1 formulier opneem.
Als ik een klant geselecteerd heb (vanuit bestand klanten) moeten een aantal velden gevuld worden in het bestand [orders] die op dat moment wijzigbaar zijn via het openstaande formulier. De gegevens in het stambestand [klanten] moeten ongewijzigd blijven.

Ik kan nog geen VBA code schrijven, ik hoop dat t op te lossen is met de standaard functionaliteit van access zoniet dan hoop ik dat iemand mij een voorbeeld van die code kan geven.

Alvast bedankt,

mijn daadwerkelijke database is complexere maar in basis heb ik een probleem zoals ik hierboven heb geschreven.


---
ik heb 2 antwoorden gekregen maar dat is niet de oplossing voor mijn vraag.Ik zal het proberen duidelijker uit te leggen.
Ik heb stamgegevens van klanten in tabel [klanten]
als ik nieuwe order maak wil ik, specifiek voor die order die betreffende velden kunnen aanpassen.
dus het veld [klant]contactpersoon moet de basiswaarde worden voor het veld [order]contactpersoon en aangepast en opgeslagen kunnen worden in het record van de [order]

(ik ben net nieuw, dit is mijn eerste vraag dus misschien niet helemaal volgens de logica van dit forum maar dat gaat in toekomst vermoedelijk steeds beter)
 
Laatst bewerkt:
De gegevens in het stambestand [klanten] moeten ongewijzigd blijven. Ik kan nog geen VBA code schrijven, ik hoop dat t op te lossen is met de standaard functionaliteit van access
Dat kan inderdaad wel enigszins, al los ik dit liever op met een beetje code. Maar er zijn een aantal opties die je kan overwegen waarbij je niet hoeft te programmeren.

Optie 1 (mijn voorkeur):
Gebruik een keuzelijst op je Orders formulier voor het kiezen van een klant. Waarschijnlijk heb je dat al gedaan. Zet in die keuzelijst de klantgegevens die je op dit formulier wilt zien. Gebruik extra tekstvelden op het formulier waarin je de klantgegevens uit de keuzelijst haalt. De tekstvakken krijgen dan een Besturingselementbron met de formule (in dit geval heet de keuzelijst cboKlant): =cboKlant.Column(#). Hierbij vul je op de plek van het # de kolom in die je wilt zien. Opletten hierbij: de eerste kolom in de keuzelijst heeft de waarde 0 :).

Optie 2:
Zet in de query die je gebruikt voor het formulier ook alle gewenste velden uit de tabel Klanten die je terug wilt zien op het formulier. Zet vervolgens alle velden op het formulier. Zet de eigenschap <Ingeschakeld> van die velden op Nee en <Vergrendeld> op Ja. Gebruik voor het kiezen van de klant wederom een keuzelijst met invoervak. De tekstvelden van de order worden dan gevuld met de klantgegevens, zonder dat je ze kunt muteren.

Kijk maar of je hier wat aan hebt :).
 
Je kan op een formulier gemakkellijk enkele velden read-only maken via de data eigenschappen van het kontrole-element. open de eigenschappen, klik op het tabblad data en gebruik de eigenschappen enabled/locked om het gewenste resultaat te bereiken.

enabled = yes + locked = No geeft een gewoon editeerbaar veld
enabled = yes + locked = yes geeft een veld dat je nog wel kan activeren en de inhoud selecteren om bv. op het klembord te copiëren, maar ke kan de gegevens niet wijzigen. Best om deze op je formulier ook een andere achtergrondkleur of zo te geven, dan ziet de gebruiker direct dat dit veld 'anders' is.
enabled = No + locked = yes geeft een veld dat je niet meer kan activeren of editeren, maar zonder speciale weergave
enabled = no + locked = no geeft een veld dat je niet meer kan activeren, dus ook niet kan editeren, maar dit wordt standaard lichtgrijs weergegeven
 
Van TS een mail gehad met nadere uitleg, en dat leidt inderdaad tot een andere oplossing.
Je hebt een klant met NAW- en contactgegevens. Dat zijn de de default-waarden voor de order maar je moet ze kunnen overschrijven en dan zijn ze ook specifiek voor die order. Dus het veld [klant]contactpersoon moet als default worden gevuld in veld [order]contactpersoon maar moet daar overschreven kunnen worden specifiek voor die order.
Wat Ad dus wil, is m.b.v. de keuzelijst de gegevens overnemen in de tabel Orders, zodat ze daar aangepast kunnen worden. Dat is inderdaad prima te doen, maar vereist dus wat programmeren. Maar niet moeilijk :).

Om te beginnen: je hebt dus in de tabel Orders velden nodig waarin je de variabele gegevens opslaat, omdat de brongegevens in de tabel Klanten niet gemuteerd mogen worden. Ik kom dan eigenlijk op mijn optie 1 uit, die dat kan regelen. Stel dat je een veld KlantID hebt in Orders, en de aanvullende velden ContactPersoon en CP_TelNr. Beide gegevens komen ook uit de tabel Klanten, maar kunnen dus voor een order specifiek anders zijn. In de keuzelijst heb je dan nog steeds, zoals ik al had aangegeven, die velden staan die je wilt gebruiken op het formulier. Alleen zijn dat dan velden die zijn gekoppeld aan de tabel Orders, en niet Niet-afhankelijk. De Besturingselementbron is dan dus niet een formule, maar een Veldnaam uit de tabel Orders.
Dat laat dan wél de vraag over hoe je de informatie uit de keuzelijst in die velden krijgt, want je kunt dus niet een Besturingselement hebben dat aan twee bronnen is gekoppeld (veld en formule). In dit geval gebruik je dus een stukje VBA om de gegevens uit de keuzelijst te kopiëren naar de (tekst)velden. Dat ziet er dan zo uit:
Code:
Private Sub cboKlant_Click()
    Me.txtContactpersoon.Value = Me.cboKlant.Column(1)
    Me.txtTelNrCP.Value = Me.cboKlant.Column(2)
End Sub
Wel weer even de namen aanpassen natuurlijk :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan