17. december 2005 - 20:32Der er
24 kommentarer og 1 løsning
Problemmer med Visning af korrekte "Poster" i forespørgsel
Hej..
Jeg har lidt svært ved at forklare mit spørgsmål vha. tekst, så i får nogle tal, som viser hvad jeg i øjeblikket får vist i min forspørgsel. og bagefter viser jeg de tal, som jeg ønsker der skulle blive vist i stedet.
Det hele drejer sig i store træk om 2 tabeller. Den ene af dem indeholder feltet [TurID] og som er et tal felt. Den anden indeholder feltet [ID] som er et autonummereringsfelt.
De to tabeller er relaterede.
Nu har jeg så lavet en forspørgsel, og uden nogen som helst kriterier sat op, får jeg vist følgende:
[TurID]: [ID]: 1 1 1 2 1 3 2 4 2 5 2 6
Det jeg så ønsker at få vist, er:
[TurID]: [ID]: 1 3 2 6
Altså KUN et af hver [TurID], og det skal være det af [TurID]'ene som har det højeste [ID]
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Det har jeg prøvet nu. Har aktiveret "Total:" muligheden, og har valgt denne til Maks under [ID].
Der kommer nu bare intet til resultat.
Kan sige så meget om [ID], at det ikke er det felt som er relateret mellem de to tabeller. Det er i stedet [TurID] som er relateret til et helt andet felt kaldet [T-TurID] (og dette felt er jo så i samme tabel som [ID]).
Forresten.. kan sagtens følge dig i det du ville gøre, og havde sådan set selv prøvet at lede efter lige netop den mulighed, og har førhen haft det til at virke med "lignende" opgaver i forespørgelser.
Prøv at lave endnu en forespørgsel, som kun indeholder de to felter [TurID] og Maks[ID]. Forbind de to forespørgsler med [ID]og du skulle få det resultat du ønsker.
knudj>If I have a table (tblTur) which contains only TurID as primary key TurID 1 2 and another table (tblID) which contians a froegign key (TurID) and and an autonumber field (ID) TurID ID 1 1 1 2 1 3 2 4 2 5 2 6
THen if I make a query SELECT tblTur.TurID, Max(tblID.ID) AS MaxOfID FROM tblTur INNER JOIN tblID ON tblTur.TurID = tblID.TurID GROUP BY tblTur.TurID;
This should give you what you want.
But if you want to include other field in the output then this may not work.
Altså det du siger, er at jeg laver en ny forspørgsel. I denne forespørgsel skal jeg så slette den gamle JOINT forbindelse (eller hvad det nu er man kalder dem.) og så skal jeg trække en forbindelse mellem [ID] og [TurID] ?
Hvad så med resten af felterne som gerne skulle vises ? Hvornår får jeg så dem vist ?
Hej Terry.. OKay, det kunne godt være en mulighed. Det er bare det problem, at der er en del flere felter som skal indgå. Kan dette ikke lade sig gøre så ?
Jeg kan ikke rigtigt få det til at virke.
Tabellerne hedder også i stedet
tblTransport.TurID
tblTransportBiler.ID
[ID] tallet har som sådan ikke noget at gøre med [TurID]..
Jeg har selv lige ved et tilfælde fået den til at vise det jeg ønsker ved at bruge følgende SQL:
SELECT Max(tblTransportBiler.ID) AS MaksOfID, tblTransportBiler.[T-TurID], tblTransport.TurID FROM tblTransport INNER JOIN tblTransportBiler ON tblTransport.TurID = tblTransportBiler.[T-TurID] GROUP BY tblTransportBiler.[T-TurID], tblTransport.TurID;
Der er nu bare det problem, at jeg ikke længere kan få lov at Redigere i nogle af de viste poster. Hvad kan det være ?
Det er lidt det samme kode som du skriver Terry, men den gør det heller ikke muligt at kunne redigere i Posten.. har selv lige indpasset den så den ser sådan har ud:
SELECT tblTransport.TurID, Max(tblTransportBiler.ID) AS MaksOfID FROM tblTransport INNER JOIN tblTransportBiler ON tblTransport.TurID = tblTransportBiler.[T-TurID] GROUP BY tblTransport.TurID;
When you make an aggregate (Totals) query then your selecting information form different records. So your not allowed to update because there is no unique record.
OKay, det lyder jo ikke så godt. Men kan ikke så hvorfor jeg henter fra forskellige Poster. Det eneste jeg ønsker, er nemlig at få vist Posterne, sådan at der kun er én af hver [TurID], og den skal vise de [TurID] poster som indeholder den størst mulige værdi af [ID]. Altså det resultat som jeg har vist et eksempel på i mit først stillede Spørgsmål.
Det jeg i første omgang havde ønsket, var at jeg kunne lave en Fortløbende Formular, hvori jeg havde en Underformular. Dette fandt jeg så ud af ikke kunne lade sig gøre, men det er som sådan ikke noget problem idet at jeg ikke havde behov for at se alle Posterne i underformularen som var tilhørende posterne i Hovedformularen. Det eneste jeg ønskede at se var den sidst oprettede, og det er så her at [ID] får sin betydning idet at den hele tiden bliver større og større, og derfor viser den Sidst oprettede (altså den største værdi).
Det som mine poster i store træk viser er en masse Transporter [tblTransport], hvorpå der kan hægtes mere end én bil på [tblTransportBiler].
I stedet for konstruktionen formular+underformular kan du også lave det som kombobox+ formular. Først laver du en forespørgsel med felterne TurID og maks[ID], som du bruger til komboboxen. Når du valgt en post her finder du posten i formularen med det ønskede [ID] ved hjælp af (AfterUpdate)
[ID].SetFocus DoCmd.GoToRecord [komboboxen]
Posterne i formularen kan nu redigeres fordi de poster, som ikke kan redigeres ligger i komboboxen.
Alle de ideer som i skriver er jeg ikke helt sikre på hvordan skal kunne fungere i en Fortløbende formular.
fynbohans> Har prøvet dit foreslag men kan ikke helt få det til at virke på den måde som du snakker om. Jeg har lavet en Combobox og har brugt den forspøgsel som viser de korrekte poster. Derefter lagde jeg følgende ind på comboboxens EfterOpdatering hændelse:
Private Sub Combo_AfterUpdate() [ID].SetFocus DoCmd.GoToRecord Combo End Sub
Forstod ikke helt det med at jeg skulle skrive "DoCmd.GoToRecord [komboboxen]", så gik bare ud fra at du mente navnet på combo'en.
Jeg har lige siddet og prøvet mig lidt frem med Terry's metode. Det var PRÆCIS det jeg ledte efter. nu kan jeg endelig få lov til at redigere i posten og få vist lige netop de ønskede poster. Der var dog lige lidt små-ændringer for at den passede til mine tabeller. SQL koden som viser det korrekter er derfor blevet til:
SELECT tblTransport.TurID, tblTransportBiler.ID FROM tblTransport INNER JOIN tblTransportBiler ON tblTransport.TurID = tblTransportBiler.[T-TurID] WHERE (((tblTransportBiler.ID)=(SELECT Max(ID) from tblTransportBiler WHERE tblTransportBiler.[T-TurID] = tblTransport.[TurID])));
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.