Avatar billede pemaje Nybegynder
29. november 2007 - 16:23 Der er 5 kommentarer og
1 løsning

Slet poster i tabel 1 med opslag i tabel 2

Hej alle

Jeg har en lagerdatabase hvori der er en tabel over vare (T_VARER). I denne er der opført varer med angivelse af LAGERNUMMER, LOKATION, BEHOLDNING m.v. Det er nu ved at være slutningen på året og jeg skal derfor lave status. Jeg tæller hver lokation op via scanner og får så via en tekstfil en tabel (S_STATUS), der indeholder oplysninger om det der ligger på de enkelte lokationer (S_STATUS indeholder felterne LOKATION, LAGERNUMMER og BEHOLDNING).

Det jeg vil er, at opdatere T_VARER med de lokationer der matcher med dem i S_STATUS, indsætte de varer fra S_STATUS der ikke matcher og herefter overføre de poster der reelt ikke ligger på lokationen (de der ikke er blevet opdateret) fra T_VARER til T_VARER_STATUSFEJL (T_VARER_STATUSFEJL indeholder samme felter som T_VARER), således at min database påny matcher den fysiske lokation.

Kan nogen hjælpe?
Avatar billede pemaje Nybegynder
29. november 2007 - 16:25 #1
Når jeg skriver matcher mener jeg på LAGERNUMMER OG LOKATION
Avatar billede fdata Forsker
29. november 2007 - 19:00 #2
Under forudsætning af at du har valgt LAGERNUMMER og LOKATION som UnikID, burde følgende lille rutine klare det:

Sub Opdater()
  ' Opdater eksisterende
  DoCmd.RunSQL "UPDATE S_STATUS INNER JOIN T_VARER ON (S_STATUS.Lokation = T_VARER.Lokation) AND (S_STATUS.Lagernummer = T_VARER.Lagernummer)" & _
        " SET T_VARER.Beholdning = [S_STATUS].[Beholdning]"
  ' Opret nye
  DoCmd.RunSQL "INSERT INTO T_VARER (Lagernummer, Lokation, Beholdning)" & _
        " SELECT S_STATUS.Lagernummer, S_STATUS.Lokation, S_STATUS.Beholdning" & _
        " FROM S_STATUS LEFT JOIN T_VARER ON (S_STATUS.Lagernummer = T_VARER.Lagernummer) AND (S_STATUS.Lokation = T_VARER.Lokation)" & _
        " WHERE T_VARER.Lagernummer Is Null"
  ' Flyt ukendte
  DoCmd.RunSQL "INSERT INTO T_VARER_STATUSFEJL (Lagernummer, Lokation, Beholdning)" & _
        " SELECT T_VARER.Lagernummer, T_VARER.Lokation, T_VARER.Beholdning" & _
        " FROM T_VARER LEFT JOIN S_STATUS ON (T_VARER.Lagernummer = S_STATUS.Lagernummer) AND (T_VARER.Lokation = S_STATUS.Lokation)" & _
        " WHERE S_STATUS.Lagernummer Is Null"
  ' Slet ukendte
  DoCmd.RunSQL "DELETE T_VARER.*, S_STATUS.Lagernummer" & _
        " FROM T_VARER LEFT JOIN S_STATUS ON (T_VARER.Lagernummer = S_STATUS.Lagernummer) AND (T_VARER.Lokation = S_STATUS.Lokation)" & _
        " WHERE S_STATUS.Lagernummer Is Null"
End Sub

Sæt evt. en <DoCmd.SetWarnings False> før kaldene - og husk <DoCmd.SetWarnings True
> til slut.
Avatar billede pemaje Nybegynder
29. november 2007 - 20:19 #3
Såvel LAGERNUMMER som LOKATION kan forekomme flere gange, så dermed kan de vel ikke være UnikID (hvad mener du helt præcis med UnikId.
Eksempelvis S_STATUS:

LOKATION;LAGERNUMMER;ANTAL
10110;1000000001;12
10110;1000000002;3
12030;1000000001;4
12030;2235656767;30

Her er der to varer på lokation 10110 og to på 12030 samt lagernummer 100000001 går igen på to forskellige lokationer. Såvel LAGERNUMMER som LOKATION er tekst-strenge.
Avatar billede pemaje Nybegynder
30. november 2007 - 18:34 #4
Ovenstående er langt hen ad vejen fin, men mit store problem er følgende:
' Flyt ukendte
  DoCmd.RunSQL "INSERT INTO T_VARER_STATUSFEJL (Lagernummer, Lokation, Beholdning)" & _
        " SELECT T_VARER.Lagernummer, T_VARER.Lokation, T_VARER.Beholdning" & _
        " FROM T_VARER LEFT JOIN S_STATUS ON (T_VARER.Lagernummer = S_STATUS.Lagernummer) AND (T_VARER.Lokation = S_STATUS.Lokation)" & _
        " WHERE S_STATUS.Lagernummer Is Null"

Denne flytter alle andre poster end de der er angivet i S_STATUS

Hvis S_STATUS indeholder følgende:

LOKATION;LAGERNUMMER;ANTAL
10110;1000000001;12
10110;1000000002;3
12030;1000000001;4
12030;2235656767;30

Så er det kun alle andre LAGERNUMMER på LOKATION 10110 og 12030 der skal INSERT INTO i T_VAREFEJL og DELETE i T_VARER. Alle andre lokationer skal være uberørte
Avatar billede pemaje Nybegynder
30. november 2007 - 20:39 #5
Har selv fundet svaret. Har lavet en række forespørgelser, som jeg kalder i VB kode
Avatar billede fdata Forsker
01. december 2007 - 13:21 #6
OK. Ked af at du ikke kunne bruge min ide.
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