Avatar billede knudj Nybegynder
17. december 2005 - 20:32 Der 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]

Hjælp ?

Mvh
Knud
Avatar billede fynbohans Nybegynder
17. december 2005 - 21:23 #1
Du skriver de to tabeller er relaterede. Er det [ID] som forbinder de to tabeller?
Avatar billede fynbohans Nybegynder
17. december 2005 - 21:28 #2
Overflødig kommentar! I forspørgslen vælger du for [ID] Totaler/maks.
Avatar billede knudj Nybegynder
17. december 2005 - 22:05 #3
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]).
Avatar billede knudj Nybegynder
17. december 2005 - 22:07 #4
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.
Avatar billede fynbohans Nybegynder
18. december 2005 - 00:13 #5
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.
Avatar billede terry Ekspert
18. december 2005 - 10:49 #6
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.
Avatar billede knudj Nybegynder
18. december 2005 - 10:51 #7
Godmorgen..

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 ?
Avatar billede terry Ekspert
18. december 2005 - 10:52 #8
just noticed the name for the foreign key field. (t-turID)

SELECT tblTur.TurID, Max(tblID.ID) AS MaxOfID
FROM tblTur INNER JOIN tblID ON tblTur.TurID=tblID.[T-TurID]
GROUP BY tblTur.TurID;
Avatar billede knudj Nybegynder
18. december 2005 - 11:02 #9
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 ?
Avatar billede knudj Nybegynder
18. december 2005 - 11:05 #10
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;
Avatar billede terry Ekspert
18. december 2005 - 11:21 #11
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.
Avatar billede knudj Nybegynder
18. december 2005 - 11:33 #12
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.
Avatar billede fynbohans Nybegynder
18. december 2005 - 11:40 #13
Skal forespørgslen stå alene eller skal den bruges som underlag for en formular eller
rapport?
Avatar billede knudj Nybegynder
18. december 2005 - 11:48 #14
Den skal bruges til en formular.

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].
Avatar billede fynbohans Nybegynder
18. december 2005 - 12:36 #15
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.
Avatar billede terry Ekspert
18. december 2005 - 12:45 #16
if you have an sub form which is related to the main form through TurID then you should be able to use a query for the sub form and include a criteria

WHERE ID = (SELECT Max(ID) from YourTable T WHERE T.TurID = YourOtherTable.[t-TurID])

or something like that
Avatar billede terry Ekspert
18. december 2005 - 12:45 #17
and if you can your sub select to work in the criteria then try using Dmax()
Avatar billede knudj Nybegynder
18. december 2005 - 13:17 #18
hej begge 2  - jeg prøver lige jeres udmærkede forslag og vender tilbage
Avatar billede knudj Nybegynder
18. december 2005 - 18:16 #19
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.
Avatar billede knudj Nybegynder
18. december 2005 - 18:25 #20
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])));
Avatar billede fynbohans Nybegynder
18. december 2005 - 18:38 #21
Den bundne kolonne i komboboxen skal være [ID]. Efter opdateringen har komboboxen denne værdi.
Avatar billede fynbohans Nybegynder
18. december 2005 - 18:57 #22
Hvis det ikke virker hos dog er det fordi jeg skriv forkert!
"DoCmd.GoToRecord [komboboxen]" skal være
DoCmd.FindRecord [komboboxen]. Beklager!
Avatar billede terry Ekspert
18. december 2005 - 19:16 #23
Does that mean you have a solution Knud?
Avatar billede knudj Nybegynder
21. december 2005 - 21:19 #24
Terry>
Ja, det betyder det. Dit svar var lige det jeg ledte efter.
Avatar billede terry Ekspert
21. december 2005 - 21:22 #25
Thanks Knud
have a good evening
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