Avatar billede chris Nybegynder
19. januar 2008 - 00:17 Der er 21 kommentarer og
2 løsninger

Update query med højeste og laveste værdi indsættes

Jeg har en tabel hvor jeg skal opdatere 2 felter, med en værdi fra en anden tabel.

Jeg skal for hver topic finde tilhørende thread og lede efter den første [Thread_ID] og sidste [Thread_ID], og fylde i 'tblTopics'.


tblThreads (ca 316.000 records)
[Thread_ID] - [Topic_ID] - [Text] - [dato]


tblTopics (ca. 21.000 records)
[Topic_ID] - [Thread_Start_ID] - [Thread_Last_ID] - [Subject]


Det jeg ønsker er at opdatere 'tblTopics', med [Thread_Start_ID] - [Thread_Last_ID], med info fra 'tblThreads'.


Har førsøgt mig lidt frem og tilbage i Access med en update query, men jeg kan ikke finde ud af hvordan jeg looper det hele igennem og opdatere 'tblTopics'

Er der hjælp at hente her ?
Avatar billede mugs Novice
19. januar 2008 - 00:24 #1
Prøv at se på funktionerne DMax ig CMin i en forespørgsel. Noget i stil med denne:

INSERT INTO tabel1 ( år, uge, data1, test, id )
SELECT tabel2.år, tabel2.uge, tabel2.data1, tabel2.test, tabel2.id
FROM tabel2
WHERE (((tabel2.id)=DMax("id","tabel1")));
Avatar billede chris Nybegynder
19. januar 2008 - 01:56 #2
Hejsa, og tak for din besvarelse.

Jeg har nu forsøgt med din sql sætning, og den ser således ud :

INSERT INTO tbltopic ( Last_Thread_ID )
SELECT tblThread.Thread_ID
FROM tblThread
WHERE  ((( tblThread.Thread_ID)=DMax(" Last_Thread_ID","tbltopic")));

Når jeg kører den siger den : "You are about to append 0 row(s)"

Tror jeg på de sene timer har mistet overblikket totalt :)
Avatar billede mugs Novice
19. januar 2008 - 02:14 #3
Er der nogle poster der opfylder kriteriet?
Avatar billede mugs Novice
19. januar 2008 - 02:17 #4
Har du anvendt Query builderen? Ellers prøv den og indsat DMax og DMin fra udtryksgeneratoren.
Avatar billede chris Nybegynder
19. januar 2008 - 02:22 #5
Ja.... altså hvis jeg forstår sql-sætningen rigtigt.

Lige nu er alle " Last_Thread_ID" felter tomme i tabellen "tbltopic", og de skal så fyldes ud med Thread_ID's højrste værdi (der kan være feks. være 1300 poster med et Topic_ID) fra tblThread.
Avatar billede chris Nybegynder
19. januar 2008 - 02:30 #6
Jeg har lige prøvet af lave den Inset Into om til en update query :

UPDATE tbltopic INNER JOIN tblThread ON tblThread.Topic_ID = tblTopic.Topic_ID SET tblTopic.Last_Thread_ID = DMax("Thread_ID","tblthread");

og hvis jeg kører den, siger den : "You are about to update 347747 row(s)".  har dog ikke kørt den. trykkede NO til den, da tabellen (tbltopic) der skal opdateres har ca 21.000 records.

Man kan måske ikke bruge en update query til denne opgave ?
Avatar billede mugs Novice
19. januar 2008 - 03:00 #7
Hvis du læggerr din e-mail kan jeg sende dig et lille eksempel.
Avatar billede chris Nybegynder
19. januar 2008 - 03:11 #8
super...

du får lige den jeg sjældent benytter, og godt kan tåle hvis en klog spam-bot skulle opfange email adr.

dropnavnet(SnabelA)hotmail.com
Avatar billede mugs Novice
19. januar 2008 - 03:15 #9
Sendt
Avatar billede terry Ekspert
19. januar 2008 - 09:51 #10
do you have a solution Chris?
Avatar billede chris Nybegynder
19. januar 2008 - 12:23 #11
Nej... desværre ike endnu.
Avatar billede terry Ekspert
19. januar 2008 - 12:34 #12
UPDATE tblTopics AS T SET T.Thread_Start_ID = DMin("[ThreadID]","[tblThreads]","TopicID = " & T.TopicID), T.Thread_Last_ID = DMax("[ThreadID]","[tblThreads]","TopicID = " & [T].[TopicID]);
Avatar billede terry Ekspert
19. januar 2008 - 12:35 #13
bu why do you need to do this? The information is always available by making aquery which fiends the values.
Avatar billede chris Nybegynder
19. januar 2008 - 16:29 #14
Tak terry...

Jeg har forsøgt med din sql-sætning, men der kommer op med "Enter Parameter Value" - "T.Thread_Start_ID". Hvordan gør jeg så den looper alle records igennem, og smider værdierne over i tbltopic ?

Grunden til at start og slut thread_id skal listes i topic, er for at lette trykket ved søgning, og når der skal rydes op i databasen. Der er mange andre felter... og lidt svært (lang forklaring) at forklare det i detaljer.
Avatar billede chris Nybegynder
19. januar 2008 - 17:23 #15
Ja... glem ovenstående besked. Det var mig der havde lavet en bøf... havde indsat forkerte feltnavne.

Men nu fik jeg lavet denne :

UPDATE tblTopic SET tblTopic.Start_Thread_ID = DMin("tblThread.Thread_ID","tblThread","tblThread.Topic_ID = " & tblTopic.Topic_ID), tblTopic.Last_Thread_ID = DMax("tblThread.Thread_ID","tblThread","tblThread.Topic_ID = " & tblTopic.Topic_ID);

Men den returnerer kun tomme felter?
Avatar billede terry Ekspert
19. januar 2008 - 17:27 #16
Can you check the name of your table/fields? In the original question they are (tblTopics, tblThreads) different to what you use 19/01-2008 01:56:05 (tblTopic, tblThread)

The SQL I used should update tblTopics
Avatar billede terry Ekspert
19. januar 2008 - 17:28 #17
Can you send me an example of the tables?

ekspertenATsanthell.dk
AT = @
Avatar billede terry Ekspert
19. januar 2008 - 17:31 #18
Try this
UPDATE tblTopic AS T SET T.Start_Thread_ID = DMin("[ThreadID]","[tblThread]","TopicID = " & T.TopicID), T.Last_Thread_ID = DMax("[ThreadID]","[tblThread]","TopicID = " & [T].[TopicID]);
Avatar billede terry Ekspert
19. januar 2008 - 17:52 #19
I'm off for the rest of the evening. The SQL I gave 19/01-2008 12:34:05 uses the table/field names in your original question and as far as I can see works.

If you do send me your dB I'll look at it first thing tomorrow.
Avatar billede terry Ekspert
21. januar 2008 - 20:05 #20
do you have it working Chris?
Avatar billede chris Nybegynder
21. januar 2008 - 21:39 #21
Ja det virkede.... og tusind tak for hjælpen. !

Tak til begge.
Avatar billede mugs Novice
21. januar 2008 - 23:10 #22
Tak for point.
Avatar billede terry Ekspert
22. januar 2008 - 07:57 #23
tak
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