Karakters uit verschillende velden naar een nieuw veld

Status
Niet open voor verdere reacties.

Scallebe

Gebruiker
Lid geworden
29 okt 2014
Berichten
528
Goede morgen ontwikkelaars,

Ik wil in mijn formulier een partnummer creëren door gebruik te maken van gegevens uit andere velden.

Veld 1 : LABRET
Veld 2 : 12
Veld 3 : 19

Resultaat in Veld 4 zou moeten worden : LAB1219 (altijd de eerste 3 karakters uit veld 1, aangevuld met veld 2 & 3 (= altijd 2 karakters))

Op die manier zou ik een referentienummer willen maken voor het item.

Doe ik dat met een formule in veld 4 of is het beter met VBA?

De vraag blijft, hoe moet ik het formuleren of coderen. :confused:


Bedankt en nog een prettige zondag. :thumb:


Greetz

Pascal
 
Dit kan u beter regelen in een Query en het formulier dan de recordbron de query geven.

Sleep de velden van de tabel in de Query en voor Partnummer maak u deze expressie.

Partnummer:left$(Veld1,3) & Veld2 & Veld3


Gr.Cor
 
Pletter,

Bedankt voor uw reactie :thumb:

Klein probleempje, Veld 1, 2 & 3 zijn dropdown menu's (op basis van tabellen) en ik krijg een combinatie van de verschillende ID (Autonumering) in plaats van het gegeven uit het veld. :(


Greetz

Pascal
 
Klein probleempje, Veld 1, 2 & 3 zijn dropdown menu's (op basis van tabellen)
Hier heb ik maar één reactie op: DOE DAT NOOIT!. Echt, keuzelijsten maak je op formulieren en niet op tabellen. Enige uitzondering: keuzelijsten op basis van Waarden. Nu zit je in de problemen....
Gelukkig is er wel een workaround mogelijk. Je krijgt dan iets als:

Code:
= Left([Veld1]; 3) & Me.CboVeld1.Column(1) & Me.CboVeld2.Column(1)
als Besturingselementbron bij Veld4. Maar als je dat doet zie je het nummer wel, maar wordt het niet opgeslagen. Dat zal je vermoedelijk wél willen. Dan zul je iets anders moeten bakken, want je moet het tekstveld txtVeld4 dan koppelen aan het tabelveld Veld4. En dan kan je de formule niet meer gebruiken. Die zul je dan moeten genereren op basis vande keuzelijsten. Dan krijg je iets als:

Code:
Private Sub Keuzelijst19_Click()
    Me.Veld4 = Left([Veld1], 3) & Me.CboVeld1.Column(1) & Me.CboVeld2.Column(1)
End Sub

En dat doe je bij beide keuzelijsten, want je kunt in beide keuzelijsten een selectie maken. Je ziet gauw genoeg of de code compleet is of niet, maar daar kun je ook bij het opslaan van het formulier nog een check op doen.
 
Octafish,

Bedankt voor uw reactie.


Ik heb mijn diverse tabellen aangemaakt voor diverse opties.

Dan heb ik mijn hoofdtabel gemaakt met de verschillende relaties naar de "optie-tabellen". (door de Wizard opzoeken te gebruiken) Dat worden toch automatisch "ComboBoxen")

Zie relaties in bijlage.

Van mijn hoofdtabel heb ik dan een formulier gemaakt en Access maakt dan toch alle velden aan als ComboBox (toch de velden uit de andere tabellen met de relatie)

Daar doe ik toch niets fout, bij mijn weten.


Ik probeer de formule uit die je in de oplossing hebt gezet maar access zet alle benamingen tussen []

Dit is de formule met de juiste veldnamen : =Left([Benaming];3) & [Me].[Lengte_Staafje].[Column](1) & [Me].[Diameter_Staafje].[Column](1) (na ingave op de manier zoals in jouw voorbeeld)

Ik kan dus niet zo goed volgen.


En waar zet ik de VBA code die je als oplossing meegegeven hebt?


Ik heb het voor elkaar gekregen om een voorbeeldje mee te sturen



Groetjes
 

Bijlagen

  • Voorbeeld.zip
    163,4 KB · Weergaven: 12
  • Relaties.png
    Relaties.png
    11,5 KB · Weergaven: 37
Scallebe,

Op de wijze die ik in #1 aangaf.

Recordbron van je formulier de Query.

Afbeelding van de Query

2021-01-24.png



Gr. Cor
 
Laatst bewerkt:
Pletter,

Je ziet het niet in het voorbeeld maar dat heb ik geprobeerd in het origineel en ik krijg als resultaat een combinatie van de ID's als resultaat. Niet de combinatie van de gegevens uit de velden in de expressie.

Zie foto's in bijlage.



Groetjes
 

Bijlagen

  • Part 2.png
    Part 2.png
    4,3 KB · Weergaven: 32
  • Part 1.png
    Part 1.png
    2,6 KB · Weergaven: 34
Daar doe ik toch niets fout, bij mijn weten.
“Fout” is niet het woord dat ik zou gebruiken, maar handig is anders. De ontwerpers van Access bouwen allemaal onzin in, die je niet zou moeten gebruiken omdat je er de db nee naar de ratsmodee helpt. Zo maak je in tabellen dus NOOIT op zoekvelden met de wizard.
1. Gebruik numerieke gewone velden die verwijzen naar het sleutelveld van de brontabel, want dát is wat je opslaat, niet wat je in de keuzelijst ziet. In tabellen wil je altijd de échte waard#n zien die worden opgeslagen.
2. Leg je relaties eerst vast in het Relaties venster (zo te zien heb je dat al wel gedaan).
3. Gebruik op je formulieren keuzelijsten.
Dan heb je jouw probleem eigenlijk nooit.

Ik zal vanavond je db aanpassen, zodat e.e.a. werkt zoals ík het zou doen. Dan is het aan jou om dat al dan niet verder op te pakken :).
 
... en ik krijg als resultaat een combinatie van de ID's als resultaat.
Dat is exact de oorzaak die ik geschreven heb, doordat je de waarde uit de keuzelijst gebruikt. Met mijn oplossing (.Column(#)) haal je de andere waarden uit de keuzelijst. En dát is wat je wilt zien.

Nogmaals: doe dit op het formulier, níet in de query.
 
OctaFish,

Ik heb ooit eens een basiscursus gevolgd en het werd ons zo aangeleerd... :rolleyes: Vermoedelijk wisten ze ook niet beter naar mijn idee.


Super dat je mijn database zal aanpassen en ben benieuwd naar het resultaat en hoe jij het zou aanpakken.


Thanks :thumb:

Groetjes

Pascal
 
Goede morgen OctaFish,

In afwachting van jouw aangepaste versie van de DB ben ik wat gaan experimenteren met de code die je opgegeven hebt in #4.

Na overleg met de gebruiker over de samenstelling van het partnummer ben ik tot volgende code gekomen : (Ik zal mijn velden wel een duidelijke naam geven hoor... )

Code:
Me.Tekst110 = Left(Keuzelijst106.Column(1), 3) & Left(Me.Keuzelijst114.Column(1), 1) & Right(Me.Keuzelijst114.Column(1), 1) & Left(Me.Keuzelijst116.Column(1), 2) & Left(Me.Keuzelijst118.Column(1), 2)

Ik heb de code in de vier keuzelijsten geplaatst en ze werkt, telkens ik een van de vier keuzelijsten aanklik, een waarde selecteer, wordt het partnummer opgebouwd met uiteindelijk een definitief resultaat.

Echter, enkel het laatst gecreëerd partnummer is zichtbaar in het formulier, en zie ik telkens terugkomen bij de andere artikelen omdat de gecreëerde partnummers niet worden opgeslagen in de tabel.

Daar zit ik dus even vast.:confused:


Maar ik ben er van overtuigd dat jouw aangepaste versie van de DB wel de nodige oplossing zal bieden.


Groetjes

Pascal
 
Echter, enkel het laatst gecreëerd partnummer is zichtbaar in het formulier, en zie ik telkens terugkomen bij de andere artikelen omdat de gecreëerde partnummers niet worden opgeslagen in de tabel.
Dat klopt als een zwerende vinger; de formule laat een 'virtuele' naam zien. Dit soort constructies moet je ook niet op een doorlopend formulier gebruiken, want dan wordt de gebruiker gek, omdat-ie dan denkt dat alle records in de tabel zijn vernaggeld. Wat uiteraard niet zo is, want geen enkel veld wordt hierdoor beïnvloed. Simpel omdat de samengestelde waarde nergens wordt opgeslagen.

Als je dat wél wilt (de waarde opslaan) dan moet je dus een andere techniek gebruiken, die ik al in bericht #4 heb uitgelegd. Daarbij stel je het nummer dus samen op basis van de gekozen waarden uit de keuzelijsten, die je dan uiteindelijk in het veld zet. Daarbij lijkt mij een controle op de juistheid van het nummer wel noodzakelijk, omdat je er zeker van wilt zijn dat je alle velden hebt gebruikt. In het voorbeeld heb ik daarom een simpele actie aan de Click event van de keuzelijsten gehangen, die een vast patroon gebruikt voor de partnummers. Op basis daarvan kan je dan wel checken of alles is ingevuld of niet.

Ik heb uiteraard die gruwelijke keuzelijsten uit je tabel verwijderd :D.
 

Bijlagen

  • Voorbeeld.zip
    39,2 KB · Weergaven: 16
OctaFish,

Bedankt voor uw oplossing.

Als ik het goed begrepen heb dan moet ik wel altijd het gegevenstype van de "Opties" in de hoofdtabel als numeriek instellen om dan de relatie te kunnen aanmaken?



Ik probeer nu ook een tabel met klanten te verbinden met de tabel Piercings en dit met een formulier uiteraard.


Een formulier met klanten met een subform (gegevensblad met Partnummer en Benaming) voor de aangekochte piercings.

Op zich geen probleem, maar ik wil in mijn gegevensblad gewoon met een keuzemenu een bestaand partnummer willen selecteren van de aangekochte piercing en dat krijg ik maar niet voor elkaar.


Hoe krijg ik dit voor elkaar?

Zou jij het op een andere manier doen? (Heel waarschijnlijk wel... :confused::thumb:)

Kan je mij verder helpen met het voorbeeld dat je gemaakt hebt?


Indien het nodig is creëer ik wel een nieuwe vraag voor dit probleem.


Alvast bedankt

Groetjes

Pascal
 
Als ik het goed begrepen heb dan moet ik wel altijd het gegevenstype van de "Opties" in de hoofdtabel als numeriek instellen om dan de relatie te kunnen aanmaken?
Dat had de wizard al gedaan, maar in beginsel: ja. Als je een brontabel (opzoek) maakt met een AutonummerID, dan moet je het koppelveld óók numeriek (Lange Integer) maken, anders kun je de twee niet koppelen. Voor klanten kun je een KlantID maken van het AutoNummer type, en die kun je dan koppelen aan een Opdrachten tabel o.i.d. Ik zou 'm niet in de Piercings hangen, voor het geval één klant meerdere piercings tegelijk bestelt. Dan ben je beter af met een één-op-veel tabel Klanten-Opdrachten en een een één-op-veel tabel Piercings-Opdrachten. In die tabel Opdrachten leg je dan zowel PiercingID als KlantID vast.
Gegevensblad gebruik ik dus écht nooit; ik maak altijd doorlopende subformulieren. Het oog wil tenslotte ook wat :). Bovendien kun je in een doorlopend formulier alles automatiseren, en dat is in een Gegevensblad weergave toch wat lastiger.
 
Octafish,

Ik kan eerlijk gezegd niet zo goed volgen, sorry... :rolleyes:


Ik maak dus een nieuwe Opdracht-tabel aan met zowel een klantID -veld als een piercingID -veld en maak dan een one-to-many relatie met de twee respectievelijke tabellen?


En hoe vertaal ik dit dan naar een formulier? Ik maak een formulier aan voor de klanten... en dan stopt het even voor mij...

Dit heb ik tot dusver geprobeerd...

Als ik een formulier aanmaak voor de klanten wordt de tabel opdrachten er automatisch bijgevoegd. ik heb dus een doorlopend formuliertje gemaakt van de tabel opdrachten met een keuzelijst om een reeds gecreëerd partnummer op te zoeken.

Ik plaats mijn subform in het formulier Klanten met KlantID-KlantID als koppelveld.

Maar ik kan geen nieuwe opdracht aanmaken...


Waar ben ik de mist ingegaan?


Groetjes

Pascal
 

Bijlagen

  • Relaties met opdracht.jpg
    Relaties met opdracht.jpg
    56,3 KB · Weergaven: 43
Je structuur ziet er bruikbaar uit, al zou ik in Opdrachten wat meer velden hebben gezet (Orderdatum etc.) maar in beginsel dus correct. De tabel/formulier Opdracht is dus leading en de basis van de rest. Op dat formulier kies je met een keuzelijst de KlantID en laat je dan (met een query onder het formulier fOpdacht) dan de overige klantgegevens zien. In het gekoppelde (doorlopende dus) subformulier dat je op fOpdrachten plaatst zet je de verschillende bestellingen, dus piercings in jouw geval. In dat subformulier gebruik je dan de eerder gemaakte keuzelijsten om de feitelijke bestelling(en) te specificeren.

In het kort: een opdracht kent een aantal vaste gegevens (klant, datum, etc) en een aantal variabele gegevens (het aantal piercings). Die leg je vast in het gekoppelde subformulier.
 
Octafish,

Ik probeer uw uitleg te volgen en te begrijpen en ik kan redelijk volgen, maar om het dan in de praktijk om te zetten...

Wat betreft de extra velden heb je gelijk hoor, maar ik wou toch eerst de basis beet hebben... :rolleyes:

Kan je mij nog even op weg helpen :confused:

Ik heb een aangepast voorbeeld meegestuurd.


Bedankt alvast

Groetjes

Pascal
 

Bijlagen

  • Get Inked and Bie pierced.zip
    722,7 KB · Weergaven: 17
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan