Avatar billede fun22 Nybegynder
13. januar 2006 - 15:26 Der er 12 kommentarer og
1 løsning

Problem med SQL

Hej..

Jeg har en sql som laver fejl:

SQL = "SELECT * FROM ef_hot WHERE ok = '1' AND alder(ownerage) >= "&strFrom&" AND alder(ownerage) <= "&strTo&" Order By Rand() Limit 1"

Får følgende fejl:

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

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-standard]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(ownerage) >= 15 AND alder(ownerage) <= 20 Order By Rand() Limi

Jeg har øverst på siden denne funktion:

function alder(dato)
  a = Year(date) - Year(dato)
  if Month(date) < Month(dato) OR (Month(date) = Month(dato) AND Day(date) < Day(dato)) then
    a = a -1
  end if

Kan man ikke udføre en funktion i en sql?
    alder = a
end function
Avatar billede peter_jensen Nybegynder
13. januar 2006 - 15:43 #1
Jo...det kan man godt...men du skal huske at adskille hvad der er sql-sætning og hvad der er ASP kode. Det gør du allerede ved dine variabler kan jeg se :o)

SQL = "SELECT * FROM ef_hot WHERE ok = '1' AND " & alder(ownerage) & " >= " & strFrom & " AND " & alder(ownerage) & " <= " & strTo & " Order By Rand() Limit 1"
Avatar billede fun22 Nybegynder
13. januar 2006 - 15:59 #2
okay men ownerage er jo et felt i databasen.. Har det ikke noget at sige?
Avatar billede peter_jensen Nybegynder
13. januar 2006 - 16:11 #3
Jo. Hvis ownerage er et felt i din database, så bliver du nød til at hente den værdi ud af databasen og ind i en variabel, inden du kalder din sql sætning.
Avatar billede fun22 Nybegynder
13. januar 2006 - 16:25 #4
det er bare ikke nemt når den skal vælge en random ud fra databasen, mellem de poster hvis alders grænse er eks. 15 - 99 år..
Avatar billede fun22 Nybegynder
13. januar 2006 - 16:25 #5
dato feltet er af typen yyyy-mm-dd.. Og det skal så regnes om til antal år..
Avatar billede peter_jensen Nybegynder
13. januar 2006 - 16:58 #6
Kan du så ikke bare hente værdien "ownerage" i dit sql-kald og derefter kalde din funktion alder(rs.ownerage) når du skal udskrive datoen?
Avatar billede peter_jensen Nybegynder
13. januar 2006 - 17:01 #7
Tror godt jeg kan se hvor du vil hen. Det nemmeste du kan gøre er at hente data fra databasen ind i et array og derefter løbe det array igennem for at finde de poster hvor alderen ligger mellem "strFrom" og "strTo".
Avatar billede peter_jensen Nybegynder
13. januar 2006 - 17:06 #8
Der findes jo forresten også en sql funktion der hedder BETWEEN. Måske kan du gøre sådan her:

SQL = "SELECT * FROM ef_hot WHERE ok = '1' AND ownerage BETWEEN " & strFrom & " AND " & strTo & " Order By Rand() Limit 1"
Avatar billede fun22 Nybegynder
13. januar 2006 - 17:38 #9
det dur ikke for ownerage er i dato format og strFrom og strTo er år eks 17..
Avatar billede peter_jensen Nybegynder
13. januar 2006 - 17:51 #10
Hmm...
Måske kan du så lave strFrom og strTo om til dato-format vha. en funktion.

function KonverterAlderTilDato(VarAlder)
  KonverterAlderTilDato = day(Now) & "/" & month(Now) & "/"
  VarTemp = year(Now)-VarAlder
  KonverterAlderTilDato = day(Now) & "/" & month(Now) & "/" & VarTemp
end function

Ellers må jeg indrømme at jeg er ved at være blank...sorry
Avatar billede fun22 Nybegynder
13. januar 2006 - 18:14 #11
okay, nu har jeg en sql der ser sådan her ud når jeg udskriver den:

SELECT * FROM ef_hot WHERE ok = '1' AND ownerage BETWEEN 13-01-1986 AND 13-01-1991 Order By Rand() Limit 1 

Men den siger at der ikke er nogen poster selvom der er to der matcher.. de to har i ownerage: 18-07-87.. Så den burde jo komme frem?
Avatar billede peter_jensen Nybegynder
13. januar 2006 - 18:56 #12
Det kan evt. skyldes at databasen kører efter engelske datoer...mm-dd-yyyy. Prøv at bytte rundt på dag og måned i dine datoer. Nogle databasetyper vil også gerne have "'" eller "#" omkring datoer.
Avatar billede fun22 Nybegynder
13. januar 2006 - 19:05 #13
nu virker det sådan da.. Hvordan får jeg den til altid at lave datoerne med 2 cifre? Lige nu er det jo 13-1-2006.. Jeg vil gerne have det til at være 13-01-2006.. Ellers kan den ikke find ud af det..
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