Avatar billede aksma Praktikant
31. januar 2006 - 15:58 Der er 11 kommentarer og
1 løsning

Finde den sidste produktion

Jeg har en tabel(MPSKART) med en række produktionen af forskellige varenumre. For hver produktion har jeg en færdigdato.
Hvordan opretter jeg en forespørgsel, der for hvert varenummer returnerer mig den produktion med den højeste færdigdato?

Det er formentlig en SQL-forespørgsel, der skal oprettes. Hvis den skal sættes ind i et kriteriefelt, hvilket felt skal den så indsættes i?
mvh
Aksma
Avatar billede -anders- Juniormester
31. januar 2006 - 18:34 #1
Hej
Prøv at oprette en ny forspørgsel vha. at benytte guiden simpel forspørgsel, medtag felterne Færdigdato, og Varenummer. I design på forspørgsel skal du klikke på ikonet Totaler. I feltet Færdigdato er du nogle muligerheder for at vælge diverse grupperinger, prøv at vælge Maks i udtrykket Total. Dette vil vise alle varenumre hvor dato altid er den højeste ifht. til dagsdato.

Jeg ikke lige om det er det du er ude efter, men prøv at kikke på det :o). I SQL ville det se sådan ud:

SELECT Tabel2.VareNr, Max(Tabel2.Fdato) AS MaksOfFdato
FROM Tabel2
GROUP BY Tabel2.VareNr;
Avatar billede aksma Praktikant
01. februar 2006 - 07:33 #2
Hej!
Den metode er jeg med på. Problemet er blot, at det ikke giver mig den sidste produktion. Nummeeret på den sidste produktion skal jeg bruge for at kunne finde blandt andet oplysninger om omkostningerne på den sidste produktion.
Hvis jeg også f.eks. sætter maks eller sidste ind på produktion i den akkumulerede tabel får jeg ikke entydig den samme produktion, som har den sidste afslutningsdato.

Jeg havde i forvejen fundet lidt hjælp til det her på hjemmesiden og har fået kreeret en forespørgsel med følgende SQL:
(SELECT Max([fxrdigdato]) FROM mpskart WHERE [produktion]=Tab.produktion GROUP BY MPSKART.VARENUMMER;)

Problemet ligger i, at forespørgslen ikke vil acceptere Group BY........

Hvis jeg fjerner dette kan forespørgslen køre, men den giver mig kun de produktioner, der er afsluttet på tabellens sidste dato for alle varenumre under et.
Den skulle give mig den sidste produktion pr. varenummer.
Kan du se, hvor fejlen ligger?
Aksma
Avatar billede -anders- Juniormester
01. februar 2006 - 08:57 #3
Der er sådan set ikke tale om en fejl, da en Group BY ikke kan genereres på mange felter i forspørgsel ifht. dit behov. Jeg tror at en rapport ville kunne klare det, har du prøvet det
Avatar billede aksma Praktikant
01. februar 2006 - 09:32 #4
Nej, men jeg skal bruge forespørgselen til at sammenkæde med en tabel, der hedder MPSpost via produktionsnr.
Avatar billede terry Ekspert
01. februar 2006 - 12:44 #5
if you dont get a solution then I will take a look later if you can send me your database (tables)

eksperten@NOSPAMsanthell.dk
remove NOSPAM
Avatar billede supertekst Ekspert
01. februar 2006 - 13:22 #6
Et andet bud - med følgende:

MPSkart-tabel (do. nuværende)
=============
produktionsnr: autonr
varenr: tekst
færdigdato: kort dato

MPSkartSorteret - forspørgsel (sortering af poster i MPSkart)
=============================
m/MPSkart-tabel-felterne
sorter stigende på varenr
sorter faldende på færdigdato

MPSkartFærdigdato - tabel  (heri opbygges en post pr. varenr med nyeste færdigdato)
=========================
identisk design som MPSkart- dog
produktionr: lang heltal

Formular (ubundet) med 1 knap - hændelse v/klik
================================================
VBA-kode:

Option Compare Database
Dim db, MPSkartSort, MPSkartFærdigdato
Private Sub Kommandoknap0_Click()
    houseKeeping
   
    selectSidsteFærdigdato
   
    MPSkartSort.Close
    MPSkartFærdigdato.Close
    db.Close
End Sub
Private Sub houseKeeping()
    Set db = CurrentDb
    Set MPSkartSort = db.OpenRecordset("MPSkartSorteret")
    Set MPSkartFærdigdato = db.OpenRecordset("MPSkartFærdigdato")
   
    sletFærdigdato
End Sub
Private Sub sletFærdigdato()
Dim f
    For f = 1 To MPSkartFærdigdato.RecordCount
        With MPSkartFærdigdato
            .Delete
            .MoveNext
        End With
    Next f
End Sub
Private Sub selectSidsteFærdigdato()
Dim f, varenr
    varenr = ""
   
    For f = 1 To MPSkartSort.RecordCount
        With MPSkartSort
            If varenr = "" Then
                varenr = .Fields("varenr")
                bygFærdigdato MPSkartSort
            Else
                If varenr <> .Fields("varenr") Then
                    bygFærdigdato MPSkartSort
                    varenr = .Fields("varenr")
                End If
            End If
            .MoveNext
        End With
    Next f
End Sub
Private Sub bygFærdigdato(rec)
    With MPSkartFærdigdato
        .AddNew
        .Fields("produktionsnr") = rec.Fields("produktionsnr")
        .Fields("varenr") = rec.Fields("varenr")
        .Fields("færdigdato") = rec.Fields("færdigdato")
        .Update
    End With
End Sub
Avatar billede aksma Praktikant
01. februar 2006 - 23:16 #7
Til supertekst!

Jeg har været optaget resten af dagen, men glæder mig til at forsøge din løsningsmodel i morgen.
Avatar billede aksma Praktikant
01. februar 2006 - 23:18 #8
Terry!

I'll try to make at reduced table and send it to you, if  "supertekst"solution don't work.
Avatar billede terry Ekspert
02. februar 2006 - 19:59 #9
Solution:
Make a query (qryLatestItemDates)
SELECT MP.Item, Max(MP.Finishdate) AS Finished
FROM MPSKART AS MP
GROUP BY MP.Item;


Then another
SELECT qryLatestItemDates.Item, qryLatestItemDates.Finished, MPSKART.Produktion
FROM MPSKART INNER JOIN qryLatestItemDates ON (MPSKART.Finishdate = qryLatestItemDates.Finished) AND (MPSKART.Item = qryLatestItemDates.Item)
ORDER BY qryLatestItemDates.Item;
Avatar billede terry Ekspert
02. februar 2006 - 20:00 #10
It could very likley be done in a single query, but this is quick and easy
Avatar billede aksma Praktikant
03. februar 2006 - 14:23 #11
Hej Supertekst!

Jeg har forsøgt med din løsning, men den kommer med en fejl "Duplicate option Statement". Terry er kommet med en løsning, der fungerer, så jeg giver ham pointene.
Jeg synes, det er fantastisk, at du har lavet så stort et arbejde for at hjælpe mig. Det skal du have en stor tak for.
Avatar billede supertekst Ekspert
03. februar 2006 - 17:27 #12
Det er OK
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