Avatar billede pblv Nybegynder
19. august 2004 - 13:35 Der er 10 kommentarer og
1 løsning

SQL og løkke

Hey,

Jeg har denne jeg gerne vil køre via VBA

DoCmd.RunSQL "DELETE * FROM tilmelding WHERE Cpr = " & VÆRDI

Der skal så ligge en SELECT løkke uden om, som henter de værdier der passer i et andet SQL kald, hvor der så skal slettes i tilmeldinger.

Hvordan er syntaxen for det i Access' VB?
19. august 2004 - 13:48 #1
Jeg er ikke helt sikker på, hvad du vil? Men hvis du vil køre en anden Select-query for at udvælge hvilke CPR-numre, som skal slettes, så er det nemmere at lægge det hele i én SQL-sætning.

F.eks. således:

DoCmd.RunSQL "DELETE * FROM tilmelding WHERE Cpr in (Select CPR From AndenTabel Where Fornavn = 'Kurt')"

/Thomas
Avatar billede pblv Nybegynder
19. august 2004 - 14:05 #2
Hey.

Det lyder smart det du siger, men jeg kan ikke helt få det til at virke...

Det er sådan jeg så trro mit kald må være:

DELETE * FROM T_Firma WHERE ID IN (SELECT FirmaID FROM T_Firma, T_Firmakaede WHERE FirmaID = ID AND KaedeID = 113

Jeg har to tabeller. En der indeholder firmaer, og en der knytter nogle af firmaerne til hianden (som firmaer og kæder)
Det jeg vil, er at slette de firmaer i tabellen, som hænger sammen med et bestemt firma.
Avatar billede pblv Nybegynder
19. august 2004 - 14:08 #3
Det var noget rodet SQL jeg fik rodet mig ud i. Det der ikke virker er:

DELETE * FROM T_Firma WHERE ID IN (SELECT FirmaID FROM T_Firmakaede WHERE KaedeID = 113

Kan du fortælle mig hvorfor?
Avatar billede trer Nybegynder
19. august 2004 - 14:11 #4
Du mangler den afsluttende parantes i din sql...

Hvis du sætter relationships op i Access og angiver cascade delete behøver du i øvrigt ikke at gøre mere - så vil Access automatisk udsøge og slette referencer når du sætter primær-recorden.
19. august 2004 - 14:12 #5
hmm, du skal selvfølgelig huske en parentes til sidst:
DELETE * FROM T_Firma WHERE ID IN (SELECT FirmaID FROM T_Firmakaede WHERE KaedeID = 113)

Har du sikret dig, at ID og FirmaID er samme datatype?
Avatar billede pblv Nybegynder
19. august 2004 - 14:16 #6
Yeps, det er samme type, og jeg havde parantesen, det var bare dårligt copy-pastet over...

Kan det være andet?
Avatar billede pblv Nybegynder
19. august 2004 - 14:16 #7
Trer - jeg bryder mig ikke helt om det cascading der... føler ikke jeg helt har styr på hvad den sletter, så jeg ville helst gøre det manuelt.
19. august 2004 - 14:18 #8
Har du prøvet at køre SELECT FirmaID FROM T_Firmakaede WHERE KaedeID = 113 i en seperat forespørgsel? Returnerer den de rigtige poster?
Avatar billede pblv Nybegynder
19. august 2004 - 14:19 #9
Yeps... den returnerer 114 og 115 som den skal
Avatar billede pblv Nybegynder
19. august 2004 - 14:23 #10
ahh.... den kan ikke slette dem i T_Firma, fordi posterne også er i T_Firmakaede og de hænger sammen... så hvis jeg bare fjerner den sammenhæng, så skulle den være der.

Tak for hjælpen.
19. august 2004 - 14:24 #11
Selv tak :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester