Avatar billede jelle Nybegynder
25. maj 2002 - 00:51 Der er 12 kommentarer og
1 løsning

Funktion til at slette linie i tabel

Hej!
Jeg leder efter en funktion der kan gå en tabel igennem og slette de linier der findes flere gange, sådan så der kun er en linie.

Jeg kender slet ikke til noget Access programmering så jeg skal have skåret det hele ud i pap! :)

Det skal lige siges at der er omkring 15000 linier i tabellen!

Håber i kan hjælpe!
25. maj 2002 - 00:54 #1
Skal den checke om hele linien er ens eller blot et enkelt felt går igen?
Avatar billede jelle Nybegynder
25. maj 2002 - 00:55 #2
hele linien
25. maj 2002 - 01:00 #3
Er det en funktion, som skal kører flere gange, eller skal du blot have ryddet op i tabellen én gang for alle? (I så fald, kan jeg hurtigt beskrive en manuel måde at gøre det på, men hvis det skal være en generel funktion, så kræver det lidt mere...)
Avatar billede jelle Nybegynder
25. maj 2002 - 01:01 #4
en hurtig oprydning
25. maj 2002 - 01:09 #5
ok:
1) stil dig i databasevinduet og marker din tabel!
2) Tryk Ctrl+C efterfulgt af Ctrl+V
3) Kald den ny tabel f.eks. Temp (vælg "Kun struktur")
4) Lav en ny forespørgsel (uden tabeller) og vælg menuen Vis->SQL visning
5) Skriv: INSERT INTO [Temp] SELECT DISTINCT * FROM [DinGamleTabel]
6) Kør forespørgslen
7) Slet den gamle tabel og omdøb Temp-tabellen til det oprindelige.

NB: Hvis der er ralationer mellem den gamle tabel og andre tabeller i systemet, skal du være opmærksom på at få lavet disse igen med den nye tabel. Det er dog nok ikke tilfældet hvis der er dubletter.

/Thomas
25. maj 2002 - 01:34 #6
Her får du den automatiseret i VBA:

Public Function SletDubletter(Tabel As String)
    Dim db As Database
    Set db = CurrentDb
    DoCmd.CopyObject , "tmp" & Tabel, acTable, Tabel
    db.Execute "Delete From [" & Tabel & "]"
    db.Execute "INSERT INTO [" & Tabel & "] SELECT DISTINCT * FROM [tmp" & Tabel & "]"
    DoCmd.SetWarnings False
    DoCmd.DeleteObject acTable, "tmp" & Tabel
    DoCmd.SetWarnings True
End Function

Læg ovenstående kode i et modul.
Herefter kan du kalde funktionen på mange måder.
Du kan f.eks.:
-trykke Ctrl+G og taste: Call SletDubletter("Navn på din tabel")
-lave en makro, med handlingen "Afspil kode" og handlingsargumentet: SletDubletter("Navn på din tabel")
25. maj 2002 - 01:35 #7
Fortsat...

Her er den i en mere versions-uafhængig udgave:

Public Function SletDubletter(Tabel As String)
    DoCmd.SetWarnings False
    DoCmd.CopyObject , "tmp" & Tabel, acTable, Tabel
    DoCmd.RunSQL "Delete From [" & Tabel & "]"
    DoCmd.RunSQL "INSERT INTO [" & Tabel & "] SELECT DISTINCT * FROM [tmp" & Tabel & "]"
    DoCmd.DeleteObject acTable, "tmp" & Tabel
    DoCmd.SetWarnings True
End Function
25. maj 2002 - 01:46 #8
Kan du få det til at virke?
Avatar billede skov_p Praktikant
25. maj 2002 - 13:45 #9
Hvad er foreskellen på 'DoCmd.RunSQL "SQL String"' og 'CurrentDb.Execute "SQL String"'
25. maj 2002 - 13:48 #10
blandt andet kræver currentdb, at der er en referene til DAO.

Samtidig skal man ikke beskræfte 'CurrentDb.Execute "SQL String"' som man skal med DoCmd.
Avatar billede skov_p Praktikant
25. maj 2002 - 14:18 #11
beskræfte Hvad mener du med det? Hvis det betyder bekræfte ved jeg stadig ikke hvad du mener
Avatar billede jelle Nybegynder
25. maj 2002 - 15:03 #12
Sorry jeg ikke svarede men internettet gik ned her oppe i Grønland!!! :)

Men det virker, jeg har brugt det første svar.
25. maj 2002 - 16:09 #13
Tak, Jelle :o)

Skov-> Ja, jeg mener 'bekræfte' :o)
Hvis du kører en handlingsforespørgsel vha Docmd (f.eks. DoCmd.RunSQL "Delete From Tabel"), så bliver brugeren bedt om at bekræfte at man vil slette f.eks. 500 poster. Det gør du ikke med Currentdb.execute.
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