Overzichtelijke gegevensinvoer

Status
Niet open voor verdere reacties.

JJZijlstra

Gebruiker
Lid geworden
26 nov 2013
Berichten
283
Beste lezer(s),

Kortgeleden heb ik een oefentabel gemaakt met de tabellen Klantgegevens, Bestelling (die de klant plaatst), en Artikelen.
De relatie heb ik gelegd, zie bijgevoegd bestand. Via de tabelopmaak kan ik d.m.v. de relatie kijken van Klant naar Bestelling en Artikel naar Bestelling. Nogal logisch.

Ad 1):
De tabel Bestelling heeft dus zelf geen relatie met het plusteken. Is dit nodig??
Op zich is dit nog niet het probleem, maar als bedrijf zijnde wil ik graag de bestellingen van mijn klanten bijhouden, maar hoe kan ik op een overzichtelijke manier dit doen. Er zijn nu alleen maar nummers. Als ik veel klanten en veel artikelen heb kan ik de nummers niet allemaal onthouden zoals tot nu toe het geval is.
Graag wil ik bijvoorbeeld zien dat dhr Veen een bestelling plaatst van een aantal kiwi’s en druiven, maar hoe kan ik een overzichtelijke gegevensinvoer krijgen?

Ad 2):
Zelf heb ik bewust voor KlantID het gegevenstype Numeriek gekozen omdat ik deze beslist niet no. 1 wil laten beginnen zoals de Autornummering dat wel doet.
Graag zou ik de gegevenstype Numeriek willen behouden en het nummer van elke nieuwe klant automatisch met 100 willen vermeerderen ( 1+100, 2+100 enz.) of anders gezegd:

Ben heel benieuwd.

Vriendelijke groet,
Toby
 

Bijlagen

  • Database11.zip
    31,5 KB · Weergaven: 18
Ad 1: Je opzet is niet handig, want je kunt nu maar één artikel per bestelling invoeren. Tenzij dat de standaard is, waar nooit vanaf wordt geweken (denk aan een abonnement afsluiten o.i.d.) zou ik dat dus in ieder geval aanpassen. Plustekens in tabellen zie je als je gerelateerde tabellen kunt inzien. Ik gebruik ze nooit, want ik werk zelden in tabellen, maar op formulieren. Dus ik zou me daar niet zo druk over maken. Wél dus over de opzet van de database :).

Ad 2: een KlantID kun je best handmatig nummeren; daar kun je een eigen functie voor schrijven die je gebruikt om (op een formulier) als standaardwaarde bij een nieuwe klant het eerstvolgende nummer te genereren. Handmatige nummers hebben als voordeel dat je geen 'gaten' krijgt in de nummering, omdat de nummers alleen worden aangemaakt als je daadwerkelijk een klant aanmaakt. Jouw wens (oplopend met 100 (100, 200, 300)? Of, zoals je in het voorbeeld hebt gemaakt als 101, 102, 103 etc? Autonummers kun je overigens ook met elk gewenst nummer laten beginnen. Hoeft dus niet met 1.
 
Zoals AccessGuru terecht opmerkt, kan je bij een bestelling niet meerdere artikelen (kiwi's en druiven) kwijt. Dat los je op met twee tabellen: bestelling en bestelregel. Met een hoofd- en subformulier voor die tabellen kan je de gegevens overzichtelijk invoeren.
 
De relatie heb ik gelegd, zie bijgevoegd bestand. Via de tabelopmaak kan ik d.m.v. de relatie kijken van Klant naar Bestelling en Artikel naar Bestelling. Nogal logisch. ... De tabel Bestelling heeft dus zelf geen relatie met het plusteken. Is dit nodig??
Nog een paar opmerkingen, want ik vermoed dat je nog niet veel ervaring hebt met Access. Als een tabel gekoppeld is (met één-op-veel) aan een onderhangende tabel, dan zie je inderdaad een plus knop bij de records. Heeft een tabel geen onderliggende koppelingen, dan zie je dat plusje dus niet. Jouw tabel Bestelling heeft geen koppelingen, dus ook geen plusteken. Dát is pas logisch :). De opmerking van xps351 borduurt voort op mijn opmerking, namelijk dat je maar één artikel kan bestellen, en dat is dus niet handig als je naast kiwi's óók druiven moet kunnen bestellen. Daar wil je geen aparte bestelbon voor maken. Zodra je een tabel BestelRegels hebt, dan krijg je dus óók in de tabel Bestelling plustekens voor de onderliggende records.

Er zijn nu alleen maar nummers. Als ik veel klanten en veel artikelen heb kan ik de nummers niet allemaal onthouden zoals tot nu toe het geval is.
En dáárom moet je dus niet in tabellen werken (heb je ook geen 'last' van die plusknoppen) maar op formulieren, waarin je dan keuzelijsten met invoervak maakt waarin je de klanten, artikelen en wat je dan ook nog meer aan standaardinformatie hebt kun kiezen. Daarbij sla je de nummers op, maar selecteer je op basis de artikelnamen/klantnamen. Voorbeelden genoeg voorhanden op HelpMij :).
 
Als je afwil van die plusjes:
 

Bijlagen

  • Subdatasheet.JPG
    Subdatasheet.JPG
    79,5 KB · Weergaven: 36
Dat is een voorbeeld dat ik dan weer niet in HelpMij kan vinden. Maar als je in het zoekvenster van het Access forum gaat zoeken, kom je geheid wat tegen. Zoek maar eens op het woord 'volgnummer', dan vind je een hoop vragen (ongeveer allemaal hetzelfde) die te maken hebben met het handmatig aanmaken van volgnummers volgens een eigen format. En nu we het daar over hebben: je hebt nog steeds geen antwoord gegeven op deze vraag:

