Avatar billede annettef Nybegynder
27. april 2005 - 15:20 Der er 6 kommentarer og
1 løsning

Problemer med ORDER BY

Hej

Jeg har en database med en tabel som indeholder nogle varer. Disse varer hentes ud fra databasen ud fra det kategoriid de hører til. Nu ønsker jeg at sortere mine varer efter titel og har skrevet følgende kode

30  <%' SQL forespørgsel
31  KatID = Request.Querystring("intKatId")
32  strSQL = "Select * From vare Where kategoriId = ' & KatID & 'ORDER BY titel"
33
34  ' Udfør strSQL (rs kommer til at indeholde dataen)
35  Set rs1 = Conn.Execute(strSQL)

....men får følgende fejlmeddelelse
Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

/varer_udsk.asp, line 35

Hvad er det jeg gør forkert?

Her er koden til hele min side
::::KODE::::

<%
Option Explicit
Dim Conn, DSN, sltid, strSQL, rs1, rs2, column, vareID, intVareId, KatID, intKatId
Response.Buffer=True
%>
<%
intKatId = Request.QueryString("intKatId")
%>
<!--#include file="dbconn.inc"--><!-- Database forbindelse oprettes via ekstern fil-->
<html>

<head>
<title>B&aelig;rbare</title>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" > <!-- link til ekstern style sheet -->

<style type="text/css">
<!--
.style1 {color: #FFFFFF}
body {
    margin-top: 0px;
    margin-left: 4px;
}
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>

<body>
  <br>
<%' SQL forespørgsel
KatID = Request.Querystring("intKatId")
strSQL = "Select * From vare Where kategoriId = ' & KatID & 'ORDER BY titel"

' Udfør strSQL (rs kommer til at indeholde dataen)
Set rs1 = Conn.Execute(strSQL)

strSQL = "Select kategoriNavn From kategori Where kategoriId =" & KatID
Set rs2 = Conn.Execute(strSQL)


%>
<table width="670" border="0" align="left"><!--hovedtabel start-->
  <tr>
    <td align="left"  height="18" valign="center" bgcolor="#545DB9"><span class="style1"><%response.write rs2("kategoriNavn")%></span></td>
  </tr>
<!--</table>-->
<tr>
<td align="center">
      <%
if rs1.EOF then
      response.Write "Der er i øjeblikket ingen varer i denne kategori"
      else   
     
Response.Write "<table border=0 cellspacing=0 cellpadding=5 width='660' align=center>" 'Indholdstabel start
Const COLUMN_COUNT = 4 'bestemmer hvor mange kolonner der skal være før der skiftes til ny række

    Column = 0 'tæller
  ' Men hvis DB ikke er tom, udskrives data.
    Do While Not rs1.EOF
        If column = 0 Then
            Response.Write "<tr>" 'hvis tælleren er 0 udskrives en række
        end if
   
    if rs1("foto1")&"" = "" then
      Response.Write "<td width='163' align='center' valign='top'><a href='vis_varer.asp?intVareId=" & rs1("vareid") & "'><img src='foto/intet_foto1.jpg' border='0' width='150' height='100'><br>"
      else   
        Response.Write "<td width='163' align='center' valign='top'><a href='vis_varer.asp?intVareId=" & rs1("vareid") & "'><img src=""" & rs1("foto1") & """ border='0' width='150' height='100'><br>"
        end if
        Response.Write rs1("titel") & "<br>"
        Response.Write "Kr.&nbsp;" & rs1("pris") & ",- incl. moms</a></td>"
        column = column + 1 'lægger en til tælleren
       
        If column = COLUMN_COUNT Then ' hvis tælleren er lig variablen som i dette tilfælde er sat til tre sluttes rækken
            Response.Write "</tr>" & vbNewLine 'starter ny linie
            column = 0
        End If
       
        RS1.MoveNext
    Loop 'går i loop indtil recordset ikke indeholder flere records
   
    ' Afslutter den oprettede tabel
    Response.Write "</table><br>"

end if
' Luk forbindelse fra dbconn.inc
Conn.Close
Set Conn = Nothing
%>
    </td>
  </tr>
</table>
<!--Hovedtabel slut-->

</body>
</html>
::::SLUT::::

/Annette
Avatar billede skyggen2000 Nybegynder
27. april 2005 - 15:23 #1
måske du bare mangler et mellemrum til din order by
32  strSQL = "Select * From vare Where kategoriId = ' & KatID & 'ORDER BY titel"

skriv i stedet
32  strSQL = "Select * From vare Where kategoriId = ' & KatID & ' ORDER BY titel"
Avatar billede skyggen2000 Nybegynder
27. april 2005 - 15:23 #2
Hvis man skriver sin SQL ud med response.write ved fejl, er det ofte nemmere at spotte fejlen.
Avatar billede kalp Novice
27. april 2005 - 15:26 #3
strSQL = "Select * From vare Where kategoriId = '" & KatID & "' ORDER BY titel"

den brokker sig i hvertfald over datatypen.
Avatar billede annettef Nybegynder
27. april 2005 - 15:31 #4
Nu har jeg prøvet at skrive min sql ud på skærmen og får følgende fejl

Select * From vare Where kategoriId = ' & KatID & ' ORDER BY titel
Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

/varer_udsk.asp, line 37

Så der er altså noget galt med min SQL sæstning - men hvad? Hvis jeg nu fjerne ORDER BY så sætningen kun er følgende strSQL = "Select * From vare Where kategoriId =" & KatID så kommer der ingen fjel på siden, men mine varer bliver så heller ikke sorteret.
Avatar billede skyggen2000 Nybegynder
27. april 2005 - 15:33 #5
fair nok, den er gal med din streng håndtering.

prøv med
strSQL = "Select * From vare Where kategoriId = " & KatID & " ORDER BY titel"
Avatar billede annettef Nybegynder
27. april 2005 - 15:35 #6
Okay, det løste problemet....tusind tak

Læg et svar så er der point

/Annette
Avatar billede skyggen2000 Nybegynder
27. april 2005 - 15:37 #7
Det var da så lidt, og tak for point.

Som nævnt, det hjælper ofte at få det på skærmen. Så kan man klippe det over i en SQL editor hvor det er nemmere at rette problemet:)
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