Avatar billede jensb Nybegynder
16. februar 2003 - 13:10 Der er 16 kommentarer og
1 løsning

ASP script virker pludseilg ikke

Jeg har pludselig fået et problem med at nogle af mine ASP script på min hjemmeside, pludselig ikke virker mere, selvom jeg ikke har rodet med dem.

Det er kun nogle af mine scripts, og så vidt jeg har kunne finde frem til, så er det kun scripts hvor jeg lave et "dobbelt database"-opslag. Eksempel på hvad jeg mener med dobbelt DB-opslag :

strSQL ="Select * From ordrer Order by ordrenummer desc"
Set rs = Conn.Execute(strSQL)

Do
strKundenavn ="Select * From kunder where kundenummer = " & rs("kundenummer")
Set rp = Conn.Execute(strKundenavn)

Response.write rs("ordrenummer") & rp("Fornavn")

rs.MoveNext
Loop While Not rs.EOF

(Ovenstående er bare et eksempel jeg lige skrev, så eventuelle syntax fejl er altså fordi jeg bare lige har skrevet det, og ikke kopieret direkte fra min side)

Jeg laver altså først ét opslag i tabellen med ordre, hvorefter jeg laver et loop hvor jeg hiver kundenummeret ud fra ordren, og i tabellen med kundeoplysninger henter jeg så navnet på kunden med dette kundenummer.

- Scriptet har som sagt virket hele tiden, og jeg har ikke rodet med det efterfølgende.

- Jeg har flere scripts i stil med ovenstående, hvor der bruges et "dobbelt-opslag", og det er alle de scripts, og kun de scripts der ikke virker mere.

Jeg har også prøvet at forenkle de ovenstående til:


strSQL ="Select * From ordrer Order by ordrenummer desc"
Set rs = Conn.Execute(strSQL)

Do
strKundenavn ="Select * From kunder where kundenummer = " & rs("kundenummer")
Set rp = Conn.Execute(strKundenavn)

rs.MoveNext
Loop While Not rs.EOF

Her hiver jeg altså slet ikke nogen data ud, men det virker stadig ikke. Så det kan vel ikke være fordi at der skulle værre "ulovlige" værdier i en af felterne i DB.  (det har jeg selvfølgelig også tjekket manuelt i DB'en)

Endvidere har jeg testet med at trække ud fra hver af de to tabeller enkeltvis, og det er der INGEN problemer med...det er kun nå jeg laver dobbeltudtræk.


Jeg har så samtidig med at denne fejl opstod, opdaget at der er sket en eller anden form for ændring med hensyn til den server min side ligger på hos min udbyder. Jeg har hele tiden hvis jeg har lavet en  Date(Now) fået datoen i formatet Måned/Dato/År  men fra og med i går er formatet pludselig blevet  Dato/Måned/År.  Det kan selvfølgelig være at de bare har været inde og rette det på serveren til det danske format, men det kunne måske også være et tegn på at jeg er blevet lagt over på en anden server...og det er så det mit spørgsmål i virkeligheden handler om:

Kan man risikere at nogle typer servere ikke kan køre ovenstående type script? F.eks. hvis jeg tidligere har ligget på en windows server, og nu måske er rykket over på en Linux server? Eller har i andre forslag til hvad der kan være sket?
Avatar billede erikjacobsen Ekspert
16. februar 2003 - 13:15 #1
Husk at lave en

  rp.close
Avatar billede jensb Nybegynder
16. februar 2003 - 13:19 #2
Hvor skal jeg sætte rp.close ?

Skal jeg lukke den efter hvert opslag, altså:


strSQL ="Select * From ordrer Order by ordrenummer desc"
Set rs = Conn.Execute(strSQL)

Do
strKundenavn ="Select * From kunder where kundenummer = " & rs("kundenummer")
Set rp = Conn.Execute(strKundenavn)
rp.Close
rs.MoveNext
Loop While Not rs.EOF


Eller først til aller sidst?
Avatar billede erikjacobsen Ekspert
16. februar 2003 - 13:22 #3
Efter du har brugt "indholdet" af dit recordset rp, ja.
Så der mangler jo lige nogle linier i ovenstående eksempel
Avatar billede jensb Nybegynder
16. februar 2003 - 13:24 #4
Ja der mangler selvfølgelig lige Response.Write linien, men det var bare for at gøre scriptet lidt kortere.

Men det hjalp ikke, det virker stadig ikke
Avatar billede erikjacobsen Ekspert
16. februar 2003 - 13:28 #5
rp = NOthing

skal du måske også have med. Hvordan "virker ikke" ?
Du skal måske til at have gang i en join i SQL :)
Avatar billede jensb Nybegynder
16. februar 2003 - 13:29 #6
Nu fandt jeg lige ud af lidt mere. De andre gange har jeg troet at siden slet ikke åbnede. Men hvis man venter lang tid nok, så bliver den bare ved med at skrive kundens fornavn, i en lang liste indtil man får en fejl:

Active Server Pages error 'ASP 0113'
Script timed out

Den skriver kun navnet på den nyeste kunde, og det skriver den så RIGTIG mange gange...flere gange end der er kunder i databasen. Der ligger kun 4 ordrer og 4 kunder i databasen lige nu, men den skriver navnet på den nyeste kunde flere hundrede gange?
Avatar billede jensb Nybegynder
16. februar 2003 - 14:08 #7
Jeg prøvede lige at kopiere hele sitet over på min egen server, og der virker ALT helt perfekt. Så det må altså være et eller andet med serveren hos mit webhotel. Jeg har dog lige ringet til dem og de sagde dog at der ikke skulle være blevet ændret noget som helst fra deres side af, og at det måtte være en fejl i min database forbindelse...selvom jeg prøvede at forklare dem at mange af siderne jo virker ganske fint.

Men eftersom det virker på min server, så kan det jo ikke være min kode den er gal med.

Jeg lader spørgsmålet stå åbent lidt endnu, da jeg stadig godt kunne tænke mig at høre, om der er nogen der ved hvad den eksakte årsag kan være?

Og så tror jeg ellers jeg vil begynde at kigge mig om efter et andet webhotel. (det er ikke første gang jeg har problemer)
Avatar billede erikjacobsen Ekspert
16. februar 2003 - 14:42 #8
Tjah - jeg ved ikke. Kan du vise os din rigtige kode? Eller en
mindre stump, der virker forskelligt?
Avatar billede erikjacobsen Ekspert
16. februar 2003 - 14:47 #9
Ellers skal du lave en join, og dermed kun udføre én sql-sætning:

strSQL ="Select * From ordrer,kunder where ordrer.kundenummer=kunder.kundenummer Order by ordrenummer desc"
Set rs = Conn.Execute(strSQL)
Avatar billede jensb Nybegynder
16. februar 2003 - 14:48 #10
Jep, jeg har prøvet at lave følgende testside:

<html>

<head>
</head>

<body bgcolor="#C0C0C0">

<!--#include virtual="/opendatabase.asp"-->
<%
strSQL ="Select * From ordrer Order by ordrenummer desc"
Set rs = Conn.Execute(strSQL)

DO
KUNDE = "Select * From kunder Where kundenummer =" & rs("kundenummer")
Set rp = Conn.Execute(KUNDE)
Response.Write rp("fornavn") & "<br>"
rp.Close

rs.MoveNext
Loop While Not rs.EOF

%>
<!--#include virtual="/closedatabase.asp"-->

</body>

</html>

Det er et uddrag af en af de oprindelige koder, men hvor jeg bare har gjort det så simpelt som muligt. På mit webhotel ligger test-filen på : www.hunde-udstyr.dk/test.asp  (hvis man venter MEGET lang tid, plejer den at åbne til sidst).

Jeg har så downloadet det hele fra webhotellet (nøjagtig kopi) og lagt på min egen server : hunde.hotrods.dk/test.asp  og der virker det.
Avatar billede jensb Nybegynder
16. februar 2003 - 14:49 #11
Vil lige prøve sådan en join senere, det har jeg ikke prøvet før.
Avatar billede erikjacobsen Ekspert
16. februar 2003 - 14:54 #12
Mystisk - jeg har ingen forklaring. Men det vil sikkert virke med
en join - som også har den positive sideeffekt, at det går
markant hurtigere. Ligemeget for 4 ordrer, men vigtigt for flere.
Avatar billede jensb Nybegynder
16. februar 2003 - 15:01 #13
Ok det vil jeg så prøve. Jeg er godt klar over at min kode måske ikke er den mest optimale, da jeg stadig er rimelig ny til ASP.  Men det er jo meget rart at få den slags fif/råd så jeg gradvist kan få hele koden optimeret.

Selvom vi ikke har fundet et direkte svar på "hvorfor det pludselig ikke virker mere" så synes jeg stadig du fortjener pointene da du gjort et ihærdigt forsøg, så læg bare læg et svar.


Men jeg synes nu stadig det er mystisk, så selvom jeg måske får det til at virke med en join, så synes jeg stadig det vil være interessant at høre hvis der er nogen der kan give et svar på hvad der kan være sket.
Avatar billede erikjacobsen Ekspert
16. februar 2003 - 15:08 #14
Jeg skal ikke point, tak.
Avatar billede jensb Nybegynder
16. februar 2003 - 15:09 #15
ok, så vil jeg bare sig tak for hjælpen
Avatar billede jensb Nybegynder
16. februar 2003 - 17:44 #16
Det virkede med at lave det om til join-sætninger...og så er det jo en del lettere/smartere, så tak for det.
Avatar billede jensb Nybegynder
18. februar 2003 - 22:49 #17
.
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