Verwijderquery met 2 tabellen

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
258
Hoi,

Als voorbeeld twee simpele tabellen genomen.
tblomzetdetail en tblomzetdetail_1.
Beide tabellen hebben het veld "bedrijf" dat in beide tabellen kan dit veld dezelfde waarde hebben.
VB tblomzetdetail.bedrijf kan 2 records met waarde 100 bevatten. En tabel tblomzetdetail_1.bedrijf ook dubbele waarden.
Via relaties heb ik de integriteit willen instellen maar lukt niet.
Moet 1 tabel unieke waarden bevatten om verwijderquery uit te voeren ?
Nogmaals in bijlage een snel voorbeeld. Als iemand dit aan het werken krijgt kan ik de regel van 3 toepassen en in de productie database werkend krijgen.
Heb al van alles geprobeerd maar krijg het niet werken.
 

Bijlagen

  • Omzet 4.zip
    50,3 KB · Weergaven: 17
Als simpel voorbeeld.

Je hebt twee tabellen A en B.
Deze tabellen hebben elk een veld "bedrijf" die met elkaar gelinkt zijn.
(Een left join van A naar B)
De waarde in veld "bedrijf" van tabel A kan dubbels bevatten. Als ook in tabel B.
Zie ook voorbeeld.
Tabel A veld "bedrijf" kan meerdere records hebben met waarde 100.
En dat kan ook in tabel B zo voorkomen.
Nu wil ik uit tabel A bedrijf 100 verwijderen maar dan moeten ook alle records van bedrijf 100 uit tabel B verwijdert worden.
Ik heb uw post van een aantal jaren (2009 :) ) gelezen en je kan bij relaties integriteit aanzetten maar toch lukt het niet.
Ik vermoed dat je een unieke sleutel in tabel A hebben.
Maar dat is niet. En op internet kan ik ook niet onmiddellijk hier iets voor terugvinden.
Bestaat er toch een manier, via SQL of dergelijk, om (ook al heb je in beide tabellen dubbele waarden) deze te verwijderen ?
Of wat zijn nu de exacte condities om gegevens uit meerdere tabellen te verwijderen ook al zijn deze in beide tabellen niet uniek ?
 
Je hebt twee tabellen A en B.
Deze tabellen hebben elk een veld "bedrijf" die met elkaar gelinkt zijn. (Een left join van A naar B)
De waarde in veld "bedrijf" van tabel A kan dubbels bevatten. Als ook in tabel B.
Laten we het kind hier maar gelijk het badwater in laten glijden, want hier ga je dus al de teil in. Je kunt nooit twee tabellen koppelen als er niet minstens één tabel is met een unieke waarde (sleutel). Een Left Join is in dit geval dus ook nogal onzinnig.

Ik vermoed dat je een unieke sleutel in tabel A hebben.
Dat vermoeden is dus helemaal correct.

Er is maar één mogelijkheid, en dat is om de records dus apart uit de tabellen te verwijderen. De optie waar ik het over had bestaat wel degelijk, maar die gaat dus uit van een tabel met unieke waarden voor (in dit geval) BedrijfID, waarbij je in de gekoppelde tabel dus óók een BedrijfID hebt zodat je een één-op-veel relatie kunt maken met Referentiële Integriteit. In het Relaties venster kun je dan <Referentiële integriteit afdwingen> aanvinken, en ook de opties <Gerelateerde velden trapsgewijs bijwerken> (zinloos als het sleutelveld een Autonummer is) en de optie <Gerelateerde records trapsgewijs verwijderen>. Daarnaast kun je ook nog met het Jointype rommelen, maar dat doen alleen mensen die geen idee hebben waar die opties voor bedoeld zijn :).

In jouw geval heb je dus geen 'moedertabel' met bedrijfsgegevens, dus je kunt nooit de RI afdwingen.

Overigens weet ik nog steeds niet wat de 'regel van 3' is :D.
 
OK. Thx had al zo'n vermoeden.
Dan is het maar verwijderen uit beide tabellen.


Als iemand dit aan het werken krijgt kan ik de regel van 3 toepassen

Dwz dat wat aan de gekregen code wat sleutelen en dan aanpassen aan de eigen code/database :eek:

Thx voor snelle support.
 
Met een formulier waarin je het bedrijf kiest, en een actie aan de keuzelijst is het met één klik uit te voeren ").
 
En op welke manier kan dit ?
En welke actie moet dit dan zijn ?
 
Ik zou dus een keuzelijst maken die alle bedrijven laat zien (als je in beide tabellen verschillende bedrijven kan hebben, dan moet je daar een UNION query voor gebruiken) die je met DISTINCT uniek maakt. Elk bedrijf komt dus maar één keer voor in de query van de keuzelijst. Vervolgens maak je met VBA twee aparte SQL statements die de records met dat BedrijfID weggooien. Je kunt dan in het queryvenster alvast een Delete query maken, met een filter op een BedrijfID in daar de SQL van kopiëren voor de VBA procedure. De syntax van die SQL kun je prima bewerken; je vervangt de door jou gekozen BedrijfsID door de naam van de keuzelijst.
Vervolgens voer je de queries na elkaar uit met CurrentDB.Execute strSQL, dbFailOnError. Dus je bouwt in je code twee keer een strSQL op en voert de Execute twee keer uit.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan