Set Con = Server.CreateObject("ADODB.Connection") DBPath = "DBQ=" & server.mappath("daek.mdb") Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath
sqlWhere = "" if Request.QueryString("size1") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_1 = '"&Request.QueryString("size1")&"'" end if if Request.QueryString("size2") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_2 = '"&Request.QueryString("size2")&"'" end if if Request.QueryString("size3") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_3 = '"&Request.QueryString("size3")&"'" end if
sqlBrand = "Select COUNT(*) from daek_tabel " if sqlWhere <> "" then sqlBrand = sqlBrand & " where " & sqlWhere sqlBrand = sqlBrand & " Order by brand, model ASC" set rsBrand = Con.execute(sqlBrand)
%> <html> <head> </head>
<body bgcolor="#FFFFFF" text="#000000"> Antal dæk vist <%Response.Write rsBrand(0)%>
Kan den ikke opreres ind her: sqlBrand = "Select Count(*) As Antal from daek_tabel " if sqlWhere <> "" then sqlBrand = sqlBrand & " where " & sqlWhere sqlBrand = sqlBrand & " Order by brand, model ASC" set rsBrand = Con.execute(sqlBrand)
Og så kommme nede på siden: <% response.write rsBrand("Antal") %>
200 points for at få en count til at virke ??? når man opretter et spm, står der tydelig:
15 - Let 30 - Medium 60 - Svær
hvis en 'SELECT COUNT(*) As tal FROM tabel' er over 3 gange så svært som fx "hvordan får jeg et RPC kald til at starte min intranet server", så er du helt galt på den. En Count i en SQL kan max kategoriseres som et 30 point spm.
stefware >> har du prøvet en COUNT i den simpleste forstand til dit formål ?
SELECT COUNT(*) As Antal FROM daek_tabel WHERE size_1 = 'noget'
??
Er du sikker på at det ikke er fordi du skal bruge OR istedenfor AND ?
når du siger at den ikke virker, så forklar os hellere hvad den gør galt og hvad du forventer at den skal gøre i stedet for at sige at den bare ikke virker. vi kender hverken din database eller intentioner/ønsker med scriptet
Ang. antal point, nogle syntes asp er svært andre syntes at køre på cykel på line er svært, sådan har vi jo forskellige talenter :-)))
Meningen er at jeg skal have en linie hvor der står "Der er XXX antal viste dæk" dvs. det antal der kommer frem fra søgningen skal tælles og jeg har sgu ikke de store asp talenter, så lidt hjælp eller hint kunne meget godt bruges!
sqlBrand = "Select Count(*) As Antal From daek_tabel "
if sqlWhere <> "" then sqlBrand = sqlBrand & " where " & sqlWhere
sqlBrand = sqlBrand & " Order by brand, model ASC"
set rsBrand = Con.execute(sqlBrand)
og sætter ind
<% response.write rsBrand("Antal") %>
Får jeg
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'brand' as part of an aggregate function.
"Ang. antal point, nogle syntes asp er svært andre syntes at køre på cykel på line er svært," - det handler også om at have en viss forståelse om hvad det er man har kastet sig ud i. Det er meget svært at lære sig at køre cykel på line, hvis man har en ødelagt balancenerve. Det er nemmere at træne sine logiske egenskaber op (som man bruger når man koder, end at træne sin medfødte "ubalance" op ;o]
Antal points skal uanset reflektere sværhedsgraden af spm og ikke desperation/uvidenhed hos den der stiller spm.
hvad er det du "ikke kan se hvordan jeg får det ind imellem resten" ... hvad er det du ikke kan se ?
umiddelbart ser din SQL ikke ud til at være forkert, men igen ... det er, som jeg har skrevet tidligere, ikke muligt at hjælpe når vi ikke kender din database. Er det fx muligt at et dæk kan *både* have size_1 specificeret og samtidig have size_2 specificeret ?
har du prøvet den SQL jeg postet i mit forrige indlæg ?
fortæl os hvad du gør, og hvad der går galt i stedet for at sige at "det ikke virker". hvis du siger "det virker ikke", så kan vi i bund og grund bare svare "øv...sur røv" og gå videre til næste spm ;o]
'brand' er nok et reserveret ord i databasen ... prøv at sætte [] omkring:
sqlBrand = sqlBrand & " Order by [brand], model ASC"
erikjacobsen >> true ... det giver ingen mening at lave order by på en ren count.
stefware >> du prøver at lægge en order by på to kolonner som du ikke har specificeret i din SELECT. Hvis du vil have flere kolonner ud (brand og model), skal du gøre sådan her:
sqlBrand = "Select Count(*) As Antal, [brand], model From daek_tabel "
ved brug af 'AS' i din select (et alias i database terminologi), så giver du kun den kolonne et navn du selv ønsker så du nemmere kan identificere kolonnen i din resultset.
sqlBrand = "Select Count(*) As Antal, [brand], model From daek_tabel " if sqlWhere <> "" then sqlBrand = sqlBrand & " where " & sqlWhere set rsBrand = Con.execute(sqlBrand)
Men jeg får stadigt fejlen:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'brand' as part of an aggregate function.
sqlBrand = "Select COUNT(*) As Antal from daek_tabel " if sqlWhere <> "" then sqlBrand = sqlBrand & " where " & sqlWhere 'sqlBrand = sqlBrand & " Order by brand, model ASC" set rsBrand = Con.execute(sqlBrand)
og virker men nu får jeg fejl i:
Antal dæk vist 205Sorter efter pris
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/jesper/daek/visdaek.asp, line 82
Linie 82: <%Response.Write rsBrand("brand")%>
Er det så nu jeg skal have [brand] ind her? Og hvordan styrer jeg nu min sortering, jeg vil jo gerne linke til en tilsvarende fil der sorterer efter pris?
sqlWhere = "" if Request.QueryString("size1") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_1 = '"&Request.QueryString("size1")&"'" end if if Request.QueryString("size2") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_2 = '"&Request.QueryString("size2")&"'" end if if Request.QueryString("size3") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_3 = '"&Request.QueryString("size3")&"'" end if
sqlCount = "Select COUNT(*) from daek_tabel " & sqlWhere sqlBrand = "Select [brand],model from daek_tabel " & sqlWhere & " Order by [brand],model ASC"
set rsBrand = Con.execute(sqlCount) strAntal = rsBrand(0) set rsBrand = Con.execute(sqlBrand )
nu har du antallet i 'strAntal' variabelen, og så kan du loope igennem dit recordset på vanlig måde:
while not rsBrand.EOF Response.Write( rsBrand("brand") & "<br>" wend
prøv at skrive ud dine SQL'er inden du fyrer dem af, så kan du nemmere se hvad der går galt:
Response.Write( sqlCount ) set rsBrand = Con.execute(sqlCount)
og som vi har skrevet flere gange - forklar *hvad* der er galt. "en fejl i linje 25" er nok næsten det mindst informative du kan sige. *hvad* går der galt ? siger den "computer missing?", "'sqlCount' mangler", "der er krig i verden" ??? vi har ingen mulighed for at hjælpe med mindre du forklarer hvad du oplever. husk .. det er *dig* der sidder med koden, det er *dig* der sidder med databasen, det er *dig* der har mulighed for at teste det vi foreslår. Med mindre du forklarer hvad du oplever, med udførlige beskrivelser (!!!), så har vi ikke så store muligheder for at guide dig i rigtg retning.
Løsningen er postet optil flere gange her inde. Brug lidt tid på at kigge gennem det vi har skrevet til dig, og prøv dig frem inden du bare smider et indlæg afsted.
Jeg forsøger, jeg trækker fra en form 3 værdier size1 & size2 og size3, de bliver sendt til visdaek.asp (se nedestående) Size1 er en dæk bredde som kan være Alle eller 125-305 med forskellige intervaller Size 2 er Alle eller højden fra 80-25 og sidst fælg størrelsen i " eller Alle.
visdaek.asp skal vise antallet af dæk der opfylder de valgte krav og udskrive mærke/model/højde/pris osv for dem sorteret alfabetisk, lave et link til et billede.
Øverst på siden har jeg et link til en tilsvarende fil som visdaek.asp der hedder visdaek_pris.asp, her skal samme resultat vises bare sorteret efter pris.
Håber det hjalp lidt, jeg har smidt koderne med:
daek_1.asp
<% Response.Buffer = True Response.Expires = 0
Set Con = Server.CreateObject("ADODB.Connection") DBPath = "DBQ=" & server.mappath("daek.mdb") Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath
sqlSize1 = ("SELECT DISTINCT size_1 FROM daek_tabel Order BY size_1 ASC ") set rsSize1 = Con.execute(sqlSize1)
sqlSize2 = ("SELECT DISTINCT size_2 FROM daek_tabel Order BY size_2 ASC ") set rsSize2 = Con.execute(sqlSize2)
sqlSize3 = ("SELECT DISTINCT size_3 FROM daek_tabel Order BY size_3 ASC ") set rsSize3 = Con.execute(sqlSize3)
%> <html> <head> <title>Dæk Database</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" href="/test.css" type="text/css"> <link rel="stylesheet" href="/spalte.css" type="text/css"> <script language="JavaScript"> <!-- function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(); } MM_reloadPage(true); // --> </script> </head>
Set Con = Server.CreateObject("ADODB.Connection") DBPath = "DBQ=" & server.mappath("daek.mdb") Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath
sqlWhere = "" if Request.QueryString("size1") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_1 = '"&Request.QueryString("size1")&"'" end if if Request.QueryString("size2") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_2 = '"&Request.QueryString("size2")&"'" end if if Request.QueryString("size3") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_3 = '"&Request.QueryString("size3")&"'" end if
sqlCount = "Select COUNT(*) from daek_tabel " & sqlWhere sqlBrand = "Select [brand],model from daek_tabel " & sqlWhere & " Order by [brand],model ASC" set rsBrand = Con.execute(sqlCount) strAntal = rsBrand(0) set rsBrand = Con.execute(sqlBrand )
jeg beder ikke om din kode ... den kan jeg ikke bruge til meget (andet end at den fylder h****s meget i tråden.
jeg beder dig om at SKRIVE ud din SQL så vi kan se den!!!!! Din fejl er enkel ... det er noget galt i din FROM del af SQL'en... men for at finde ud af hvad der er galt, så må vi få se din SQL !!!
hvis du ikke kan klare at gøre de få enkle ting vi beder dig om, så står jeg også af dette spm
nej den er ikke for oven. når nogen beder dig om at skrive ud din SQL, så beder de om at få se den SQL du prøver at køre. som jeg har bedt dig om tidligere, så skal du lave en "Response.Write( SQL )" i linjen *før* du prøver at execute den:
Response.Write( sqlCount ) set rsBrand = Con.execute(sqlCount)
dette vil resultere i at du får skrevet din SQL ud på skærmen, så du kan se hvad det er du prøver at sende til databasen. Dette er en nyttig måde at debugge på, og hvis du ikke lige kan overskue fejlen selv, så post din SQL her inde
Jeg er ked af det, men jeg opgiver at få det til at virke. Det er for langhåret til jeg kan finde ud af det, og kan ikke rigtigt få vendt spørgsmålene rigtigt, så hvis i lige svarer, skal I få point for ulejligheden.
Select COUNT(*) from daek_tabel WHERE size_1 = '195' AND size_2 = '50' AND size_3 = '15'
hvis dine felt i databasen (size_1, size_2 og size_3) er af typen tal, så skal du ikke have '' rundt om værdierne:
Select COUNT(*) from daek_tabel size_1 = 195 AND size_2 = 50 AND size_3 = 15
denne kode bør være hvad du er på jagt efter:
sqlWhere = " WHERE " if Request.QueryString("size1") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_1 = '"&Request.QueryString("size1")&"'" end if if Request.QueryString("size2") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_2 = '"&Request.QueryString("size2")&"'" end if if Request.QueryString("size3") <> "Alle" then if sqlWhere <> "" then sqlWhere = sqlWhere & " AND " sqlWhere = sqlWhere & "size_3 = '"&Request.QueryString("size3")&"'" end if
sqlCount = "Select COUNT(*) from daek_tabel " & sqlWhere sqlBrand = "Select [brand],model from daek_tabel " & sqlWhere & " Order by [brand],model ASC"
set rsBrand = Con.execute(sqlCount) strAntal = rsBrand(0) set rsBrand = Con.execute(sqlBrand )
nuke->(size_1, size_2 og size_3) er alle tekst, der har tidligere været blandet bogstaver ind i det, men det virker stadigt ikke og du skal ikke bruge mere tid på det, jeg må forsøge at læst mig til hvordan jeg gør. Og indtil da må man tælle dem manuelt :-)
Jeg har været derinde adskillige gange, men jeg syntes det er meget, firkantet, sådan gør du hvis du vil etellerandetbestemt. Og ikke hvis du vil gøre sådan eller sådan, kan du... det mangler lidt nærmere beskrivelse af hvad tingene gør og hvorfor. Men jeg må have mig nogle bøger!
tutorialen på html.dk bør kunne hjælpe. du *vil* noget bestemt. du vil hive nogle data ud af en database. til dette så har du behov for at bruge SQL.
du skal prøve at sætte sammen en SQL ved hjælp af noge kriterier på din side. Du må lære dig at bryde problematikken op, løse deler af problemet og derefter sette delerne sammen. jeg ville have startet med at lave en side der søger i *alle* rækker i din database, med følgende:
sqlCount = "Select COUNT(*) from daek_tabel " sqlBrand = "Select [brand],model from daek_tabel Order by [brand],model ASC"
set rsBrand = Con.execute(sqlCount) strAntal = rsBrand(0) set rsBrand = Con.execute(sqlBrand )
og prøv at skrive ud resultatet (til dette kan *sagtens* html.dk hjælpe dig. Når dette kører, så lægger du *ett* kriterie på:
sqlWhere = " WHERE " if( Request.QueryString( "size1" ) <> "" ) Then sqlWhere = sqlWhere = " size_1 = '" & Request.QueryString( "size1" ) & "'" end if
if( sqlWhere = " WHERE " ) then sqlWhere = "" End if sqlCount = "Select COUNT(*) from daek_tabel " & sqlWhere sqlBrand = "Select [brand],model from daek_tabel " & sqlWhere & " Order by [brand],model ASC"
set rsBrand = Con.execute(sqlCount) strAntal = rsBrand(0) set rsBrand = Con.execute(sqlBrand )
når dette kører, så lægger du endnu et nyt kriterie på
NU!! fik jeg det til at virke, jeg delte det bare en del mere op, så nu vil jeg altså gerne give point!
Sådan gjorde jeg, det er ikke så elegant men det ser ud til at virke!:
sqlBrand = "Select * from daek_tabel " if sqlWhere <> "" then sqlBrand = sqlBrand & " where " & sqlWhere sqlBrand = sqlBrand & " Order by brand, model ASC" set rsBrand = Con.execute(sqlBrand)
sqlCount = "Select COUNT(*) As Antal from daek_tabel " if sqlWhere <> "" then sqlCount = sqlCount & " where " & sqlWhere 'sqlBrand = sqlBrand & " Order by brand, model ASC" set rsCount = Con.execute(sqlCount)
How havde ikke set du havde skrevet! Jeg forsøger også at tage det en ting ad gangen, men alligevel bliver det rod for mig, når man kune bruger det hver halve år, glemmer man jo hvordan man gør!
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.