Oprettet søn. d. 12. august 2007 kl. 00:54:57

flodhesten
flodhesten (13.705 point. Point ude: 550)

Lidt problemer med databaseudtræk.

Hej eksperter.

Hehe, kan man på nogen måde gøre det her?

Set rs = Conn.Execute("select top 5 * from user where games => 250 order by answerscorrect / (games * 10) desc")

Jeg er udemærket godt klar over, at ovenstående ikke virker, men kan man lave sådan, at princippet vil virke? Kan lige sige at både answerscorrect og games er tal-værdier.

På forhånd tak.

Skrevet søn. d. 12. august 2007 kl. 07:47:41| #1

nielle
nielle (159.526 point)
Bare til en anden gang: Dette spørgsmåål hører egentlig mere hjemme under en af Ekspertens database-kategorier.

Men prøv denne:

Set rs = Conn.Execute("
SELECT TOP 5 *, answerscorrect / (games * 10) AS rating
FROM user
WHERE games => 250
ORDER BY rating DESC
")

Skrevet søn. d. 12. august 2007 kl. 09:47:59| #2

flodhesten
flodhesten (13.705 point)
Okay, vil jeg prøve at huske.

Jeg prøver at køre koden, men jeg får blot "Siden kan ikke vises". Har ellers slået til sådan at den skal fejlmelde, men ved ikke hvorfor den ikke gør.

ser det her forkert ud?

<%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("database.mdb")
Set rs = Conn.Execute("
SELECT TOP 2 *, answerscorrect / (games * 10) AS rating
FROM user
WHERE games => 250
ORDER BY rating DESC
")
%>

<% do while not rs.eof %>

<% = rs("games") %><br>
<%
rs.movenext
loop
%>

Jeg skal lige minde om, at games kan være 0, det vil sige at man egentlig kan komme til at devidere med nul, hvilket jo matematisk set ikke er muligt.

Men har jeg gjort noget forkert ovenfor?

Skrevet søn. d. 12. august 2007 kl. 10:00:19| #3

nielle
nielle (159.526 point)
VB Script er ikke vild med at man deler over flere linjer på netop den måde. Det var bare min måde at vise de forskellige komponenter af SQL'en. Den skal se sådan ud i din kode:

<%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("database.mdb")
Set rs = Conn.Execute("SELECT TOP 2 *, answerscorrect / (games * 10) AS rating FROM user WHERE games => 250 ORDER BY rating DESC")%>

Skrevet søn. d. 12. august 2007 kl. 10:06:25| #4

flodhesten
flodhesten (13.705 point)
Får irriterende nok stadigvæk "Siden kan ikke vises med:

<%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("database.mdb")
Set rs = Conn.Execute("SELECT TOP 2 *, answerscorrect / (games * 10) AS rating FROM user WHERE games => 250 ORDER BY rating") %>

<% do while not rs.eof %>

<% = rs("games") %><br>
<%
rs.movenext
loop
%>

:/

Skrevet søn. d. 12. august 2007 kl. 10:38:59| #5

nielle
nielle (159.526 point)
Prøv at starte Access op direkte og så afprøv SQL'en i den:

SELECT TOP 2 *, answerscorrect / (games * 10) AS rating FROM user WHERE games => 250 ORDER BY rating

Det kan godt tænkes at Accesse ikke er vild med syntaksen, selv om andre database-typer acceptere det...

Skrevet søn. d. 12. august 2007 kl. 10:44:01| #6

flodhesten
flodhesten (13.705 point)
Hehe, nu er jeg ikke lige en haj til det med forskellige databaser åbninger, kan du ikke hjælpe mig lidt? ;)

Skrevet søn. d. 12. august 2007 kl. 11:05:48| #7

nielle
nielle (159.526 point)
Du skal starte Acces på din egen maskine, og så åbner di mdb-filen fra denne. Dette kræver selvfølgelig at diu har filen liggende lokalt.

Skrevet søn. d. 12. august 2007 kl. 11:12:29| #8

flodhesten
flodhesten (13.705 point)
Ehm, jeg forstår ikke helt... Hvad er formålet med det? Og hvordan kan jeg afprøve SQL'en direkte?

Skrevet søn. d. 12. august 2007 kl. 11:30:50| #9

nielle
nielle (159.526 point)
Formålet er netop at afprøve SQL-koden uden at den er viklet ind i en helt masse ASP-kode. På den måde kan man isolere hvor det er at fejlen opstår henne: Er det i ASP-koden eller i SQL-koden?

For at afprøve en SQL-sætning i Access skal du vist oprette en Forespørgsel. Derefter er der et eller andet sted, hvor at du kan skifte til at se denne som SQL. I det vindue kan du indtaste din SQL fra ovenfor og så køre den.

Skrevet søn. d. 12. august 2007 kl. 11:34:31| #10

flodhesten
flodhesten (13.705 point)
Det er vist nok kompliceret nogen derinde under forespørgelser :P Jeg kan ikke lige se et felt hvor jeg skal skrive det...

Skrevet søn. d. 12. august 2007 kl. 11:40:22| #11

flodhesten
flodhesten (13.705 point)
Ok, har prøvet mig lidt frem, og den kan fint finde nogle felter med:

SELECT TOP 2 *, answerscorrect / (games * 10) AS rating FROM user WHERE games > 250 ORDER BY rating

men denne duer ikke:

SELECT TOP 2 *, answerscorrect / (games * 10) AS rating FROM user WHERE games => 250 ORDER BY rating

Kan det være => der er noget galt med?

Skrevet søn. d. 12. august 2007 kl. 11:43:08| #12

flodhesten
flodhesten (13.705 point)
Arh, det var der problemet var ;)

Men hvordan kan jeg løse problemet med, at jeg kan komme til at dividere med 0?

Skrevet søn. d. 12. august 2007 kl. 11:54:24| #13

nielle
nielle (159.526 point)
Det skal være >= ikke =>

Skrevet søn. d. 12. august 2007 kl. 11:55:25| #14

nielle
nielle (159.526 point)
Division med 0 er vel ikke noget problem. De skal vel ikke være med i top-5 alligevel.

Skrevet søn. d. 12. august 2007 kl. 12:51:51| #15

flodhesten
flodhesten (13.705 point)
Har du nok ret i.

Jeg tænkte på, om man kan lave noget om i denne her, så det kommer til at fungere?

Set rs = Conn.Execute("select * from user order by DateDiff("n",now,"lastactive") > -10 ")
hvor lastactive er format dd-mm-yyyy hh-mm-ss


Jeg doubler lige op med point, hvis du kan hjælpe mig.

Skrevet søn. d. 12. august 2007 kl. 12:53:35| #16

flodhesten
flodhesten (13.705 point)
Den skal egentlig 'bare' være:

Set rs = Conn.Execute("select * from user order by DateDiff("n",now,"lastactive") ")

Skrevet søn. d. 12. august 2007 kl. 17:14:06| #17

nielle
nielle (159.526 point)
Så er det vel nok med:

Set rs = Conn.Execute("SELECT * FROM user ORDER BY lastactive")

Skrevet søn. d. 12. august 2007 kl. 17:16:18| #18

flodhesten
flodhesten (13.705 point)
Ja, så det skal være
Set rs = Conn.Execute("select * from user order by DateDiff("n",now,"lastactive") > -10 ")

Skrevet søn. d. 12. august 2007 kl. 20:15:07| #19

nielle
nielle (159.526 point)
Så er det nok ikke ORDER BY du leder efter, men derimod WHERE:

Set rs = Conn.Execute("SELECT * FROM user WHERE DateDiff('n', Now(), lastactive) > 10")

Skrevet søn. d. 12. august 2007 kl. 21:41:02| #20

flodhesten
flodhesten (13.705 point)
Takker...

Jeg tænkte på...

Set rs = Conn.Execute("SELECT TOP 10 *, answerscorrect / (games * 10) AS rating FROM user WHERE games > 100 ORDER BY rating")

Kan man ikke kalde den noget andet end "rating" - det er nemligt lidt uheldigt, da jeg i forvejen har et felt der hedder rating... Det ser ud som om at den sortere efter den i stedet for answerscorrect / (games * 10)

Og post lige et svar...

Skrevet søn. d. 12. august 2007 kl. 22:00:09| #21

nielle
nielle (159.526 point)
Jo da - "AS rating" definere bare at "rating" er et alias for værdien af "answerscorrect / (games * 10)". Rating var blot mit bud på et passende alias-navn, og du kan sagtens vælge noget helt andet hvis du vil.

... og et svar

Skrevet man. d. 13. august 2007 kl. 06:54:01| #22

flodhesten
flodhesten (13.705 point)
Og dog... jeg får en fejl ved at kalde den ffffffs, og har også prøvet andet som ikke virker.

Den melder:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

statistic.asp, line 86

Skrevet man. d. 13. august 2007 kl. 06:57:50| #23

flodhesten
flodhesten (13.705 point)
... Ved følgende kode:

Set rs = Conn.Execute("SELECT TOP 10 *, answerscorrect / (games * 10) AS ffffffs FROM user WHERE games > 100 ORDER BY ffffffs") %>

Skrevet man. d. 13. august 2007 kl. 07:38:40| #24

nielle
nielle (159.526 point)
Hvad sker der hvis du afprøver den der direkte i Access?

Skrevet man. d. 13. august 2007 kl. 15:17:27| #25

flodhesten
flodhesten (13.705 point)
Den skriver:

Der er en ugyldig SQL-sætning. "DELETE", "INSERT", "PROCEDURE", "SELECT" eller "UPDATE" var ventet.

Skrevet man. d. 13. august 2007 kl. 15:22:52| #26

flodhesten
flodhesten (13.705 point)
Hov, det var en fejl... Der kommer sådan en boks op, hvor der står: "Indtast parameterværdi"...

Skrevet tir. d. 14. august 2007 kl. 07:15:53| #27

nielle
nielle (159.526 point)
Hmm, ikke så godt. Hvad sker der hvis du indtaster et tal i den?

Skrevet tir. d. 14. august 2007 kl. 14:22:18| #28

flodhesten
flodhesten (13.705 point)
Så laver den en ny kollonne ved navn ffffffs og regner så ud det den skal... 0,421311475409836, 0,955238095238095 osv...

Skrevet ons. d. 15. august 2007 kl. 09:13:44| #29

nielle
nielle (159.526 point)
Det er netop derfor at det kan være en god ide at afprøve SQL'en uafhængigt af resten af ASP koden...

Prøv med denne SQL (desværre har jeg ikke selv lige Access ved hånden, og kan derfor ikke afprøve den):

SELECT TOP 10 *
FROM
(
    SELECT *, answerscorrect / (games * 10) AS ffffffs
    FROM user
    WHERE games > 100
)
ORDER BY ffffffs DESC

Skrevet ons. d. 15. august 2007 kl. 09:20:47| #30

flodhesten
flodhesten (13.705 point)
Den ser ud til at virke, den gør i hvert det den skal når jeg kører den i access.

Skrevet ons. d. 15. august 2007 kl. 09:32:09| #31

flodhesten
flodhesten (13.705 point)
Set rs = Conn.Execute("SELECT TOP 10 * FROM (SELECT *, answerscorrect / (games * 10) AS ffffffs FROM user WHERE games > 100 ) ORDER BY ffffffs DESC ")

Det virker :D

Tak for hjælpen.

Skrevet ons. d. 15. august 2007 kl. 14:31:39| #32

nielle
nielle (159.526 point)
Selv tak for point :^)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

ASP: formular udtræk med mulighed for at rette

Oprettet den 21. maj 2012 kl. 15.09
quarkb giver 200 point for svar | Giv et svar »

Sorter biblioteker efter dato i ASP

Oprettet den 17. maj 2012 kl. 16.52
4ks giver 60 point for svar | Giv et svar »

Simpel login-funktion (web) - behov for flere logins/brugere

Oprettet den 15. maj 2012 kl. 09.54
madx giver 75 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger