03. oktober 2003 - 14:12Der 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 ....
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?
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"
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 :
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 %>
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"
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
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"
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 ?
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 ?
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.
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")));
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]
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?
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.
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
Synes godt om
Ny brugerNybegynder
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.