zoekform(filter) met een subform in een subform op een hoofdform?

  • Onderwerp starter Onderwerp starter xurm
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

xurm

Gebruiker
Lid geworden
2 mrt 2011
Berichten
19
Hoi manne,
heb een dilemma, weet niet goed meer hoe op te lossen...

Mdb heeft 3 tabels, Klant, Auto, Facturen
1 klant kan meerdere autos hebben, die meerdere facturen voor reparaties kan hebben

Bedoeling is, een zoekfunctie op formheader met 3 onafhankelijke tekstveldjes
"naam klant", "plaatnummer", factuurnummer"
ALs je dan bijv. de naam (of gedeelte) ingeeft, zou ie in de detail
Code:
NAAM                                 X
      PLAATNR1                     X 
      PLAATNR2                     X 
            FACTUURNR1           X O
            FACTUURNR2           X O
      PLAATNR3                     X 
            FACTUURNR18          X O
            FACTUURNR256        X O
            FACTUURNR23          X O
moeten weergeven, waar de X een cmd knopje is om klant/plaat/factuur te verwijderen (telkens met al deze onderliggende gegevens)
en de O om de factuur te openen in een ander form.
(in code/code gezet om mooier te maken)
Wat ik wel al heb is de code om de filter toe te passen, momenteel doet ie wat die moet doen, maar toont alleen de eerste plaatnr en factuurnr/klant, in een tekstveldje.
dit omdat ik ik niet goed weet hoe het verder moet: zou ik een subform met de plaatnr moeten gebruiken waar dan een subform met de facturen in zit? lijkt me een beetje omslachtig....

verder: alles gegevns komt uit een selectquery, alles is ge inner joined met klantnr
klantnr is hetzelfde als autonr (dupli OK) en het veld facturen.klantnr.

code van de searchfilter....
http://www.access-programmers.co.uk/forums/showthread.php?t=99353
zelfde, alleen aangepast naar mijn MDB :)
 
Laatst bewerkt:
Het lijkt mij dat je eigenlijk twee afhankelijke subformulieren zou moeten hebben: één voor de auto's, en daarin weer één voor de facturen. Er vanuit gaande dat je een één-op-veel relatie hebt tussen Klant en Auto, en een één-op-veel relatie tussen Auto en Rekening. Je koppelt de respectievelijke subformulieren dan aan de parentID's, zodat je bij filteren op een klant de bijbehorende auto's ziet, en bij filteren op een auto de bijbehorende facturen. Het voorbeeldje maakt, zoals je ongetwijfeld hebt gezien, gebruik van één tabel, en dat zoekt uiteraard een stuk plezieriger....
 
Laatst bewerkt:
Er vanuit gaande dat je een één-op-veel relatie hebt tussen Klant en Auto, en een één-op-veel relatie tussen Auto en Factuur.

Een op veel relaties leg je tussen enerzijds klant en auto, anderzijds tussen klant en factuur.

Tardis
 
Kleine spraakverwarring: ik bedoelde Rekeningen per auto; facturen gaan uiteraard naar de klant.....
 
het is grotendeels gelukt.. maar ben de draad ff kwijt...

buiten lay-out (is het laatste ofc :) ) ziet er uit zoals ik wil:

http://i56.tinypic.com/24dj5v9.jpg

Hij doet wat hij moet doen: boven( gele) vakjes geef je de criteria, hij geeft je de reultaten, auto's in subform =ok, maar wanneer ik op een auto klik, vraagt hij de nummerplaat nog eens, dus mijn verwijzing laat een beetje achter... nochthans als ik de juiste nummerplaat overtyp (456-dfg in foto) krijg ik wel de juiste factuur te zien... zoals hierboven...

dus de subform haalt zijn gegevens correct op, de sub_subform vraagt hij achter zijn criteria, geprobeerd met uit het hoofdform te halen:
Code:
SELECT Query1.Plaatnrfac, Query1.KmStand, Query1.datum, Query1.Tbl_NAWs.debnummer, Query1.Tbl_Facturen.debnummer, Query1.Factuurnr
FROM Query1
WHERE ((Query1.Plaatnrfac)=[Forms]![frmclientsearch]![Plaatnummer]);
of uit de subform te halen (hetgeen hij eigenlijk moet doen, kolom "plaatnummer):
Code:
WHERE ((Query1.Plaatnrfac)=[Forms]![Subfrml_searchclients]![Plaatnummer]);

de "parameterwaarde opgeven" dialoogvenster zegt: Formulieren!frmclientsearch!Plaatnummer

bijkomende vraagje is:
ALs de gebruiker een klant wil wissen, zouden zijn auto's en facturen van de 2 andere tabellen ook gewist moeten worden...
de code voor een standard delrecord heb ik al, maar hoe zzeg je dat hij de gerelateerde records uit verschillende tabellen vernietigd ook?
 
Laatst bewerkt:
De laatste vraag is het simpelst: zie plaatje. De optie moet je aanzetten voor alle tabellen in de keten, anders blijven er records staan.
Je eerste vraag is een beetje lastig te beantwoorden zonder voorbeeld. Misschien kun je een testdb maken.
 

Bijlagen

  • Records trapsgewijs verwijderen.jpg
    Records trapsgewijs verwijderen.jpg
    66,8 KB · Weergaven: 75
prob 1 is opgelost \o/

prob2: heb de trapsgewijs verwijderen aangezet, knopje heeft als code:

Code:
Private Sub cmdDelrec_Click()
On Error GoTo Err_cmdDelrec_Click

DoCmd.RunCommand acCmdDeleteRecord

Exit_cmdDelrec_Click:
    Exit Sub

Err_cmdDelrec_Click:
    MsgBox Err.Description
    Resume Exit_cmdDelrec_Click
    
End Sub

zegt die me:
De opdracht of actie RecordVerwijderen is momenteel niet beschikbaar...

ik denk dat het te maken heeft met de filter die aanstaat... of RecordVerwijderen is juist op koffiepauze.. :)

