Avatar billede Slettet bruger
02. februar 2011 - 16:32 Der er 13 kommentarer og
1 løsning

Hiv brugers alder ud?

Jeg har skiftet fra acces til mysql db, og har med nedenstående kode:
idag=now()
fraalder = dateadd("yyyy",0-Request("alder_max"),idag)
tilalder = dateadd("yyyy",0-Request("alder_min"),idag)

SQL = "Select * from bruger where fdag BETWEEN #" & fraalder & "# AND #" & tilalder & "#'"

set RS = conn.execute( SQL
tidligere hevet brugere ud med år BETWEEN fraalder og tilalder, men nu virker koden ikke længere, jeg får en fejlmelding som lyder:

MySQL][ODBC 3.51 Driver][mysqld-5.1.51-log]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 '' at line 1

Har nogen et forslag til hvordan problem løses?
mvh. rwj
Avatar billede arne_v Ekspert
03. februar 2011 - 01:29 #1
## omkring tid er Access specifikt.
Avatar billede Slettet bruger
03. februar 2011 - 08:54 #2
Ja, det har jeg også fundet ud af, hvilket er årsagen til jeg spørger i dette forum. Jeg har købt hæftet "start på mysql", men det er hovedsalig til php og der står ikke noget om dato. Ligeledes er det ikke lykkedes mig at finde noget materiale på nettet vedr. asp og sql/mysql, men du har måske en løsning eller kan henvise til noget?

Mvh. rwj
Avatar billede arne_v Ekspert
03. februar 2011 - 14:55 #3
Hvis du bruger parameters saa boer data format ikke vaere noget problem.
Avatar billede Slettet bruger
03. februar 2011 - 15:46 #4
jeg bruger som sagt ovenstående kode til at hente med fra access og kan åbenbart ikke bruge den til mysql. Skal der også i mysql være "gitter" eller hvad de nu hedder omkring dato ved forespørgelser?
Avatar billede arne_v Ekspert
04. februar 2011 - 04:07 #5
Den nemme løsning er parameters.

Ekempel:

cmd.CommandText = "INSERT INTO params(id,tid) VALUES(@id,@tid)"
cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput))
cmd.Parameters.Append(cmd.CreateParameter("@tid", adDate, adParamInput))
cmd.Parameters("@id") = 3
cmd.Parameters("@tid") = CDate("9-JUN-2005")
cmd.Execute
Avatar billede arne_v Ekspert
04. februar 2011 - 04:08 #6
Vil du bøvle, så er formatet for datetime literals:

'YYYY-MM-DD HH:MM:SS'
Avatar billede Slettet bruger
04. februar 2011 - 08:46 #7
Din "nemme løsning" siger mig desværre overhovedet intet:-)
Et skift fra access til mysql kan forhåbentlig ikke kræve så drastiske ændringer, kan jeg ikke blot ændre lidt i koden jeg brugte til access?

idag=now()
fraalder = dateadd("yyyy",0-Request("alder_max"),idag)
tilalder = dateadd("yyyy",0-Request("alder_min"),idag)

SQL = "Select * from bruger where fdag BETWEEN #" & fraalder & "# AND #" & tilalder & "#'"

set RS = conn.execute( SQL)

Jeg vil med denne kode hive brugere ud som f.eks. er mellem 55 og 60 år, og den virkede fint i access.
mvh. rwj
Avatar billede arne_v Ekspert
04. februar 2011 - 15:49 #8
Problemet er ikke er ikke et access til MySQL problem, men et problem i din kode.

Du har valgt at skrive din kode så den er Access specifikt.

Nu kan du så vælge at lave koden om til at bruge parameters, så den (ihvertfald den del) ikke er database spcifik.

Eller du kan vælge at bruge MySQL format for datetime literals. Og så leve med at det skal ændres igen næste gang du skifter database.
Avatar billede Slettet bruger
05. februar 2011 - 09:57 #9
Tak, så blev jeg da lidt klogere, havde ellers fået indtryk af, at et skift fra access til mysql skulle være rimeligt nemt:-) 

Desværre så har jeg ingen som helst idé om, hvordan jeg skal bruge din kode fra #5 eller #6, er det blot i forespørgelsen der skal ændres eller andet?

God weekend.
mvh. rwj
Avatar billede arne_v Ekspert
05. februar 2011 - 16:00 #10
Det sidste er bare at ændre koden så resultatet bliver:

BETWEEN '2011-02-01' AND '2011-02-10'
Avatar billede arne_v Ekspert
05. februar 2011 - 16:01 #11
Måske:


BETWEEN '2011-02-01 00:00:00' AND '2011-02-10 23:59:59'
Avatar billede Slettet bruger
05. februar 2011 - 19:19 #12
Jeg tror jeg har forstået lidt nu:-) Min form har 2 felter, et med alder_min og et med alder_max.

Så er der selv koden til at hive brugerne ud med, og den skulle være ok, og ser sådan ud:

SQL = "Select * from bruger where fdag BETWEEN #" & fraalder & "# AND #" & tilalder &
set RS = conn.execute( SQL )

inden der bliver hevet noget ud af db fra feltet fdag (fødselsdato), så skal alder_min og alder_max konverteres til Mysql datoformat, og det skulle så være:

cmd.CommandText = "INSERT INTO params(id,tid) VALUES(@id,@tid)"
cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput))
cmd.Parameters.Append(cmd.CreateParameter("@tid", adDate, adParamInput))
cmd.Parameters("@id") = 3
cmd.Parameters("@tid") = CDate("9-JUN-2005")
cmd.Execute

Er det korrekt forstået og i så fald, hvordan skal det se ud. Jeg er 100% blank:-)
Avatar billede arne_v Ekspert
13. februar 2011 - 01:13 #13
Du skal jo lave en SELECT ikke en INSERT !?!?
Avatar billede Slettet bruger
14. maj 2011 - 13:25 #14
lukker
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