Jouw wens (oplopend met 100 (100, 200, 300)? Of, zoals je in het voorbeeld hebt gemaakt als 101, 102, 103 etc?

En dan ga ik dus ook niet verder voor je kijken.
 
@AcccessGuru,

Zoek maar eens op het woord 'volgnummer', dan vind je een hoop vragen (ongeveer allemaal hetzelfde) die te maken hebben met het handmatig aanmaken van volgnummers volgens een eigen format.
Ik wist echter niet dat er voorbeelden te over zijn in HelpMij. maar hiermee ga ik direct aan de slag. Een waardevolle tip in ieder geval.

Jouw wens (oplopend met 100 (100, 200, 300)? Of, zoals je in het voorbeeld hebt gemaakt als 101, 102, 103 etc?

Ik bedoel dus:
De eerste klant heeft no. 100, de volgende klant no. 101, de dan weer volgende 102, daarna 103 enz. enz.
Is het mogelijk de Autonummering op deze manier te programmeren of te beïnvloeden?

Excuus dat ik niet duidelijk ben geweest en te laat met een antwoord ben gekomen.

Groet,
Toby
 
Laatst bewerkt:
De eerste klant heeft no. 100, de volgende klant no. 101, de dan weer volgende 102, daarna 103 enz. enz.

Geen autonummering, maar zelf regelen.
Maak op het formulier waar je klanten invoert een gebeurtenis "voor invoegen".
Code:
Private Sub Form_BeforeInsert(Cancel As Integer)
    Me.KlantID = Nz(DMax("KlantID", "tbl1_Klantgegevens"), 99) + 1
End Sub
 
Is het mogelijk de Autonummering op deze manier te programmeren of te beïnvloeden?
Ja, dat kan. Normaal gesproken begint een Autonummerveld (met 1, maar een simpele truc is: maak een toevoegquery op je tabel, waarin je in het Autonummerveld de waarde 99 toevoegt. Verder doe je niks. Als je de query uitvoert, dan heb je één record met als ID 99. Vervolgens gooi je dat record weg. De volgende keer dat je een record toevoegt, krijgt dat het nummer 100. En zo verder.

Autonummers hebben als nadeel dat het verwijderen van een record een nummer verwijdert, zodat je dat normaal gesproken niet meer kan gebruiken. In mijn voorbeeldje, kun je de waarde 99 dus nooit meer gebruiken (als je dat zou willen). Normaal gesproken niet zo'n probleem, maar als je per ongeluk een verkeerd record aanmaakt (dubbel, omdat iemand anders dat net heeft ingevoerd bijvoorbeeld) en je gooit dat laatste record(nummer) weg, dan is dat nummer óók weg. Dat kun je dan alleen maar 'herstellen' door de database gelijk te Comprimeren en Herstellen. Daarmee herstel je namelijk óók de autonummering. Dus hoewel het onhandig is, kun je de nummerreekst toch continue houden zonder gaten. Maar je moet je hoofd er wel bij houden :).

Zelf gebruik ik de functie van xps niet; ik vind hem te beperkt. Ik gebruik liever een eigen functie die ik dan als Standaardwaarde op het veld met het klantnummer zet. Voorbeelden van die functie (in verschillende variëteiten) staan dus in het Access forum. Maar iedereen heeft zijn eigen aanpak :).
 
Zelf gebruik ik de functie van xps niet; ik vind hem te beperkt.
Dat mag je natuurlijk vinden. Maar zeg er dan wel bij wat de beperkingen zijn. Daar leren we dan allemaal weer van.
 
De meest gebruikte oplossing in applicaties (Access en anderen) is een aantal ranges voor nummering specifiëren. In de meeste databases kan je hiervoor één of meerdere sequentie(s) definiëren die je kan laten beginnen, eindigen en, als nodig, herzetten. Als je de eigen Access tabellen gebruikt kan je dit doen door zelf een aparte tabel aan te maken
bv. tblTellers :
* telID(long integer) : PK van de tabel, dit kan een autonumber zijn
* telNaam(text(50)): unieke naam van de teller
* telBegin(long Integer): beginwaarde (voor een teller die van 100 tot 199 loopt is dit 100),
* telWaarde(long integer): actuele tellerstand
* telEind (long integer): eindwaarde van de range (voor een teller die van 100 tot 199 loopt is dit 199)
* telStap: waarde waarmee de teller moet verhoogd worden (meestal is dat 1, maar als je zou willen dat de teller telkens met 2 of 10 moet verhoogd worden kan je dat hier instellen)

Met deze oplossing kan je voor elke klant een eigen teller aanmaken. Je moet dan zelf nog een functie in VBA schrijven om de teller op te roepen/ te verhogen. Of nog beter: maak een klassemodule aan zodat je de teller verder als een object in je applicatie kan gebruiken. Als je dit ziet zitten dan kan ik of iemand anders (waarschijnlijk zitten hier veel betere programmeurs dan ik) je wel helpen met deze functie / dit object.
 
Onnodig ingewikkelde oplossing van noella, maar als je het op die manier wilt doen: be my guest. Wat xps351 betreft: ik geef antwoord op vragen van TS, niet van helpers :). Als je wilt weten hoe je een flexibelere nummering kunt maken, dan moet je zelf een vraag posten :).
 
De humor lig in België nog steeds op straat. Waarvan akte!
(Gelukkig ben je het posten van volslagen nutteloze en niet ter zake doende berichtjes nog niet verleerd.... Let overigens op je taalgebruik, dat doet een eersteklasser beter)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan