Avatar billede kalaharikid Nybegynder
03. oktober 2003 - 14:12 Der er 37 kommentarer og
1 løsning

Problem med sql between sætning

Hej,

Har en database (Access) hvori der ligger kalender poster ... det er meningen at kalenderen skal vise kalenderposter så længe de ligger indenfor startdato og slutdato ... i databasen er der oprettet følgende felter til formålet : startdato, startmaaned, startaar, slutdato, slutmaaned, slutaar .... Har lavet en sql sætning der hedder :

SELECT *  FROM t_arr  WHERE " & maane & " BETWEEN startmaaned AND slutmaaned AND " & aar  & " BETWEEN startaar AND slutaar AND godkendt = -1"

Maane og aar variabler tager det aktuelle dato og år !

Nu til problemet : Når et arrangement strækker sig over årstal ...eksempelvis 2003 til 2004 ... vises arrangementet ikke i de mellemliggende måneder men kun i slutmåneden ....

Se eksempel : http://www.boernekultur-silkeborg.dk/kal.asp

Hvad gør jeg galt ?
Avatar billede netro Nybegynder
03. oktober 2003 - 14:20 #1
Select * From t_arr Where Dato Between '" & StartDato & "' And '" & SlutDato & "'
Avatar billede kalaharikid Nybegynder
03. oktober 2003 - 14:55 #2
Er det fordi de ligger i hvert sit felt ? sætningen ovenover virker ikke ?
Avatar billede kalaharikid Nybegynder
03. oktober 2003 - 14:58 #3
skal der konstrueres en sammensat variabel (startdato + startmaaned + startaar) for at kunne regne rigtigt ?
Avatar billede kalaharikid Nybegynder
03. oktober 2003 - 15:02 #4
oh eagleeye, where art thou ?
Avatar billede netro Nybegynder
03. oktober 2003 - 15:40 #5
Så forstår jeg ikke dit spørgsmål. Jeg kan ikke se meningen med alle de felter. Hvad skal du bruge månedsfelt og årsfelt til, når du har et datofelt?
Avatar billede kalaharikid Nybegynder
03. oktober 2003 - 15:47 #6
ja, det er heller ikke helt indlysende men DAGEN (dato i måneden) for arrangementet ligger i det felt : eksempel : startdato : 22 !
Avatar billede kalaharikid Nybegynder
03. oktober 2003 - 15:49 #7
kalender viser arrangementer 1 måned af gangen ... derfor bruger jeg i sql sætningen kun maaned og aar !
Avatar billede netro Nybegynder
03. oktober 2003 - 15:58 #8
Ved hver kalenderpost har du en startdato og en slutdato for det pågældende arrangement, og nu vil du vise dem, hvis periode er inkluderet i en selvvalgt periode. Er det rigtigt forstået?
Avatar billede eagleeye Praktikant
04. oktober 2003 - 11:22 #9
Som jeg ser problemmet så er det ikke sikkert at et arrangement som strækker over et år slutter samme månede.
Hvis det starter Oktober/2003 og slutter April/2004 kommer det ikke med i den SQL du har vist. Så prøv at lave WHERE delen om så der er to dele som henholdsvis finder de arrangementer som strækker sig over års tal og den som du har:


SELECT *  FROM t_arr  WHERE ((" & maane & " BETWEEN startmaaned AND slutmaaned AND " & aar  & " BETWEEN startaar AND slutaar) OR ( startmaaned = " & maane & " AND " & aar  & " BETWEEN startaar AND slutaar)) AND godkendt = -1"
Avatar billede kalaharikid Nybegynder
05. oktober 2003 - 22:04 #10
hej eagleeye (og co),

mange tak for dit falkeblik ... der er dog stadig noget galt ("Når et arrangement strækker sig over årstal ...eksempelvis 2003 til 2004 ... vises arrangementet ikke i de mellemliggende måneder men kun i slutmåneden .... ")

Prøv f.eks. Mennesket og fysikken linket for November måned :

http://www.boernekultur-silkeborg.dk/kal.asp

Eftersom du aldrig nogensinde har fortalt mig noget der var forkert har jeg vendt blikket andetsteds i koden :
Jeg tror det måske er min "kalendervender" funktion den er gal med ...bruger følgende kode til at "bladre" med .... er det her den tilter ?

<%
If Request.QueryString("maane") = "" Then
Dim maane
maane = Month (Now)
else
maane = Request.QueryString("maane")
End if
If Request.QueryString("aar") ="" Then
Dim aar
aar = Year (Now)
else
aar = Request.QueryString("aar")
End If
If maane > 12 then
maane = 1
aar = aar + 1
ElseIf maane <1 then
maane = 12
aar = aar - 1
end if
%>

MVH Kalaharikid
Avatar billede kalaharikid Nybegynder
06. oktober 2003 - 10:42 #11
Ville løsningen være at samle datoerne i en variabel som så kunne datoformateres ?
Avatar billede eagleeye Praktikant
06. oktober 2003 - 17:30 #12
Ok, så må SQL udbygges en smugle, prøv med denne:

SELECT *  FROM t_arr  WHERE ((" & maane & " BETWEEN startmaaned AND slutmaaned AND " & aar  & " BETWEEN startaar AND slutaar) OR ((startmaaned =< " & maane & " OR slutmaaned >= " & maane & ") AND " & aar  & " BETWEEN startaar AND slutaar)) AND godkendt = -1"
Avatar billede kalaharikid Nybegynder
07. oktober 2003 - 00:49 #13
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "((10 BETWEEN startmaaned AND slutmaaned AND 2003 BETWEEN startaar AND slutaar) OR ((startmaaned =< 10 OR slutmaaned >= 10) AND 2003 BETWEEN startaar AND slutaar)) AND godkendt = -1".
/kalendar/TMP4djzomcu6d.asp, line 34
Avatar billede kalaharikid Nybegynder
07. oktober 2003 - 00:53 #14
det er talfelter hele bundtet ?
Avatar billede eagleeye Praktikant
07. oktober 2003 - 21:55 #15
hov =< skal være <= :


SELECT *  FROM t_arr  WHERE ((" & maane & " BETWEEN startmaaned AND slutmaaned AND " & aar  & " BETWEEN startaar AND slutaar) OR ((startmaaned <= " & maane & " OR slutmaaned >= " & maane & ") AND " & aar  & " BETWEEN startaar AND slutaar)) AND godkendt = -1"
Avatar billede kalaharikid Nybegynder
08. oktober 2003 - 15:34 #16
er frygtelig ked af at blive ved ... men det ændrer altså ikke på det med den første og de mellemliggende måneder ...
Avatar billede kalaharikid Nybegynder
16. oktober 2003 - 14:15 #17
hæver gerne pointsatsen hvis nogen kan hjælpe den her på plads .... ville det hjælpe at se mere af koden ?
Avatar billede eagleeye Praktikant
18. oktober 2003 - 00:23 #18
Det var lidt mere end jeg havde skrevet, det er delt op på flere linjer for letter et overskue det. Prøv med denne så:


SQL = "SELECT *  FROM t_arr  WHERE ("
SQL = SQL & "(startmaaned <= " & maane & " AND slutmaaned >= " & maane & " AND startaar = " & aar & " AND slutaar = " & aar & ")"
SQL = SQL & " OR "
SQL = SQL & "(startmaaned <= " & maane & " AND startaar = " & aar & " AND slutaar > " & aar & ")"
SQL = SQL & " OR "
SQL = SQL & "(((startmaaned <= " & maane & " AND startaar = " & aar & ") OR startaar < " & aar & ") AND slutmaaned >= " & maane & " AND slutaar = " & aar & ")"
SQL = SQL & " OR "
SQL = SQL & "(((startmaaned <= " & maane & " AND startaar = " & aar & ") OR startaar < " & aar & ") AND slutaar > " & aar & ")"
SQL = SQL & " ) "
SQL = SQL & " AND godkendt = -1"
Avatar billede kalaharikid Nybegynder
22. oktober 2003 - 22:04 #19
Hej eagleeye,

Nu funker det ... PÅNÆR i aktuelle måned ... Der smutter enkelte arrangementer ud .... eksempel : http://www.boernekultur-silkeborg.dk/kal_detail.asp?maane=11&aar=2003&Id=95 dukker ikke op i kalenderen for oktober, selvom den er indført .... har hævet pointsatsen ... håber meget du vil give den sidste håndsrækning ?
Avatar billede kalaharikid Nybegynder
31. oktober 2003 - 16:15 #20
Vil du ikke nok ?
Avatar billede eagleeye Praktikant
31. oktober 2003 - 16:32 #21
Kan du sige hvordan den er gemt i databasen, altså den som ikke kommer frem?
Avatar billede kalaharikid Nybegynder
01. november 2003 - 14:37 #22
Hej Eagleeye, 10000 gange tak fordi du gider .. Det er det eneste der driller nu ... ellers funker alt på smukkeste vis ... på samme måde som de andre ... og nu efter månedsskift kan jeg se at det KUN er oktober der giver problemer ... hvad er der med den måned ?

Check ovenstående link (næstsidste post)  .... alle tal er i hvert sit felt : startdato, startmaaned, startaar, slutdato, slutmaaned, slutaar ... vil du gerne se databasen ?

MVH kalaharikid
Avatar billede eagleeye Praktikant
01. november 2003 - 14:43 #23
Hvis jeg klikker på det link får jeg en side frem med:

Dukkeudstilling på KunstCentret Silkeborg Bad

Startdato: 4-10-2003 Slutdato: 18-1-2004


Nej ikke databasen jeg tænke mere på hvad det står i databasen for den post som driller: Altså hvad stor der i startdato, startmaaned, startaar, slutdato, slutmaaned, slutaar.
Avatar billede kalaharikid Nybegynder
02. november 2003 - 13:43 #24
Hej Eagleeye,der står følgende i felterne :

startdato : 4 startmaaned : 10 startaar : 2003
slutdato  : 18 slutmaaned : 1  slutaar :  2004
Avatar billede terry Ekspert
02. november 2003 - 14:21 #25
I'm not quite sure what the problem is here but I have a feeling that it is because your trying to work with dates (years+months) which are not actual date values. I know almost nothing about ASP so I will just make a suggestion and then its up to you to find out how to do it in ASP.

200401 is the year and month I am interested in seeing
I am assuming that you are using number fields to hold the years an dmonth values so it is also necessary to format months less than 10 with two digits.
So we end up with a period in format YYYYMM

Anyway I hope you get the idea!


SELECT t_arr.*
FROM t_arr
WHERE (((200401) Between [startaar] & Format([startmaaned],"00") And [slutaar] & Format([slutmaaned],"00")));
Avatar billede terry Ekspert
02. november 2003 - 14:34 #26
another idea is to make a query in your Access database where you format the year and month in two calculated columns. Then in ASP make your SELECT on the query instead of the table.

For example:
SELECT t_arr.*, [startaar] & Format([startmaaned],"00") AS StartYYYYMM, [slutaar] & Format([slutmaaned],"00") AS EndYYYYMM
FROM t_arr;

Name the query
qrykalender

Then you would SELECT like this

SELECT *
FROM qrykalender
WHERE 200401 Between [StartYYYYMM] And [EndYYYYMM]
Avatar billede eagleeye Praktikant
02. november 2003 - 16:19 #27
Det bliver da også vist som den skal så?
Eller forstår jeg ikke helt hvad problemmet er dem den.
Avatar billede eagleeye Praktikant
02. november 2003 - 16:22 #28
Når på den måde... nu kan jeg se den ikke er med.
Avatar billede eagleeye Praktikant
02. november 2003 - 16:26 #29
Jeg har prøvet på min PC og jeg kan ikke få den at lave den fejl. Kan du prøve at sætte SQL sætningen ind igen.. Eller har du putte flere ting på SQL sætningen?

SQL = "SELECT *  FROM t_arr  WHERE ("
SQL = SQL & "(startmaaned <= " & maane & " AND slutmaaned >= " & maane & " AND startaar = " & aar & " AND slutaar = " & aar & ")"
SQL = SQL & " OR "
SQL = SQL & "(startmaaned <= " & maane & " AND startaar = " & aar & " AND slutaar > " & aar & ")"
SQL = SQL & " OR "
SQL = SQL & "(((startmaaned <= " & maane & " AND startaar = " & aar & ") OR startaar < " & aar & ") AND slutmaaned >= " & maane & " AND slutaar = " & aar & ")"
SQL = SQL & " OR "
SQL = SQL & "(((startmaaned <= " & maane & " AND startaar = " & aar & ") OR startaar < " & aar & ") AND slutaar > " & aar & ")"
SQL = SQL & " ) "
SQL = SQL & " AND godkendt = -1"
Avatar billede terry Ekspert
02. november 2003 - 17:09 #30
eagleeye>Am I missing something or what, doesnt the SQL I give as a solution make things a little easier?
Avatar billede eagleeye Praktikant
02. november 2003 - 18:12 #31
Jo det vil være lettere.

Men så kan man vel ligeså godt droppe den stored query og lave det i en SQL med det samme?:


aar = 2003
maane = 10
maane = right("0" & maane,2) 'Sikre 0 foran hvis månede kun er 9

SQL = "SELECT *  FROM t_arr  WHERE " & aar & maane & " BETWEEN startaar & Format(startmaaned,'00') AND "
SQL = SQL & " slutaar & Format(slutmaaned,'00') AND godkendt = -1"
Avatar billede terry Ekspert
02. november 2003 - 19:47 #32
I doubt that it will be noticable but the stored query should be faster.
Avatar billede kalaharikid Nybegynder
02. november 2003 - 21:56 #33
OK, jeg skal bare lige høre om righttrim med nul er svaret .... hvorfor virker november og december så ?
Avatar billede eagleeye Praktikant
02. november 2003 - 22:02 #34
Fordi den ligge "0" til så der står "012" og så tager Right 2 fra højre side og der er "12" ;)
Avatar billede kalaharikid Nybegynder
03. november 2003 - 23:36 #35
Hej terry og eagleeye,

Tak for jeres store effort ... oktober driller stadig ... her får i hele koden i tekst-fil ... med de mods lille mig kunne finde ud af ....

Håber det kaster lys så sidste brik i puslespillet falder på plads ?

http://www.boernekultur-silkeborg.dk/kal.txt

PS: Der er mindst 300 point til jer hver hvis I får den her hjem ....
Avatar billede eagleeye Praktikant
03. november 2003 - 23:52 #36
Hej

Man må max give 200 point for et spørgsmål ;) Sådan er reglerne..

Nå til koden jeg har prøvet din kode lynhurtig med min test DB, og der er ingen fejl.

Et hurtigt kig i koden afsløre det slet ikke er SQL'en som er problemet.
Det er derimod den kode som udskriver dine event den er sat til max at udskrive 10 event pr. månede variablen Repeat1__numRows bliver sat til 10 i koden.

For at løse det ret disse linjer i din kode:


While ((Repeat1__numRows <> 0) AND (NOT RsCal.EOF))
%>
    <A HREF="kal_detail.asp?<%= MM_keepURL & MM_joinChar(MM_keepURL) & "Id=" & RsCal.Fields.Item("Id").Value %>"><%=(RsCal.Fields.Item("titel").Value)%></A> - <%=(RsCal.Fields.Item("startdato").Value)%>-<%=(RsCal.Fields.Item("startmaaned").Value)%>-<%=(RsCal.Fields.Item("startaar").Value)%><br>
    <br>
    <%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  RsCal.MoveNext()
Wend
%>



Til disse sådan du ikke begrænser udskrivningen til 10:


While NOT RsCal.EOF
%>
    <A HREF="kal_detail.asp?<%= MM_keepURL & MM_joinChar(MM_keepURL) & "Id=" & RsCal.Fields.Item("Id").Value %>"><%=(RsCal.Fields.Item("titel").Value)%></A> - <%=(RsCal.Fields.Item("startdato").Value)%>-<%=(RsCal.Fields.Item("startmaaned").Value)%>-<%=(RsCal.Fields.Item("startaar").Value)%><br>
    <br>
    <%
  RsCal.MoveNext()
Wend
%>


Koden starter ca i linje 304.
Avatar billede eagleeye Praktikant
04. november 2003 - 00:05 #37
Du også vælge at sætte antallet op som du udskriver.

Så du rette denne linje:
Repeat1__numRows = 10

Til et tal som er størrer end 10 og et du ikke lige løber i med det samme:
Repeat1__numRows = 50
Avatar billede kalaharikid Nybegynder
04. november 2003 - 13:25 #38
Kære venner,

Stor er glæden i det lille website ... alt virker nu ... og jeg beklager meget at jeg ikke fandt på det her noget før ... skal terry også have lidt for sin ulejlighed ? ... så opretter jeg gerne et nyt spørgsmål og giver ham en håndfuld ... eagleeye, du er (som altid) en rigtig helt !!! mange tak fra kalaharikid som nu kan kalde opgaven for løst ... takket være the boys fra eksperten.dk
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