DoCmd.SetWarnings False

mischien?
 
Krijg je een recordset wel weg (inclusief gekoppelde records dus) als je het record vanuit de eerste tabel verwijdert?
 
klanten en facturen kan verwijderen uit de tabel, gerelateerde records doet ie wel niet mee...
Auto's kan ik niet verwijderen: access crasht Oo
 
Je kan geen koppeling maken tussen Auto en NAW omdat het koppelveld niet hetzelfde is. Je probeert te koppelen met een numeriek veld, en een tekstveld, en dat gaat uiteraard niet lukken. Bovendien zitten er in auto recordverwijzingen die niet in NAW staan, dus ook daarop kan je niet koppelen. Dus dat moet je eerst aanpakken. Verder klopt (vind ik) je tabel Artikelen niet; die heb je gekoppeld aan Factuur? In artikelen sla je de brongegevens van de artikelen op, en die koppel je vervolgens aan Factuur middels een tabel Factuurregels (om hem maar een naam te geven). Ook in deze tabel moet je Trapsgewijs verwijderen aanzetten, want ook deze records (in Factuurregels) moeten er uit. Ik heb dit in jouw voorbeeldje aangepast, en op tabelniveau kon ik nu prima records verwijderen. Ik heb nog niet gezien op welk formulier je een knop wilt hebben; mag je nog even aangeven!
 
die numeriek met tekstveld is zo'n n00b fout! :s ik had dat niet gezien

kolom Autonr in tbl_auto heeft dezelfde klantnummer als kolom debnummer in NAW, wegens een klant verschillende auto's kan hebben staan er dus ook meerdere malen dezelfde debnummer in Autonr, en als de klant gedeleted wordt moeten al die auto's wel weg... ik dacht dat dit een verwijzing was?

artikelen houd gewoon bij wat je intyp in (sub) form facturen, ik denk dat dit overeenstemd met jouw factuurregels tabel?
artikelen moeten niet opvoorhand ingevoegd worden, dat zou 100000000000 records maken, klant vindt het gemakkelijker om alles te typpen (Don't ask me... :) ) dan met een dropbox te werken...
Over de knop:
Bij hoofdschakelbord klant zoeken selecteren oftewel Frmclientsearch met subform Subfrml_searchclients
en die zijn subform Subfrm_ SubfrmClientsrch.
de knoppen staan er al, vergrootglas zou de Frm_NAWs moeten openen met die klant zijn gegevens (blijft leeg nu), het kruisje zou de klant(record) met al zijn autos en facturen moeten verwijderen. (nadat filter is toegepast ofc)

alvast bedankt octa, you're the greatest!
 
Ik zal er nog even naar kijken.
 
Octa,
heb ondertussen het net een beetje afgezocht, en in denk dat het komt omdat de filter de subforms als "dirty" beschouwd,

Nu, dit zou me verwonderen sinds het veld waar ik men vergelijking leg (debnummer) als data nog latijd eennummer bevat... dus deze kan niet dirty zijn, of er subfroms nu opstaan of niet...
of, sinds de subs ook data opvragen it dezelfde tabellen waar hij records moet wissen, mss zelfde als je een form opendoet en dan de tabel in ontwerpmodus wil openen?
 
Een formulier krijgt de eigenschap Dirty als er iets op het formulier wijzigt, eerder niet. Vaak moet een formulier dan worden opgeslagen, en dat doe me met Me.Dirty=False. Records verwijderen op een formulier waarvan de tabel ook geopend is op subformulieren zal denk ik nooit gaan lukken; overigens is het niet echt de bedoeling om een subformulier op dezelfde tabel te baseren; dan is de initiële opzet niet helemaal jofel denk ik. Subformulieren zou je moeten gebruiken om gerelateerde records te laten zien uit andere tabellen... Maar ik heb er nog niet naar kunnen kijken, dus hou me er nog niet aan ;)
 
hey octa,
een klein vergeet-me-nietje.. :)

ik denkd dat de qery1 slecht opgebowd is met zijn INNER JOINS, waardoor "verwijderen niet beschikbaar is"...
 
Ben er al halfweg zelf door \o/
knop met deleterecordset vervangen door een docmd. openquery "delrec"
de delrec heeft als criteria Forms! search!debnummer

Werkt perfect buiten de auto's worden niet gedeleted, dit komt waarschijnlijk omdat ik geen referentieële intergriteit kan afdwingen tss autos en NAWs

ff gezocht en volgende gevonden:

"Know that the related fields must have the same data type. There are two exceptions to this rule."

maar ze zeggen niet welke?

besides,
Debnummer veld is numeriek met primaire sleutel, lange integer
Autonr is numeriek, geindexeerd (duplicaten OK), lange integer, deze kan ook niet veranderen wegens een klant verschillende autos kan hebben...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan