Automatisch aanvullen

Status
Niet open voor verdere reacties.

Bas1980

Gebruiker
Lid geworden
15 dec 2013
Berichten
64
Hallo allemaal,

Had hier even een vraagje. Voor mijn werk ben ik een uitgebreide database aan het maken. Deze bevat cursusverloopdata's, al het personeel wat hier komt, eigen medewerkers etc. Het opbouwwerk gaat redelijk goed aangezien ik nog nooit iets met Acces heb gemaakt. Het lukt me om gegevens van het ene formulier mee te nemen naar het andere, de normale standaard bouwdingen etc.
Echter loop ik nu tegen iets op en wel het volgende:

Ik heb een tabel met een sleutelkast registratie gemaakt. In deze tabel staan de rijen sleutelnummer, omschrijving, serienummer, bijzonderheden. Deze is vervolgens weer gekoppeld aan een formulier waar dit netjes geordend op terug komt. Vervolgens zit er een knop onder om de sleutel uit te lenen. Deze knop neemt het sleutelnummer en de omschrijving mee naar een nieuwe tabel/formulier.

Deze tabel heeft vervolgens de rijen Datum/Tijd, sleutelnummer, omschrijving, uitgeleend aan, firma, uitgeleend door, een knop retour etc. nu wil ik graag het volgende:

In de tabel en in het formulier "Sleutellijst" staan de rijen "sleutelnummer" en "omschrijving". Wanneer ik het sleutelnummer en/of de omschrijving al weet hoef ik in principe niet via de sleutellijst te werken om zo de sleutel via de knop uit te lenen maar wil ik direct in het "Uitgeleende sleutel" formulier kunnen typen. Dit zou inhouden dat je voor sleutelnummer en omschrijving 2 keuzevakken kunt maken ( Dit om onnodige extra invoer te krijgen die word opgeslagen ). Deze keuzevakken lukken me wel. Echter wil ik deze twee keuzevakken aan elkaar linken. Als ik dus sleutelnummer 80 uitleen moet de omschrijving automatisch in het 2e keuzevak komen te staan. Weet ik de omschrijving wil ik graag dat het sleutelnummer automatisch zal worden ingevuld in het keuzevak "sleutelnummer".

Hoop dat ik zo duidelijk ben geweest en hoop op een spoedig antwoord!

Groet,

Bas
 
Het opbouwwerk gaat redelijk goed aangezien ik nog nooit iets met Acces heb gemaakt.
Dus als ik het goed begrijp, gaan dingen beter als je nergens verstand van hebt :). In dat geval: ik doe open hart operaties aan huis ;)
Als ik je opzet lees, zit er volgens mij wel enige dataredundantie in; dubbele (en derhalve overbodige) gegevens. De combie "sleutelnummer" en "omschrijving" bijvoorbeeld: als je een uitleentabel hebt, dan sla je daarin alleen het sleutelnummer op, want dat is uniek. Op basis daarvan weet je namelijk ook de omschrijving. De sleutel kies je op je formulier d.m.v. een keuzelijst met invoervak, waar je dan ook de omschrijving etc inzet, zodat je kunt kiezen op omschrijving. Maar je schrijft dus het sleutelnummer weg, niet de omschrijving. Iets vergelijkbaars vermoed ik met de combie "uitgeleend aan" en 'firma'. Firma is een afgeleide van "uitgeleend aan", neem ik aan.

Ik snap je werkwijze overigens niet helemaal; ik zou zelf werken met een uitleenformulier waarin je (via keuzelijsten) de (deze keer ook letterlijk) sleutelvelden uit de brontabellen kiest, zoals Sleutelnummer, KlantID en de datumvelden etc. Je hebt daarvoor geen 'startformulier' voor nodig, zoals je nu doet met die knop. Al mag dat natuurlijk wel. Zelf zou ik op het Sleutelformulier een subformulier zetten met de uitleendata. Die twee zijn gekoppeld, dus je kunt altijd direct een nieuw uitleenrecord maken. Er hoeft dus niks overgekopieerd te worden.

Het èchte antwoord op je vraag, mocht je aan je eigen structuur vast willen houden, is heel simpel: je hebt maar één keuzelijst nodig, en geen twee. In de keuzelijst cboSleutelnummer neem je extra velden op, die je m.b.v. tekstvelden weer uitleest. Zo'n tekstveld krijgt dan de formule =cboSleutelnummer.Columns(#). Waarbij # het kolomnummer -1 is. De tweede kolom (omschrijving) lees je dus uit met =cboSleutelnummer.Columns(1).
Maar ik vermoed dat je de structuur nog wel kunt verbeteren...
 
Zou je je antwoord toe kunnen lichten? Kom er desondanks even niet uit :-( Misschien te moe na een dag hard werken.
 
Dan zou je een voorbeeldje moeten posten; dan kunnen we betere tips geven. In het algemeen wekt je inrichting de indruk dat hij niet goed genormaliseerd is. Vandaar mijn opmerkingen over dataredundantie. Maar om dat definitief te kunnen zeggen, moet ik toch de db zelf zien. Of een kopie ervan met dummy gegevens. We hoeven natuurlijk niet je productiedb te hebben.
In beginsel is het zo dat je in gekoppelde tabellen alleen het sleutelveld uit de brontabel opslaat. Dus wèl [Sleutelnummer], maar niet [Opmerkingen]. Wil je het veld [Opmerkingen] wel zien op het formulier, dan doe je dat met de formule die ik heb gegeven; het extra tekstveld krijgt dan als Besturingselementbron =cboSleutelnummer.Columns(#).
 
Het is gelukt! Dank. Al was het nog niet zo makkelijk omdat acces de code soms verkeerd pakt?
Nu nog even het volgende. Door deze link aan de keuzelijst wordt de informatie die automatisch geplaatst is, niet opgeslagen in de tabel. Is dit toch mogelijk? De gegevens uit de tabel "uitgeleende sleutels" worden namelijk na inlevering weggeschreven naar een archieftabel en vervolgens uit de eerste tabel gewist. Dit omdat er in de nacht een rapport wordt uitgedraaid hoeveel sleutels aan wie etc. zijn uitgeleend.

Groet,

Bas
 
Laatst bewerkt:
Al was het nog niet zo makkelijk omdat acces de code soms verkeerd pakt?
Lijkt mij niet dat Access verkeerde code pakt, maar eerder dat jij verkeerde velden aanbiedt :)

Door deze link aan de keuzelijst wordt de informatie die automatisch geplaatst is, niet opgeslagen in de tabel. Is dit toch mogelijk? De gegevens uit de tabel "uitgeleende sleutels" worden namelijk na inlevering weggeschreven naar een archieftabel en vervolgens uit de eerste tabel gewist.
Hier snap ik dan weer helemaal niks van... Ik wil nog wel geloven dat je een archieftabel maakt omdat je de uitleentabel schoon (en snel) wilt houden. Maar dan nog: wat is het nut van het wegschrijven van de omschrijving? Zelfs als je een overzicht wilt maken van de archieftabel hoef je alleen maar de sleutel bron tabel er aan te koppelen, en je hebt in één keer het veld omschrijving er weer bij! Juist als je archieftabellen maakt om de productie zo klein mogelijk te houden, is het belangrijk dat je redundantie vermijdt. Dat met opzet toevoegen lijkt mij dan ook zwaar contraproductief...
 
Ik kan dit bijna niet anders doen omdat er mensen tussen zitten die een gewoonte hebben. Verandering is dan moeilijk en dat probeer ik dus langzaam maar zeker wel te doen. Nu eerst layouts in formulieren aanpassen en straks steeds een stapje verder. Daarom wil (moet) ik het even op deze manier doen.

Het gaat er dus om, de gegevens "Sleutelnummer" en "Omschrijving" van "Sleutellijst" doormiddel van een knop automatisch meenemen naar de "uitgeleende sleutels". ( Dit is klaar en lukt. Acces slaat de gegevens dan ook dubbel op )
Alle uitgeleende sleutels na inlevering verplaatsen van "Uitgeleende sleutels" naar "Archief uitgeleende sleutels" en vervolgens verwijderen uit "Uitgeleende sleutels". ( Dit lukt ook )

Vanaf de sleutellijst kun je dus met een knop "uitlenen" achter de betreffende sleutel automatisch worden doorverwezen naar het formulier "Uitgeleende sleutels" en neemt Acces het sleutelnummer en de omschrijving netjes mee zodat deze in dezelfde velden worden geplaatst in een andere tabel.
Echter, wat als ik het sleutelnummer uit mijn hoofd weet? Dan wil ik de invoer direct op het formulier "Uitgeleende sleutels" doen. Wel met dien verstande dat dus na het invoeren van een sleutelnummer de omschrijving er automatisch bijstaat, en andersom. Met de bovenstaande oplossing om dus een keuzelijst te combineren met een tekstveld zal de omschrijving, die automatisch is geplaatst, niet worden opgenomen in de tabel. Dit moet dus wel. Misschien toch een omweg om dit te realiseren?

Ik snap dat dit redundantie met zich meebrengt. Het is helaas even niet anders. Zal langzaam maar zeker wel proberen om dit te verminderen.

Groet,

Bas
 
Zachte heelmeesters maken stinkende wonden.... Als je een project als dit begint, waarbij je een database gaat herzien, wil je dat niet te vaak doen. Niet alleen blijf je anders bezig, het is voor de gebruikers ook een oneindig proces waarbij steeds weer iets anders in de database verandert. Het is echt veel beter om in één keer een nieuwe versie uit te rollen, die gelijk goed is, dan zo'n eindeloos voortslepend project, waarbij je nooit iets ècht goed kunt opleveren tot alles klaar is.
Mijn ervaring is dat de flexibiliteit van de gebruikers ook groot genoeg is om een overstap naar een compleet nieuw gebouwde, (uiteraard wel verbeterde) versie te maken. Sterker nog: ik heb afgelopen vrijdag op het werk een compleet nieuwe versie van een pakket geïnstalleerd. Nou is dat een extern pakket, en al zou ik het willen, maar tussenfases waren niet eens mogelijk, maar toch: het idee dat gebruikers niet uit een bepaalde gewoonte zijn te krijgen, is gewoon niet juist. Het is ook een kwestie van ze voor een voldongen feit stellen. Uiteraard wel met de nodige voorbereiding, en instructiesessies.
Waar het om gaat, is dat het belang van de database voorop moet staan, en niet het beland van al dan niet vastgeroeste gebruikers. Dan ligt in mijn ogen je prioriteit verkeerd. Maar die keuze is uiteraard in dit geval voor jou, en niet voor mij :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan