[SQL - ASP] Kan wel selecten, maar niet sorten?

Pagina: 1
Acties:
  • 139 views sinds 30-01-2008
  • Reageer

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Een redelijk simpele uitvoering, die helemaal misgaat, maar ik kom er niet achter waarom.

Ik heb een ASP-pagina die gegevens uit een database trekt en die weergeeft in een HTML-tabel. Er zijn verschillende kolommen (het is mijn film-database): Titel, Featuring, Duur, Genre, Jaar en nog een paar dingen.

Dit doe ik het met SQL-statement SELECT * FROM Films
Dit gaat goed.

De bedoeling is dat de tabel sorteerbaar is de verschillende kolomnamen. Ten eerste moet de tabel gesorteerd zijn op titel.

Verander ik het SQL-statement echter in SELECT * FROM Films SORT BY Titel dan krijg ik deze ASP-foutmelding:

De component FROM bevat een syntaxisfout.

In de database heet de enige tabel Films (dit werkt ook gewoon in het eerste voorbeeld) en een kolom uit die tabel is Titel. De andere kolomnamen leveren overigens de zelfde foutmelding op.

What's going on?

Voor het overzicht is hier de volledige code:
<% @Language = "VBScript" %>
<!--#include virtual="/adovbs.inc"-->
<% Response.buffer = true %>
<html>
<head>
<link rel="stylesheet" href="style.css">
<title>Filmtabel weergeven</title>
</head>
<body>

<TABLE BORDER=2 CELLPADDING=1 CELLSPACING=2>
<TR>
<TD><B>Titel</B></TD>
<TD><B>Genre</B></TD>
<TD><B>Featuring</B></TD>
<TD><B>Jaar</B></TD>
<TD><B>Duur</B></TD>
<TD><B>Grootte</B></TD>
<TD><B>DVD-Rip</B></TD>
</TR>

<%
Dim rs, conn, Rij, SQLstmt

Set rs = Server.CreateObject ("ADODB.Recordset")
Set conn = Server.CreateObject ("ADODB.Connection")

conn.open = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("films.mdb") & ";"


'Hier wordt het SQL-statement gefabriceerd.

SQLstmt = "SELECT * FROM Films"

'Haal onderstaande regel weg en het werkt, alleen ongesorteerd.
SQLstmt = SQLstmt & " SORT BY Titel"


' AdOpenStatic is het cursortype. Dit heb ik recentelijk toegevoegd en daarom heb ik
' het er even uitgesloopt om troubleshooting makkelijker te maken.
'rs.open SQLstmt, conn, AdOpenStatic
'Aantal_records = rs.RecordCount

rs.open SQLstmt, conn

For Rij = 1 to 141

Response.Write "<TR>"

Response.Write "<TD><B>" & rs("titel") & "</B></TD>"
Response.Write "<TD>" & rs("genre") & "</TD>"
Response.Write "<TD>" & rs("featuring") & "</TD>"
Response.Write "<TD>" & rs("jaar") & "</TD>"
Response.Write "<TD>" & rs("duur") & "</TD>"
Response.Write "<TD>" & rs("MB") & "</TD>"
Response.Write "<TD>" & rs("DVD") & "</TD>"
Response.Write "</TR>"

rs.MoveNext
Next

%>

</TR>
</TABLE>

<%

rs.Close
Set rs = Nothing

%>

</body>
</html>

Bloed, zweet & koffie


  • Jox444
  • Registratie: Augustus 2001
  • Laatst online: 11:15

Jox444

Honestly....

Zet voor de lol eens je querie op het scherm dan kunn je zien of de querie wel goed is.
Mocht er niets zichtbaars verkeerd zijn, zou je ORDER BY kunnen gebruiken ipv SORT BY

Het is FRIET!


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
De query uit een Response.Write(SQLstmt):

A: SELECT * FROM Films (werkt)
B: SELECT * FROM Films SORT BY Titel (werkt niet)

Vergist :( Ik dacht dat ORDER BY wel werkte, maar dat doet het niet. Zelfde resultaat.

Bloed, zweet & koffie


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 17-09 08:12

Crazy D

I think we should take a look.

Probeer de query eens binnen Access zelf uit te voeren, eens kijken wat ie dan doet?
(staat me iets van bij dat je op een memo veld niet een order by kan doen).
En waarom een loop For Rij = 1 To 141 :?
Waarom niet gewoon Do While Not rs.EOF ? (maja dat maakt verder voor je probleem niet uit).

Exact expert nodig?


  • Jox444
  • Registratie: Augustus 2001
  • Laatst online: 11:15

Jox444

Honestly....

hmm heb zelf ook een film / dvd database code opzet is iets anders ik exucute de querie , jij opend uhm, maar bij mij werkt het als een trein :
<%
SQLMain = "SELECT * FROM dvd Order by titel "

Set rsMain = cnnMain.Execute(SQLMain)

Dim counter
counter = 1

'-----------op het scherm zetten van alle rommel---------------
While Not rsMain.EOF
Response.write "<tr>" & _
"<td class=""TDLinedAll"">" & counter & " </td>" & _
"<td class=""TDLinedAll""> <a href='stuff.asp?ond=3&section=1&Dvd_id=" & rsMain("dvd_id") & "'>" & rsMain("titel") & "</a> " & _
"<td class=""TDLinedAll"">" & rsMain("jaar") & " </td>" & _
"<td class=""TDLinedAll"">" & rsMain("dvdPunt") & " </td>" & _
"</tr>"

counter = counter + 1
rsMain.MoveNext
Wend

rsMain.Close
Set rsMain = Nothing


%>

Het is FRIET!


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
ORDER BY Werkt nu weer wel :?
Ik begrijp er niks meer van.
Op zondag 07 oktober 2001 11:42 schreef Crazy_D het volgende:
En waarom een loop For Rij = 1 To 141 :?
Waarom niet gewoon Do While Not rs.EOF ? (maja dat maakt verder voor je probleem niet uit).
Wat ik wil maken is een tabel waarin je de gegevens kan sorteren op volgorde van de tabelnaam (bovenin) die je aanklikt. Dus als je op TITEL klikt, moeten de gegevens op titel gesorteerd worden, en als je op Genre drukt op genre.

Ik weet bij god niet meer waarom, maar ik dacht hiervoor het aantal gegevens te moeten weten. Toen ik eenmaal had uitgevogeld hoe dat moets zonder alle gegevens te doorlopen (heb je dus een ander cursor-type nodig), was ik vergeten waarom het nodig was om het aantal records te weten om de gegevens te sorteren.

141 Is de hoeveelheid records die .RecordCount vindt, en om beter te kunnen troubleshooten heb ik mijn .ASP-script zo kaal mogelijk gemaakt.

Daarom.

Bloed, zweet & koffie


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

ik zou gewoon do until rs.eof doen.

als je meer records zou willen toevoegen kun je dat gewoon doen. niet moeilijk doen met for i = 1 to 141, je weet nooit of je meer wilt toevoegen

disjfa - disj·fa (meneer)
disjfa.nl


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Op maandag 08 oktober 2001 10:47 schreef disjfa het volgende:
ik zou gewoon do until rs.eof doen.

als je meer records zou willen toevoegen kun je dat gewoon doen. niet moeilijk doen met for i = 1 to 141, je weet nooit of je meer wilt toevoegen
Zoals gezegd was dit de debugging-mode. Die 141 wordt in het werkelijke script door een variabele ingevuld.

Het probleem is overigens opgelost: er werd ergens verwezen naar een systeem-DSN terwijl de rest van de pagina's een DSN-loze verbinding heeft.

Bloed, zweet & koffie

Pagina: 1