Avatar billede justdoit Nybegynder
22. november 2002 - 19:20 Der er 25 kommentarer og
2 løsninger

Søgning på dato

Jeg har en selectbox, hvor men skal kunne søge på en post der ikke må være ældre end fx 5 eller 10 dage!

Her henter jeg variablen ind, som fx er 5:

strDAto = Trim(Request.Form("dato"))

StrSql = "SELECT * FROM annoncer WHERE"
StrSql = StrSql & "(hvad skal stå her)"

Hvordan kan jeg lave det?
Avatar billede pfp Nybegynder
23. november 2002 - 10:29 #1
Hej,

Prøv med følgende:

<%
strDato = Trim(Request.Form("dato"))
strDato = "-" & strDato
NyDato = DateAdd("d", strDato, Date)

StrSQL = "SELECT * FROM Annoncer WHERE Dato BETWEEN " & "#" & NyDato & "#" & " AND " & "#" & Date() & "#"
%>

Jeg er ikke helt sikker på SQL'en, men NyDato variablen indeholder værdien af dagsdato minus det tal du har tastet ind i din Request.Form("dato")

Jeg går i min SQL-sætning også ud fra at du har et felt i din tabel der hedder Dato.
Avatar billede justdoit Nybegynder
23. november 2002 - 10:36 #2
jeg har et felt der hedder data i min db, bare rolig ;o)

Men jeg forstår ikke helt hvad det er der sker!
Denne sætning:

NyDato = DateAdd("d", strDato, Date)

Hvad gør den?
Avatar billede pfp Nybegynder
23. november 2002 - 10:39 #3
DateAdd gør det at den ligger et antal dage/måneder/år til en allerede given dato.

"d" angiver at vi her snakker om dage. strDato henter din variable værdi, altså det antal dage der skal ligges til. Og Date angiver hvilken dato det er der skal ligges til/trækkes fra.

Og i næste linie:
strDato = "-" & strDato

Her kan du se jeg har sat et minus foran fordi vi i dit tilfælde ikke skal ligge noget til en dato, men derimod trække fra. Altså minus.

Forstår du det? Ellers spørg igen.

/peter
Avatar billede justdoit Nybegynder
23. november 2002 - 11:01 #4
Ok, men i denne sætning:

strDato = Trim(Request.Form("annoncerdage"))
strDato = "-" & strDato

Her bliver strDato = "-" & strDato da lig med nul ?? skal den det?
Avatar billede justdoit Nybegynder
23. november 2002 - 11:02 #5
Arhh har lige fundet ud af det, du laver bare variablen fra fx 10 til - 10 i!
Avatar billede pfp Nybegynder
23. november 2002 - 11:03 #6
Den skulle da meget gerne ikke blive lig nul.

Hvis du f.eks. har en dato 23-11-2002 og indtaster 5 i dit felt så trækker den 5 dage fra ved at minuse fra start-datoen og det vil dermed give 18-11-2002.

Jeg har testet at det virker.
Avatar billede pfp Nybegynder
23. november 2002 - 11:04 #7
Ja den her gør den bare negativ:
strDato = "-" & strDato
Avatar billede justdoit Nybegynder
23. november 2002 - 11:12 #8
Jeg får denne fejl når jeg sætter det ind??

Microsoft VBScript runtime error '800a000d'

Type mismatch: '[string: "-"]'
Avatar billede pfp Nybegynder
23. november 2002 - 11:24 #9
Det må være fordi vi skal have brygget en anden SQL sammen tror jeg. For den anden del af scriptet, med at trække f.eks. fem dage fra dags dato har jeg testet og fået til at virke her.

Hvilket styresystem kører du? Og bruger du PWS eller IIS og hvilken version?
Avatar billede justdoit Nybegynder
23. november 2002 - 11:29 #10
Ja, du har rer - jeg skal have bygget den sammen med nogen andre variable:

Sådan ser den ud lige nu! Jeg har også lige tilføjet et ) ved #..

StrSql = "SELECT * FROM annoncer WHERE"
StrSql = StrSql & "(annoncetekst LIKE '%" & LCase(strKeyword) & "%')"
StrSql = StrSql & "AND (dato BETWEEN " & "#" & NyDato & "#" & " AND " & "#" & Date() & "#)"

Men jeg arbejder med Mysql og bruger IIS ver 5.1 fra WinXP pro
Avatar billede pfp Nybegynder
23. november 2002 - 11:31 #11
Hmm, jeg kan ikke lige gennemskue hvad der er galt med den sidste.
Hvad får du af fejl?

Er det her du får type mismatch?
Avatar billede justdoit Nybegynder
23. november 2002 - 11:35 #12
Nej fejlen ligger her:

NyDato = DateAdd("d", strDato, Date)
Avatar billede pfp Nybegynder
23. november 2002 - 11:36 #13
Hmmm, jeg er vist for træt. Lad os vente og se om vi ikke kan få eagleeye til at blande sig lidt.
Avatar billede justdoit Nybegynder
23. november 2002 - 11:40 #14
Ja, ok - men tak for hjælpen ellers!
Avatar billede pfp Nybegynder
23. november 2002 - 11:41 #15
Det var så lidt, det kan da være jeg får en fix ide og vender tilbage senere.
Avatar billede eagleeye Praktikant
24. november 2002 - 01:16 #16
Du skriver:

"Her henter jeg variablen ind, som fx er 5:

strDAto = Trim(Request.Form("dato"))"

Så du kan finde den dato du vil havd record fra ved:

dato = DateAdd("d",-strDAto, date)
Avatar billede eagleeye Praktikant
24. november 2002 - 01:17 #17
Når du så har dato'en så skal den laves om til formatet yyyy-mm-dd hvis du har en kolonne med dato format i MySQL. Er kolonne af typen date?
Avatar billede eagleeye Praktikant
24. november 2002 - 01:21 #18
Dato kan laves i yyyy-mm-dd formate sådan her:

dato = Year(Dato) & "-" & Month(Dato) & "-" & Day(Dato)


Så kan du lave din SQL sådan her. Bemærk at det kun er Access som skal havde dato i # via SQL, mySQL skal det i ' lige som tekst:

StrSql = "SELECT * FROM annoncer WHERE"
StrSql = StrSql & "(annoncetekst LIKE '%" & LCase(strKeyword) & "%')"
StrSql = StrSql & " AND (dato >= '" & dato & "')"
Avatar billede justdoit Nybegynder
24. november 2002 - 01:32 #19
Tak, jeg prøver lige at se på det, og så vender jeg tilbage ;o)
Avatar billede justdoit Nybegynder
24. november 2002 - 01:43 #20
Jeg tror ikke du har fået helt fat i det, eller også forstår jeg ikke!

Her hanter jeg et tal fra en selectbox, tallet kan være fx 5, hvis jeg vil se annoncer der fx må være op til 5 dage gamle.

strDAto = Trim(Request.Form("dato"))" '( fx 5)

Når jeg så søger på en annonce i dag den 24-11-2002 og har valgt 5 dage gamle annoncer, så skal den finde alt der er nyere den den 19-11-2002

Hvis du forstår?
Avatar billede eagleeye Praktikant
24. november 2002 - 01:52 #21
Måske prøver lige med koden og kommentar i et.:

'Hendter antal dage der skal vises bagud
strDAto = Trim(Request.Form("dato"))"

'Udregn hvilken dato der skal findes tilbage til
dato = DateAdd("d",-strDAto, date)

'Konverter til mySQL format yyyy-mm-dd
dato = Year(Dato) & "-" & Month(Dato) & "-" & Day(Dato)

'Lav SQL sætning som finder alt fra dato og frem:
SQL = "SELECT * FROM xxxxx WHERE dato_kolonne >= '" & dato & "'"
Avatar billede justdoit Nybegynder
24. november 2002 - 12:07 #22
Hej

Nu har jeg sat det ind, og det ser ud som følgende:

strDato = Trim(Request.Form("annoncerdage"))

'Udregn hvilken dato der skal findes tilbage til
NyDato = DateAdd("d", -strDato, Date)

'Konverter til mySQL format yyyy-mm-dd
strNydato = Year(NyDato) & "-" & Month(NyDato) & "-" & Day(NyDato)

'Min sql

StrSql = StrSql & "AND (dato >= '" & strNydato & "')"

Men jeg får en fejl i denne linie, hvor jeg tror der er fejl med den måde, der bliver skriftet fortegn, fra positiv til netagiv!

NyDato = DateAdd("d", -strDato, Date)

Dette er fejlkoden:

Microsoft VBScript runtime error '800a000d'

Type mismatch: '[string: ""]'
Avatar billede justdoit Nybegynder
24. november 2002 - 19:44 #23
Hva eagleeye, er det ikke noget du kan finde ud af ? ;o)
Avatar billede eagleeye Praktikant
25. november 2002 - 09:51 #24
Så bliver der ikke overført noget tal til siden via annoncerdage.. du sikker på felter hedder annoncerdage med r og ikke annoncedage??

strDato = Trim(Request.Form("annoncerdage"))
Avatar billede justdoit Nybegynder
25. november 2002 - 13:10 #25
Denne er rigtig nok:
strDato = Trim(Request.Form("annoncerdage"))

Men jeg havde hante variablen forkert ind, sådan at den ikke kunne regne på datoen, men jeg fået det til at virke.

Men kan det passe at når jeg skal lave søninger på fx 4 forskellige ting, at jeg skal have lavet 4*3*4 = 24 forskellige strenge??
Avatar billede justdoit Nybegynder
25. november 2002 - 16:52 #26
jeg har følgende, men hvis jeg søger på annoncer der kun må være op til fx 5 dage gamle, finder den også den fx 5-11-2002?????

Her er koderne:


if (strLav <> "0") OR (strHoej <> "999999") AND (strLav < strHoej) AND (strKeywordLand = "1") AND (strDato <> "") then

NyDato = DateAdd("d", -strDato, Date)

strNydato = Year(NyDato) & "-" & Month(NyDato) & "-" & Day(NyDato)

StrSql = "SELECT * FROM annoncer WHERE"
StrSql = StrSql & "(annoncetekst LIKE '%" & StrKeyword & "%')"
StrSql = StrSql & "AND (landsdel = '2' OR landsdel = '3' OR landsdel = '4' or landsdel = '5')"
StrSql = StrSql & "AND (0+Pris Between " & strLav & " AND " & strHoej & ")"
StrSql = StrSql & "AND (dato >= '" & strNydato & "')"
Avatar billede justdoit Nybegynder
26. november 2002 - 10:15 #27
hmm, virker ikke rigtigt endnu!!

Jeg får denne fejl når jeg søger på et ord!!

Microsoft OLE DB Provider for ODBC Drivers error '80040e09'
[TCX][MyODBC]You have an error in your SQL syntax near 'AND )' at line 1

/beta1/soegning.asp, line 309
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