Avatar billede copeland Nybegynder
29. november 2000 - 08:53 Der er 5 kommentarer og
4 løsninger

Gennemløb af lange tabeller

Jeg henter en del poster fra en tabel....eksempel:

<%
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"../database/adresser.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
myConn.Open DSN
SQL = \"SELECT * FROM Kunder\"
Set oRs = Conn.Execute(SQL)

WHILE NOT oRs.EOF
oRs(\"Navn\")
%>
<br>
<%
oRs(\"Username\")
%>
<br>
<br>
<%
oRs.MoveNext
WEND
myConn.Close
Set myConn = Nothing
%>

Nu står siden tom i lang tid før end scriptet er kørt færdigt.

Kan det lade sig gøre at siden begynder at skrive på siden, i takt med at den løber tabellen i gennem, således at man får de første poster med det samme.

eller kan man skriver \"Vent et øjeblik\" som så forsvinder når alle posterne er fundet og siden skrives.

Anne
Avatar billede enlize Nybegynder
29. november 2000 - 08:57 #1
Det kan ikke lade sig gøre med ASP, da hele dit script eksekveres på serveren inden det sendes ud til klienten.

Det kunne måske godt lade sig gøre med lidt kreativt JavaScript, men jeg har ikke lige et script på hånden. Men du kan ikke udelukkende gøre det i ASP - Desværre.
Avatar billede sone Nybegynder
29. november 2000 - 09:09 #2
Ikke helt rigtigt!

Hvis du sætter linien

  Response.Buffer = True

i toppen af dit script, kan du løbende skrive

  Response.Flush

så sendes dit output til browseren.
Avatar billede enlize Nybegynder
29. november 2000 - 09:15 #3
Undskyld - det var jeg ikke klar over.... He he det vil jeg da selv prøve ;)
Avatar billede copeland Nybegynder
29. november 2000 - 09:28 #4
OK.....men hvad mener du med løbende skrive response.flush....skal jeg skrive det før gennemløbet eller for hver post i tabellen.

Hvis det skal noteres i sammenhængen hvor skal det så stå:

WHILE NOT oRs.EOF
response.write(oRs(\"Navn\"))
%>
<br>
<%
response.write(oRs(\"Username\"))
%>
<br>
<br>
<%
oRs.MoveNext
WEND

Anne
Avatar billede soerens Nybegynder
29. november 2000 - 09:30 #5
Response.Flush virker faktisk genialt, du skal dog passe voldsomt på med at vise dit resultat i en tabel.

De fleste browsere viser ikke tabellen før den er \"færdig-streamet\" ud til brugeren, altså før den sidste </TABLE> tag er sendt afsted.

Jeg tror nok IE vil gøre det hvis man angiver width og height, men det er ikke noget der er afprøvet.

Prop Response.Flush ind i dit Loop. For bedre perfomance bør du dog kun lave en flush for hver 50 records du skriver ud. Dette kan laves på denne måde:

If Counter MOD 50 = 1 Then Response.Flush
Counter = Counter +1

Som en fodnote kan det nævnes at Response.Buffer er lig med True som default på en WIndows 2000, og false på en NT server.
Avatar billede ubbe Nybegynder
29. november 2000 - 13:29 #6
Prøv at bruge loop:

<%Do while not oRs.EOF%>
<%response.write(oRs(\"Navn\"))%>
<br>
<%response.write(oRs(\"Username\"))%>
<br>
<br>
<%
oRs.movenext
Loop
%>

Det har jeg aldrig haft problemer med.
Den venter til den er helt færdig med at finde alt hvad du vil have vist fra db\'en.
Avatar billede copeland Nybegynder
01. december 2000 - 15:59 #7
Hvorfor virker dette ikke....jeg får ingen fejl men siden kommer først når all poster er hentet.

<%
    AntalPoster=0
WHILE NOT oRs.EOF
response.write(oRs(\"Navn\"))
response.write(\"<br>\")
    If AntalPoster MOD 2 = 1 Then Response.Flush
    AntalPoster=AntalPoster+1   
oRs.MoveNext
WEND
%>


Anne
Avatar billede copeland Nybegynder
01. december 2000 - 16:00 #8
Undskyld...enlille fejl

If AntalPoster MOD 20 = 1 Then Response.Flush
Avatar billede soerens Nybegynder
01. december 2000 - 16:12 #9
Hmmm, din kode ligger ikke inde i en tabel, vel?

Hvis du har en tabel rundt omkring det du response.write\'r, så vil det først blive vist når browseren støder på </TABLE>-taggen.

/søren
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
Kurser inden for grundlæggende programmering

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