Acties:
  • 0 Henk 'm!

  • Zinu
  • Registratie: Augustus 2006
  • Laatst online: 04-09 10:27

Zinu

dat is gewoon hoe ik rol

Topicstarter
Ik ben een database aan het bouwen rond een videotheek, en ik wil bij het bekijken van filminformatie in het formulier graag kunnen zien hoeveel exemplaren ik van die film heb. Daarvoor heb ik een tabel met exemplaren, genaamd 'Band', met daarin een titelnummer om te weten om welke film het gaat. Dit is uiteraard allemaal op de juiste manier gelinkt met relaties.

Nu krijg ik alleen niet voor elkaar dit te laten zien. Ik wil dus graag dat in dat veld de waarde getoond wordt met het aantal regels dat het titelnummer van de betreffende film in diens regel heeft staan.

Ik heb al wat geklooid in het veld Besturingselementbron maar ik kreeg het maar niet voor elkaar.

Kan iemand me hierbij in de goede richting wijzen?

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Wat meer info over de opzet van je tabelstructuur zou helpen, het is nu een beetje gissen. Ik neem aan dat je een tabel hebt met Filmtitels, o.i.d. En een tabel Band (?) voor de individuele exemplaren. Dus iets als;

Filmtitels
Godfather
Sneeuwwitje

Band
Godfather exemplaar 1
Godfather exemplaar 2
Godfather exemplaar 3
etc

Correct?

Als je een formulier hebt met overzicht van titels, dan wil je dus ook weten hoeveel exemplaren je hebt. Je kan dit op twee manieren doen; een tekstvak met een DCount functie, of een subformulier die het aantal exemplaren toont. Voordeel van een subformulier is dat je meteen meer informatie per exemplaar kunt tonen. Is hij beschikbaar of al verhuurd, zo ja aan wie, wanneer komt'ie terug, etc.

Een dcount is vrij makkelijk, maar de syntax is wat vaag. =Dcount("[veld wat je wilt tellen]";"tabel waar het uit komt";"[voorwaarde waar het aan moet voldoen]")

In jouw geval zal het iets worden als;
=DCOUNT("[band_id]";"band";"[band_titelnummer]=" & [titelnummer])

Het laatste deel, & [titelnummer], geeft het nummer van de titel mee, wat je formulier op dat moment weergeeft. Btw, afhankelijk van je taal is het scheidingsteken een komma of een puntkomma.

Maar zoals gezegd lijkt een subformulier me nuttiger. Daar kan je meer mee, en in de voettekst ervan kan je ook totalen kwijt, met =Som() functies.

Acties:
  • 0 Henk 'm!

  • Zinu
  • Registratie: Augustus 2006
  • Laatst online: 04-09 10:27

Zinu

dat is gewoon hoe ik rol

Topicstarter
Hartstikke bedankt! Het werkt! Zoals jij het hebt begrepen zit het inderdaad in elkaar.
Ik denk zelf dat DCount geschikter is voor mijn situatie, aangezien ik geen subgegevensbladen kan gebruiken in die subformulieren, dus ik ga dat gebruiken.

Het enige probleem is dat dat '& titelnummer' gedeelte niet werkt. Als ik dat gebruik blijft het resultaat bij elke titel 0, maar als ik op die plaats één van mijn titelnummers invul laat hij het wel correct zien. Is er nog iets anders dat ik kan proberen?

[ Voor 29% gewijzigd door Zinu op 22-05-2010 22:33 ]


Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Hoe heet het veld waar de titelnummers in staan? Weet je zeker dat het in de recordbron van je formulier zit? Is het een numeriek of een tekstveld?

Acties:
  • 0 Henk 'm!

  • Zinu
  • Registratie: Augustus 2006
  • Laatst online: 04-09 10:27

Zinu

dat is gewoon hoe ik rol

Topicstarter
Het heet gewoon titelnummer, en het gegevenstype is tekst in de tabel.

Ik heb overigens nog even naar die subformulieren zitten kijken, maar kan het kloppen dat je daarin geen subgegevensbladen aan kunt maken?

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
ah, als het een tekstveld is, dan moeten er quotes omheen. Het wordt dan

Visual Basic:
1
=DCOUNT("[band_id]";"band";"[band_titelnummer]='" & [titelnummer] & "'")


(maar waarom een tekstveld? id-velden zijn in de regel numeriek)

Acties:
  • 0 Henk 'm!

  • Zinu
  • Registratie: Augustus 2006
  • Laatst online: 04-09 10:27

Zinu

dat is gewoon hoe ik rol

Topicstarter
Perfect, hartstikke bedankt!
Ik kwam er te laat achter dat het een tekstveld is, en de relaties waren al gemaakt. Is wat veel werk om het dan nog te veranderen :P Achja, het werkt nu.

Nu had ik nog één vraagje: Ik heb ook een formulier om een nieuwe klant in te voeren. Ik maak gebruik van klantnummers. Is het mogelijk om automatisch het eerstvolgende beschikbare nummer te pakken in dat veld? Nu moet het klantnummer handmatig ingevoerd worden, maar dat is ook niet ideaal...

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
veldtype numeriek, eigenschap autonummering ;)

Als je echter zelf de hand wilt hebben in de nummering, kan je een query maken die het hoogst bestaande klantnummer opzoekt (max-functie). Bij een nieuwe klant vraag je dat nummer op (dlookup, vergelijkbaar met dcount) en tel je er 1 bij op.

Acties:
  • 0 Henk 'm!

  • Zinu
  • Registratie: Augustus 2006
  • Laatst online: 04-09 10:27

Zinu

dat is gewoon hoe ik rol

Topicstarter
Oké, dan ga ik dat met die query eens proberen. Hoe doe je dat 1 erbij optellen?

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Een aparte query is eigenlijk niet eens nodig, bedacht ik me. Er is ook een dmax functie, die doet hetzelfde.

En je kan in het ontwerp van een tabel bij veldeigenschappen de defaultwaarden bepalen; nieuwe records krijgen dan standaard die waarde.

Voor het veld klantnummer wordt de standaardwaarde dan dmax("[klantnummer]","klanten")+1

Acties:
  • 0 Henk 'm!

  • Zinu
  • Registratie: Augustus 2006
  • Laatst online: 04-09 10:27

Zinu

dat is gewoon hoe ik rol

Topicstarter
Werkt prima. Het probleem met dat lijkt te zijn dat hij dat klantnummer niet ziet als een waarde. Hij laat bij het invoeren van een nieuwe klant in mijn formulier inderdaad netjes het eerstvolgende nummer zien maar wanneer ik dan het record toe wil voegen krijg ik de melding dat een primaire sleutel of index geen null-waarde kan bevatten.
Ik ga er maar vanuit dat dat met die functie te maken heeft. Kan dat kloppen, en zo ja, hoe moet ik dat oplossen?

Ik gebruik nu
code:
1
=DMin("[klantnummer]";"klant")+1


Mijn foutmelding heeft schijnbaar te maken met een kringverwijzing...

EDIT: Hij geeft dezelfde melding als ik 't via DLookup doe.

[ Voor 19% gewijzigd door Zinu op 23-05-2010 01:35 ]


Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Ik denk dat je deze formule in je formulier toegevoegd hebt, klopt dat? En daarnaast lijkt het er op dat je het aan de 'control source' van het tekstvak hebt gekoppeld, ipv aan de default value.

Je kan default values zowel op tabelniveau als op formulierniveau toewijzen, maar in dit geval is tabel handiger. Zet je tabel in ontwerpmodus, selecteer het veld, en onderaan verschijnen eigenschappen. Bij standaardwaarde/default value vul je dan de formule in. (Dmax overigens, geen DMin)

In je formulier hoef je dan geen formule meer toe te passen, het vak voor klantnummer kan gewoon het veld als bron hebben.

Overigens; dit is wel een omslachtige en zeer ongebruikelijke manier om sleutelvelden te definieren. Ik raad het je sterk af. Access kan zelf prima records automatisch nummeren, daar heb je helemaal geen omkijken naar.

Acties:
  • 0 Henk 'm!

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 29-07 11:23
Voor de eerste record gaat deze methode fout. Er is nog geen waarde om 1 bij op te tellen.
Probeers eens:

code:
1
=nz(dmax("klantnummer";"klanten)) +1

Houdoe


Acties:
  • 0 Henk 'm!

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 29-07 11:23
Marko_J schreef op zondag 23 mei 2010 @ 09:00:
Overigens; dit is wel een omslachtige en zeer ongebruikelijke manier om sleutelvelden te definieren. Ik raad het je sterk af. Access kan zelf prima records automatisch nummeren, daar heb je helemaal geen omkijken naar.
Ik ben het hier wel mee eens, maar Access begint (helaas) altijd bij 1. Met de dmax methode kan je beginnnen waar je wil.
Het grootste nadeel is eigenlijk dat als je het laatst ingevoerde record verwijderd, dat nummer nog eens wordt gebruikt, en dat wil je nooit.

Houdoe


Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Witte schreef op zondag 23 mei 2010 @ 09:05:
Access begint (helaas) altijd bij 1. Met de dmax methode kan je beginnnen waar je wil.
Ook met autonummering kan je starten waar je wil, maar je moet er even voor klooien :)
Het grootste nadeel is eigenlijk dat als je het laatst ingevoerde record verwijderd, dat nummer nog eens wordt gebruikt, en dat wil je nooit.
Dit is zeer gevaarlijk inderdaad. Access deelt met autonummering een waarde altijd maar 1x uit, dan blijven ze uniek. Het enige moment waarop ik de DMax-methode hanteer is voor factuurnummering, omdat daar geen gaten in mogen vallen. Maar dat veld maak ik dan niet de sleutel.

[ Voor 11% gewijzigd door Marko_J op 23-05-2010 09:14 ]


Acties:
  • 0 Henk 'm!

  • Zinu
  • Registratie: Augustus 2006
  • Laatst online: 04-09 10:27

Zinu

dat is gewoon hoe ik rol

Topicstarter
Marko_J schreef op zondag 23 mei 2010 @ 09:00:
Ik denk dat je deze formule in je formulier toegevoegd hebt, klopt dat? En daarnaast lijkt het er op dat je het aan de 'control source' van het tekstvak hebt gekoppeld, ipv aan de default value.

Je kan default values zowel op tabelniveau als op formulierniveau toewijzen, maar in dit geval is tabel handiger. Zet je tabel in ontwerpmodus, selecteer het veld, en onderaan verschijnen eigenschappen. Bij standaardwaarde/default value vul je dan de formule in. (Dmax overigens, geen DMin)

In je formulier hoef je dan geen formule meer toe te passen, het vak voor klantnummer kan gewoon het veld als bron hebben.

Overigens; dit is wel een omslachtige en zeer ongebruikelijke manier om sleutelvelden te definieren. Ik raad het je sterk af. Access kan zelf prima records automatisch nummeren, daar heb je helemaal geen omkijken naar.
Als ik het op tabel-niveau doe krijg ik de melding dat Dmax en Dmin onbekende functies zijn... Vreemd.

Ik heb toch maar even alles opnieuw gedaan met AutoNummering... maar hoe krijg ik nu dat hij in de formulier bij het invoerveld Klant automatisch het volgende nummer toont?
Tevens ben ik op zoek naar een manier hoe ik in dat formulier automatisch een nieuwe laat maken.. Nu moet ik telkens als ik mijn formulier dubbelklik onderin op het icoontje van Nieuwe (lege) record drukken. Is er niet eens waarmee ik dit automatisch kan laten gebeuren?

[ Voor 44% gewijzigd door Zinu op 23-05-2010 12:40 ]


Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Zinu schreef op zondag 23 mei 2010 @ 12:10:
Als ik het op tabel-niveau doe krijg ik de melding dat Dmax en Dmin onbekende functies zijn... Vreemd.
woops, ik ook. Mag kennelijk niet op tabelniveau
Ik heb toch maar even alles opnieuw gedaan met AutoNummering... maar hoe krijg ik nu dat hij in de formulier bij het invoerveld Klant automatisch het volgende nummer toont?
Dat veld wordt vanaf nu dus automatisch ingevuld (beter!), de gebruiker hoeft er dus niets meer mee - hij kan het toch niet bewerken. Je kan het veld wel gewoon tonen; sleep het in je formulier in ontwerpmodus, vanuit de veldlijst (beeld > veldlijst). Maar zet de eigenschappen ervan op locked en disabled, dan is het read-only en komt de cursor er nooit in te staan. En als het goed is toont hij bij een nieuw record dan wel het uit te delen nummer.
Tevens ben ik op zoek naar een manier hoe ik in dat formulier automatisch een nieuwe laat maken.. Nu moet ik telkens als ik mijn formulier dubbelklik onderin op het icoontje van Nieuwe (lege) record drukken. Is er niet eens waarmee ik dit automatisch kan laten gebeuren?
Sleep eens een button in je formulier, vanuit de werkbalk Toolbox (weet niet hoe hij heet in nederlands). Er start dan als het goed is een wizard. Handig voor simpele navigatiedingen (o.a. nieuw record dus)

Als het formulier alleen bedoeld is om nieuwe klanten mee in te voeren, kan je eventueel de eigenschappen van het formulier op data-entry zetten, dan staat er altijd meteen een nieuw record klaar. Maar dat is bijna nooit echt handig.. tenzij er veel records achter elkaar aangemaakt moeten worden (data-entry dus).

Maareh.. doe'es boek kopen. Stuk handiger en uiteindelijk sneller dan al je beginnersvragen hier stellen ;)
Pagina: 1