vba code werkt niet

huizemeul

Gebruiker
Lid geworden
17 mrt 2013
Berichten
121
Als ik Opvragen Alle Gegevens open en Filter in druk krijg ik alles. Dus goed. Maar wil ik Categorie, Relatie, Type of Betaalwijze selecteer geeft hij een fout aan. Wat doe ik niet goed. Het gaat dus om de koppelingen. Ikzelf blijf in rondjes draaien. Kunnen jullie helpen.
 

Bijlagen

check even de spelling van alle objecten die je gebruikt in de queries, bijvoorbeeld [Form_Opvragen Alle Gegevens] bestaat niet, wel [Opvragen Alle Gegevens]. Probeer eens alle spaties uit de namen te verwijderen, dat maakt het al wat gemakkelijker
 
Voordat je begint met het maken van een rapport zal eerst je databaseontwerp in orde moeten zijn en daar schort het nog aan. Het eerste wat ik doe als ik een nieuwe database onder ogen krijg, is naar de realties kijken (een Access database is immers een relationele database). Dan constateer ik dat er helemaal geen relaties aanwezig zijn.
Ook het maken van de relaties die nodig zijn, kunnen niet gelegd worden omdat de gegevens type niet overeenkomen. Dit speelt bij Categorie, Relatie en Type. In de betreffende tabellen is de sleutel een (numerieke) Id. Dan moet het overeenkomende veld in de tabel Inkomsten en Uitgaven ook numeriek zijn. Voor die drie velden is dat niet zo: het zijn tekstvelden.
Zie onderstaand plaatje voor de relaties die ik wel heb kunnen leggen.
rel.webp
Er zijn nog wat andere opvallende dingen.
Het formulier Opvragen Alle Gegevens bevat alleen niet-afhankelijke velden. Het formulier heeft dan ook geen recordbron nodig (hier ingesteld op Q gegevens), er worden op het formulier geen gegevens uit tabellen getoond.
In de code onder de knop Filter (gevalletje AI????) bouw je een string op waarmee je het rapport filtert. Je hoeft in de query (Q Gegevens) daarom niet te verwijzen naar het formulier om parameters mee te nemen.

Als bovenstaande zaken op orde zijn praten we verder.
 
xps351 Bedankt voor de hulp. Gelukkig geen commentaar maar hulp voor de leek (!)
Ik denk dat je het zo bedoelt.
Bericht automatisch samengevoegd:

Laatste even aangepast. Omschrijving bijgevoegd.
 

Bijlagen

Laatst bewerkt:
Niet helemaal.

Met een relatie zeg je in feite dat gegevens uit de ene tabel (bijvoorbeeld tblBetaalwijze) overeen moeten komen met die in een andere tabel (2 Inkomsten en Uitgaven). In een goed ontworpen en inhoudelijk consistente database komen er in de tabel 2 Inkomsten en Uitgaven geen betaalwijzen voor die niet in de tblBetaalwijze staan.
Voorwaarde om dat te garanderen en afdwingen is dat de overeenkomende velden in beide tabellen van het zelfde type zijn. Dus bijvoorbeeld allebei numeriek of allebei tekst. Bij betaalwijze is dat in orde, bij type, relatie en categorie niet.

Om ervoor te zorgen dat je echt nooit (bijvoorbeeld) een betaalwijze bij een betaling invoert die niet voorkomt in de tabel met (toegestane) betaalwijzen, zet je bij de relatie de eigenschap "Referentiële integriteit afdwingen" AAN. In mijn voorbeeld had ik dat gedaan:
Screen004.webp
In jouw database is dat niet het geval:
Screen003.webp

Je zult merken dat je in jouw database voor de betaalwijze de eigenschap wel AAN kunt zetten. De velden waarop de relatie ligt zijn van hetzelfde type en bij de betalingen komen geen waardes voor die niet in de tabel betaalwijzen voorkomen.

Voor de andere drie rubrieken lukt dat niet omdat de velden in de betalingen tabel als tekst zijn gedefinieerd en in de gerelateerde tabel als numerieke velden. In feite kan je nu in de betalingen tabel elke willekeurige waarde ingeven bij bijvoorbeeld type. En dat is een ongewenste situatie.
 
1788383950229.webp
Bericht automatisch samengevoegd:

Was dus fout het het veranderd.
Ik denk het laaste plaatje. Kan geen getallen invoeren bij Categorie, Relatie, Omschrijving en Type.
Bericht automatisch samengevoegd:

De goede ?
 

Bijlagen

  • Schermafbeelding 2026-09-02 235034.webp
    Schermafbeelding 2026-09-02 235034.webp
    19 KB · Weergaven: 0
  • Proefje4.zip
    Proefje4.zip
    67,3 KB · Weergaven: 0
Laatst bewerkt:
Terug
Bovenaan Onderaan