webForumDet fria alternativet

Skriva ut recordset nerifrån upp?

ASP

12 svar · 638 visningar · startad av logic

Medlem sedan maj 200481 inlägg
Frågan#1

HeJ! Jag undrar om det finns något sätt att skriva ut ett recordset och börja från andra hållet?

Det är nämligen ett recordset som använder sig av ett annat recordset (som använder order by DESC) Och då skrivs allt ut tvärtom! Nån aning om hur man skulle kunna göra?
Bör kanske nämna att jag använder Access.

Tack på förhand!

Medlem sedan dec. 20025 871 inlägg
#2

Jag förstår inte riktigt. Det är väl bara att ta bort order by [fält] DESC? :)

r\ Det går ju att byta ut DESC mot ASC, men det gör inte så stor skillnad mot att ta bort ORDER BY heller i det här fallet.

Medlem sedan maj 200481 inlägg
#3

Nej, för jag bygger ett forum, och där vill man ju helst se trådarna som är nyast eller aktivast ;)

Problemet är att i listan där man ser rubriken samt hur många inlägg som finns strular. Jag vet inte hur jag ska skriva ut antalet inlägg! Koden som används är följande;

select count(*) as antal from tradar where tradensID = "& rs("ID") &""
Skriver jag ut "order by ID DESC" kommer ett jobbigt felmeddelande, och det känns rätt motiverat eftersom det bara är en rs-utskrift.

Medlem sedan dec. 20025 871 inlägg
#4

Men om du endast skall räkna ut hur många poster det finns, så behöver du väl inte sortera? :)

Medlem sedan maj 200481 inlägg
#5

Jag försöker skriva ut antalet svar på varje tråd! Och därför blir det ju fel när man skriver ut re-loopen med alla trådar, då blir "antal svar" Tvärt-emot vad som det borde.

Medlem sedan maj 200481 inlägg
#6

Tack för din hjälp. Jag vet verkligen inte vad jag tänkte på, men det stämmre ju alldeles utmärk som jag skrivit ?!

Tack igen ;) LÖST!

Medlem sedan dec. 20025 871 inlägg
#7

Vi kan försöka komma på en bättre lösning i stället. Varför använder du inte en subselect när du plockar fram trådarna i stället? Då slipper du ju krångla med dubbla RecordSets. :)

r\ Nåväl, om det är löst så. :P

Medlem sedan maj 200481 inlägg
#8

Jag tänkte börja med att se om jag ens -kan- bygga ett forum, och det verkar inte sämre ;)

Efter det ska jag optimera koden!

Medlem sedan jan. 2005108 inlägg
#9

Eftersom jag själv körde fast och var tvungen att läsa recsetet nedifrån och upp (hade ingen möjlighet att ändra i sqlstmt) och inte hittade nån lösning vid sökning i forumet, så presenterar jag lösningen här för framtida sökare. :)

RecSet.MoveLast
Do Until RecSet.BOF
  'skriv ut värdena... eller vad du nu vill göra
  RecSet.MovePrevious
Loop

Ganska uppenbart om man tänker efter... men tänka kan ju vara lite svårt ibland... ;)

Medlem sedan feb. 2006144 inlägg
#10

Trots att tråden är nästan 2 år gammal så känns det rimligt att hoppa in. Anledningen är att jag har exakt samma problem.

Jag blev lite förvånad över svaret för jag trodde inte att RecSet.MovePrevious
var möjligt. En snabb test visade att det också genererade ett fel för mig. En sökning på nätet gav följande svar:

The MovePrevious Method
This method is used to move to the previous record in a Recordset object. It also make the "previous" record the current record.
Note: An error will occur if the Recordset object does not support bookmarks or backward cursor movement.

Hur sjutton gör jag då så att mitt lilla RS klarar av detta då? Måste jag deklarera den på ett annorlunda sätt eller vad? Och om det nu inte går att lösa; finns det någon annan lösning på själva grundproblemet dvs att loopa ut ett RS baklänges?

(Nej, jag kan inte få en annan sortering i min utsökning eftersom jag använder mig av ett aggregat i min utsökning (SUM) och då kan man inte i MS SQL Server göra en ORDER BY till skillnad från MySQL där det går)

EDIT: Min sista notering visade sig vara helt fel. Skillnaden mellan MySQL och MS SQL Server ligger i att i MySQL så kan du sätta DESC efter GROUP BY men det kan du inte i MS SQL Server. Det gick alldeles utmärkt att sätta in en ORDER BY efter min GROUP BY och givetvis sätta in DESC där.

(Hatar måndagmornar!!)
;)

Medlem sedan juni 200032 967 inlägg
#11

och då kan man inte i MS SQL Server göra en ORDER BY till skillnad från MySQL där det går

Jag tror nog att det går att lösa. Hur ser din SQL-fråga ut?

- - - - -

Om du öppnar ditt recordset med en annan cursor än forward-only så ska det gå bra att köra en movelast, och sedan använda moveprevious. Ett exempel från Microsoft (kika speciellt på skapande / öppnande av recordsetet): http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthmovefirstvbscriptx.asp

mvh

Medlem sedan dec. 20003 887 inlägg
#12

Du behöver öppna ditt recordset med en annan CursorType. Exempelvis

call RecSet.Open( SQL, Connection, [i]adOpenStatic[/i], [i]adLockReadOnly[/i] )

[blue]' eller med siffror[/blue]

call RecSet.Open( SQL, Connection, 3, 1 )
Medlem sedan feb. 2006144 inlägg
#13

Till både @nders och Engine^...
Tack för era snabba svar. Även om jag nu löste mitt problem (se min edit av min förra post) så fick jag ändå lära mig något nytt. Jag kände inte till att man kunde öppna ett RS med en annan CursorType...

323 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
165 ms — deklarationer (db)
0 ms — hämta statistik (cache)
155 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)