formule gezocht

Korstjens

Gebruiker
Lid geworden
9 jul 2023
Berichten
34
In een sub-formulier heb ik in de kopregel een tekstblok met deze formule staan: =Aantal([Veldnaam])

Nu wil in het hoofd-formulier hetzelfde doen maar dan ontbreekt natuurlijk de verwijzing naar de tabel van het sub-formulier.

Wat moet de formule worden?
  • De tabelnaam van het sub-formulier heeft een spatie! Mag dat?
  • Ik neem aan dat de tabelnaam ook tussen vierkante haakjes [Tabelnaam] moet staan en dat het dus zoiets moet worden. [Tabelnaam] [Veldnaam]
  • Moet er tussen de beide "bronnen" iets staan? Een ! ? + * spatie of iets anders?
 
Ad 1: ja, da mag maar is niet handig. Probeer het te vermijden. Kan dat niet, dan moet de naam tussen rechte haken staan.
Ad 2: nee, dat is geen verplichting. Access voegt ze zelf automatisch toe. Weghalen bij namen zonder spatie mag dus, maar levert verder niks op.
Ad 3: ja, ongeveer goed :). Gebruik de simpelste werkwijze: op het hoofdformulier gebruik je de Functie Opbouwfunctie voor expressies (Eigenschappen, Besturingselementbron, knop met drie puntjes)) en dan zoek je het subformulier op (dubbelklik op je database, open de groep formulieren, en zoek je subformulier), en selecteer je de formule en zet je daar het veld van het subformulier in. De beste manier om te voorkomen dat je typefouten maakt.

Lijkt mij overigens een Access vraag? Waarom niet in het Access forum?
 
Sorry, ik zit blijkbaar in een verkeerd forum? Waar zou ik moeten zijn?

Oké, ik heb het waarschijnlijk in mijn onkunde niet goed genoeg uitgelegd want het lukt me niet.

Ik ga het nog een keer proberen uit te leggen.
  • Ik heb Tabel A en Tabel B.
  • A is de tabel voor het hoofdformulier A.
  • B is de tabel voor een sub-formulier B.
  • Tussen één veld in beide tabellen is een een-op-veel relatie gemaakt.

Dat werkt goed.
Als ik het formulier A open (waarin dus B als subformulier zit) dan zie ik in het subformulier alleen het aantal dat bij een (zichtbaar) record in A hoort. Soms is dat 0, soms 3 en soms méér.
Als ik het formulier B alleen apart open dan heb ik het totaal van het bedoelde veld in alle records van tabel B.

Dat laatste zou ik óók in formulier A zichtbaar willen hebben. Bij een record zie ik dan in het subformulier het aantal dat bij dat specifieke record hoort, maar ik zie ook ergens op formulier A het totaal. Ik kan dus zien dat bij dat specifieke record 3 afbeeldingen van de totaal 2500 aanwezig zijn.

Als ik jouw instrukties volg dan doe ik het volgende:

  • Ik maak in formulier A een nieuw tekstvak.
  • Bij de eigenschappen van dat tekstvak ga ik naar Eigenschappen / Gegevens / Besturingselementenbron en klik op de drie puntjes.
  • Bij Expressielementen vindt ik het juiste formulier B, maar wat moet ik dan bij Expressie categoriën aanklikken? Ik heb er twee geprobeerd. Het tekstvak met de formule =Aantal([Merknummer]) en ook een keer de desbetreffende veldnaam apart.
    Ik krijg dan bovenin een formule Formulieren![Frm Merken]![Merknummer] die ik kopieer in het nieuw gemaakte tekstvak op formulier A.
  • Er komt dan automatisch een = en een [ voor en een ] achter. Ik krijg dan in dat tekstvak #Naam? of #Fout
  • Als ik er dan =Aantal([Formulieren]![Frm Merken]![Merknummer]) van maak dan krijg ik een melding dat er iets met de syntaxis van de expressie niet goed is (Geen idee wat dat betekent!)

Ik hoop dat ik het nu beter heb uitgelegd, ik doe dus duidelijk iets niet goed! Wil je het mij nog een keer stap voor stap uitleggen?
 
Je had het prima uitgelegd, dus de extra informatie voegt (wat mij betreft) niets toe. En aan mijn antwoord verandert dus eigenlijk óók niets :). Wellicht heb ik niet goed uitgelegd dat je in de Opbouwfunctie het tekstvak uit het subformulier moet ophalen. Niet het veld waarmee je de berekening maakt. De naam van dat tekstvak zie ik niet terug in je tekst. Zelf zou ik dat een herkenbare naam geven, zoals txtTotaalMerk zodat je het makkelijk kan terugvinden in de lijst met objecten.

Alternatief is, om de berekening gewoon opnieuw te maken, maar dan met DCount. Dan heb je dus wel een criterium argument nodig, gebaseerd vermoedelijk op het Merk uit het hoofdformulier. Is wel wat langzamer, maar tegenwoordig niet veel. Zeker niet bij kleine aantallen.
 
Je kan inderdaad met DCount werken. Maar omdat je kennelijk op het hoofdformulier het totale aantal records van tabel wilt zien, heb je geen criterium nodig. De besturingselementbron van het berekende veld op het hoofdformulier wordt iets als = DCount("*";"TabelB").
 
Ik zit blijkbaar nog niet helemaal op de goede golflengte van de ervaren Access gebruikers.📻

In het nieuwe tekstvak in het hoofdformulier staat nu: =[Formulieren]![Frm Merken]![txtTotaalMerk]
Als ik dan naar de Formulierweergave ga zie ik: #Naam?
Er gaat bij mij dus nog steeds iets niet goed. Ergens een verkeerde keuze gemaakt bij Opbouwfunctie voor expressies? Moet ik ook iets aanklikken bij "Expressiewaarden" in de derde kolom?

Als ik bij =[Formulieren]![Frm Merken]![txtTotaalMerk] het woord [Formulieren] weg haal zie ik alleen het aantal dat bij dat record hoort, dus niet het totaal. Dus dat is het ook niet :(

---------------
@OctaFish
Lijkt mij overigens een Access vraag? Waarom niet in het Access forum?
Waar kan ik dit forum vinden?
 
Als ik bij =[Formulieren]![Frm Merken]![txtTotaalMerk] het woord [Formulieren] weg haal zie ik alleen het aantal dat bij dat record hoort, dus niet het totaal. Dus dat is het ook niet
En als je eens raar doet en mijn voorstel probeert?

Waar kan ik dit forum vinden?
Volgens mij weet je dat best te vinden. Je hebt er eerder dit bericht gepost.
 
De besturingselementbron van het berekende veld op het hoofdformulier wordt iets als = DCount("*";"TabelB").
Wat moet er op de plaats van * ?

Kan ik zelf dit topic verplaatsen naar het juiste forum?
 
Je kan het letterlijk overnemen.
 
Je kan het letterlijk overnemen.
Nee, hij telt nu alle records, maar wat ik bedoel gaat zó niet lukken. Ik wil niet alle records in die tabel tellen, maar alleen de niet-lege records in één veld in die tabel.
 
= DCount("*";"TabelB"; NOT IsNull(JouwVeld)) dan?
 
Helaas,

Tabel naam is: Tbl Merken en veldnaam is Merknummer

=DCount("*";"[Tbl Merken]";Not IsNull([Merknummer]))

geeft een melding #Naam?
 
Sorry, aanhalingstekens vergeten:
=DCount("*";"[Tbl Merken]";"Not IsNull([Merknummer])")
 
Niet om het een of het ander (als de oplossing voor je werkt, dan is dat in beginsel natuurlijk prima) maar mijn oplossing van bericht #2 werkt gewoon perfect. Niks mis mee. Als die bij jou niet werkt, dan komt dat vermoedelijk omdat je ergens een fout hebt gemaakt. Zo heb ik een naam voor het tekstveld bedacht omdat we jouw database niet hebben, en ik dus nooit kan weten hoe het tekstveld bij jou heet. Als je dan mijn naam gebruikt (zoals ik in #4 heb aangedragen, en jij in #6 hebt neergepend) dan moet dat tekstveld natuurlijk wél die naam hebben.

Ik heb zelf even een testje gemaakt met een andere database, en daarin deze formule op het hoofdformulier gebruikt:
Code:
=[Scootmobiel].[Form]![txtTotaalTank]
Vergelijk je dat met jouw formule:
Code:
=[Formulieren]![Frm Merken]![txtTotaalMerk]
Dan zit er weinig verschil tussen. Twee verschillen: het gebruik van het woord "Form" en niet "Formulier", en, nog veel belangrijker, de volgorde klopt niet. Dat eerste komt wellicht omdat in de ene versie wellicht een Engelstalige versie wordt gebruikt, en in de ander een Nederlandse. Maar ik heb mijn formule dan ook gemaakt met de Functie Opbouwen, en die zet automatisch de juiste syntax neer. Dus ook de juiste benamingen en de juiste volgorde. Echt, je had het zonder meer kunnen oplossen (en in mijn ogen een betere oplossing) met deze oplossing, en niet met DCount. Die gaf ik ook alleen maar als alternatief.

Hier nog even een plaatje van die Functie Opbouwen:

Functie Opbouwen.png
 
Terug
Bovenaan Onderaan