Avatar billede al Nybegynder
23. april 2001 - 14:37 Der er 26 kommentarer og
1 løsning

find dato i DB, hvordan? (HASTER)

Hej

Jeg har en database med poster der har en dato. Man skal så kunne hive poster ud af den ved at definere en dato.

Jeg har en <form> med <select> hvor der er dage med value 1-31 og en <select> med value 1-12.

Man skal også kunne finde poster der bare er i en bestemt månede, ved ikke at vælge dag

problemet ligger i at dato står som dato/tid i DB, og jeg skal jo kun vælge dato...
Avatar billede sone Nybegynder
23. april 2001 - 14:42 #1
Lav en IF.
IF (ingen dato) THEN
  SQL\"...datofelt>=2001-04-01 AND datofelt<=2001-04-30\"
ELSE
  SQL\"...datofelt=2001-04-23\"
END IF
Avatar billede hildesheim Nybegynder
23. april 2001 - 14:44 #2
Hent datoen fra databasen og split den ved \"/\", \"-\" eller hvad nu dagene er delt fra måneden osv. med.

Og lav så noget i stil med:
IF splitdato(0) = request.form(\"dag\") THEN
  bla bla bla....
END IF

IF splitdato(1) = request.form(\"maaned\") THEN
  bla bla bla....
END IF

Avatar billede al Nybegynder
23. april 2001 - 14:49 #3
MEN HVAD MED KLOKKESLETTET?
Det ligger jo i DB som  dd-mm-åå tt:mm:ss
hvis man tager dato derfra kommer tidspunktet også med... og det er jo kun datoen der skal sammenlignes  :(
Avatar billede hildesheim Nybegynder
23. april 2001 - 14:51 #4
Okay så lav følgende:

dag = mid(rs.fields(\"dato\"),0,2)
maaned = mid(rs.fields(\"dato\"),4,2)

Skal du bruge året, overhovedet?
Avatar billede spectual Nybegynder
23. april 2001 - 14:55 #5
den dér vil ikke virke hvis datoen ligger indenfor de første 9 dage i en måned, hildesheim
Avatar billede al Nybegynder
23. april 2001 - 14:55 #6
nej, der er ikk input med året... men det ku være fedt at der kon kom poster der var inde for det første år...
Avatar billede hildesheim Nybegynder
23. april 2001 - 14:58 #7
jo, for den skriver jo 05 og 01 osv., ikke?

Men hvis du ikke skal bruge året, virker den første metode fint...
Avatar billede ldanielsen Nybegynder
23. april 2001 - 14:58 #8
Hvilken Database er det?

Hvis du sender formen med POST, og databasen forstår SQL, så gør sådan her:

Ugedag = Request.Form(\"UgeDag\")
Maaned = Request.Form(\"Maaned\")
\'eller hvad du nu kalder det

if Ugedag <> \"\" then
  SQL = \"SELECT Felter FROM Tabellen WHERE DatePart(d, Datofelt) = \'\" & Ugedag &\"\' AND DatePart(m, Datofelt) = \'\" & Maaned & \"\'\"
else
  SQL = \"SELECT Felter FROM Tabellen WHERE DatePart(m, Datofelt) = \'\" & Maaned & \"\'\"
end if

Avatar billede ldanielsen Nybegynder
23. april 2001 - 14:58 #9
Jeg er ikke sikker på at Access forstår \"DatePart\"  :(
Avatar billede hildesheim Nybegynder
23. april 2001 - 15:00 #10
Når du ikke skal bruge året kan du sagtens bruge den første metode. Din splitarray kommmer til at se sådan ud:

splitdato(0) = dd
splitdato(1) = mm
splitdato(2) = åå tt:mm:ss

så splitdato(2) er faktisk bare \"skrald\", du alligevel ikke skal bruge. Du kan jo stadig lave en \"ORDER BY dato\", hvis du vil have de nyeste først
Avatar billede al Nybegynder
23. april 2001 - 15:01 #11
Det er Access, og der er der jo nuller med forand de \"små\" datoer...
Avatar billede ldanielsen Nybegynder
23. april 2001 - 15:02 #12
Fejl: Der skal ikke være \' omkring maaned og ugedag:

if Ugedag <> \"\" then
  SQL = \"SELECT Felter FROM Tabellen WHERE DatePart(d, Datofelt) = \" & Ugedag &\" AND DatePart(m, Datofelt) = \" & Maaned
else
  SQL = \"SELECT Felter FROM Tabellen WHERE DatePart(m, Datofelt) = \" & Maaned
end if
Avatar billede hildesheim Nybegynder
23. april 2001 - 15:03 #13
altså:

dato = rs.fields(\"dato\")
splitdato = split(dato,\"-\")
Avatar billede ldanielsen Nybegynder
23. april 2001 - 15:05 #14
Ang. Nullerne, så siger du blot:

Ugedag = Cint(\"0\"&Request.Form(\"UgeDag\"))
Maaned = Cint(\"0\"&Request.Form(\"Maaned\"))

og derefter:
if Ugedag <> 0 then
Avatar billede al Nybegynder
23. april 2001 - 15:10 #15
arhhh, phreaking....

ka i ikk lige lave en samlet hvor det hele er i.... jeg ka ikke overskue svarende mere...

jeg ka godt sætte nuller foran dagene i value i <select> i min <form>
Avatar billede ldanielsen Nybegynder
23. april 2001 - 15:11 #16
hildesheim > Du tænker på at trække alle poster ud af databasen, og så checkke i VbScript hvilke der skal bruges.

Jeg prøver på at lave et recordset, der kun indeholder de relevante poster, ved at lave udvælgelsen i SQL-sætningen.

Hvis der er \"mange\" poster, er min løsning helt sikkert den rigtige, da det forhindrer en masse unødvendig trafik på serveren. Ellers er din metode helt fin (når den lige kommer på plads), og muligvis også nemmere at lave.

Sagen er, at jeg ikke er vant til Access, så jeg kan nok ikke lave de rigtige SQL-sætninger lige på et sekund.

Hvad siger al, er der mange poster? Hvad kan du bruge?
Avatar billede al Nybegynder
23. april 2001 - 15:13 #17
det er meget godt hvis det er en metode hvor der er mindst mulig trafik på serveren...
Avatar billede hildesheim Nybegynder
23. april 2001 - 15:14 #18
Okay forfra :)

dato = rs.fields(\"dato\")
splitdato = split(dato,\"-\")

IF cint(splitdato(0)) = cint(request.form(\"dag\")) AND cint(splitdato(1)) = cint(request.form(\"maaned\")) THEN
  bla bla bla....
END IF
Avatar billede al Nybegynder
23. april 2001 - 15:15 #19
Jeg vil altså helst ha det til at virke som en SQL forspørgsel... hvor den altså henter de poster der ligger på en bestemt dag eller i en bestemt månede...
Avatar billede hildesheim Nybegynder
23. april 2001 - 15:16 #20
nååå ok, der twister du den lige...point taken :)
Avatar billede ldanielsen Nybegynder
23. april 2001 - 15:22 #21
Ja, så har jeg lige testet i Access, og det virker, med en lille rettelse, der skal være \' omkring m og d:

Her er det hele:
Ugedag = Cint(\"0\"&Request.Form(\"UgeDag\"))
Maaned = Cint(\"0\"&Request.Form(\"Maaned\"))
\'eller hvad du nu kalder det
\'nullerne er fordi at det ikke går at sige
\'Cint(\"\"), og Cint(\"002\") er alligevel det
\'samme som Cint(\"02\")

if Ugedag <> \"\" then
  SQL = \"SELECT Felter FROM Tabellen WHERE DatePart(\'d\', Datofelt) = \" & Ugedag &\" AND DatePart(\'m\', Datofelt) = \" & Maaned
else
  SQL = \"SELECT Felter FROM Tabellen WHERE DatePart(\'m\', Datofelt) = \" & Maaned
end if

\'så skal den bare åbnes:
Rec = Con.Execute(SQL)
\'eller hvordan du nu er vant til at bruge det

Foreløbig er jeg helt ligeglad med årstal, men du må jo sige til hvis det ikke spiller som det skal
Avatar billede ldanielsen Nybegynder
23. april 2001 - 15:26 #22
Undskyld:

if Ugedag <> 0 then
Avatar billede al Nybegynder
23. april 2001 - 15:32 #23
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

og her har jeg kun

Ugedag = Cint(\"0\" & Request.Form(\"dag\"))
Maaned = Cint(\"0\" & Request.Form(\"maanede\"))

Sql = Sql & \"WHERE DatePart(\'d\', Datofelt) = \" & Ugedag & \" AND DatePart(\'m\', Datofelt) = \" & Maaned

hvad gør den der \"DatePart\" ?
Avatar billede al Nybegynder
23. april 2001 - 15:33 #24
og self har jeg valgt dag og månede i min <form>
Avatar billede al Nybegynder
23. april 2001 - 15:40 #25
damed... sorry... jeg havde glemt at ændre \"Datofelt\" til mit egent tabelnavn...
Avatar billede al Nybegynder
23. april 2001 - 16:30 #26
Ok, fee nok... Det spiller bare MAX nu...
Avatar billede ldanielsen Nybegynder
23. april 2001 - 16:36 #27
DatePart trækker de enkelte dele af en dato ud af et datofelt, og det foregår inde i Access:

DatePart(\"m\", DatoFelt) = [månedens nummer]

osv.

Så er men fri for at tænke på forskellige datoformater, og det er jo rart!

Glad for hvis det virker, til 200 p skulle det gerne være i orden. Spørg bare!

Hilsen Lars
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