Avatar billede dj-sejler Praktikant
16. august 2004 - 12:43 Der er 36 kommentarer og
2 løsninger

problemer med dato og accessdatabase

hej...
Jeg har en variable på min side der udskriver dagen på følgende form: dd-mm-åååå
I min database har jeg for hvert arrangement følgende info:
fradato på formen: dd-mm-åååå
tildato på formen: dd-mm-åååå

og dataen jeg bruger:


    Dim MyDate
    MyDate = Date


            <% for f = 0 to 6
              myDateNow = dateadd("d",f,myDate) %>
                <table>
                <tr>
                  <td colspan="2">
                    <b>
                      <%=WeekdayName(datepart("w",myDateNow))%> den
                      <%= datepart("d",myDateNow)%>.&nbsp;
                      <%= MonthName(datepart("m",myDateNow))%>
                    </b>
                  </td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td><%= myDateNow %>

                    <table>
            <%
            strSQL = "SELECT * FROM kalender where ((fradato <= myDateNow and myDateNow >= tildato) or fradato = myDateNow) ORDER by id"
            rs.Open strSQL, strDSN, 1
            Do While Not rs.EOF
            %>
                    <tr><td><%=rs("id")%></td></tr>
            <%
            rs.MoveNext
            Loop
            rs.Close
            Set rs = Nothing
            %>
                    <tr><td>test</td></tr>
                    </table>

                  </td>
                </tr>
                </table>
            <% next %>

men dette virker ikke...

får følgende fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e21'
ODBC driver does not support the requested properties.

/familie/sider/minkalender.asp, line 77
linie 77: rs.Open strSQL, strDSN, 1

Er der nogen der kan hjælp...?!?
Avatar billede fennec Nybegynder
16. august 2004 - 12:46 #1
strSQL = "SELECT * FROM kalender where ((fradato <= '"& myDateNow &"'and '"& myDateNow &"'>= tildato) or fradato = myDateNow) ORDER by id"
Avatar billede ldanielsen Nybegynder
16. august 2004 - 12:52 #2
du mangler lige én :o)

or fradato = '"& myDateNow &"')
Avatar billede eagleeye Praktikant
16. august 2004 - 12:53 #3
Hvis du har felterne som dato/tid skal man bruge enten  yyyy-mm-dd eller mm-dd-yyyy som dato format. Hvis man bruger dansk dato format som er dd-mm-yyyy, vil Access bytte rundt på dag og måned i datoen.

Der er en løsning og det er at bruge dato funktionerne Year, Month og Day til at formatere din dato.

Kode eksemple for Access, husk Access bruger # omkring datoen:
<%
dato = "04-06-2003"
strDato = Year(dato) & "-" & Month(dato) & "-" & Day(dato)
SQL = "SELECT * FROM tablenavn WHERE dato = #" & strDato & "#"
%>
Avatar billede dj-sejler Praktikant
16. august 2004 - 12:55 #4
jeg gemmer bare datoen i et alm tekstfelt i access...
og har også session.lcid = 1030 øverst på siden
Avatar billede dj-sejler Praktikant
16. august 2004 - 12:57 #5
jeg får også udskrevet den første... men dag to kommer fejl igen:

Microsoft VBScript runtime error '800a01a8'
Object required

/familie/sider/minkalender.asp, line 77
Avatar billede eagleeye Praktikant
16. august 2004 - 13:00 #6
Har du en linje hvor der står:?

Set rs =Server.CreateObject("ADODB.Recordset")
Avatar billede fennec Nybegynder
16. august 2004 - 13:00 #7
Hvis du gemmer det som almindelig tekst, kan du ikke gøre brug af < > matematik funktionerne. Hvis du skal det. Skal formatet være yyyy-mm-dd.

Men du skulle hellere lave typen om til "dato & klokkeslet".
Avatar billede dj-sejler Praktikant
16. august 2004 - 13:05 #8
eagleeye--> ja... det har jeg:
    Set rs = Server.CreateObject("ADODB.RecordSet")
    strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("database.mdb")
Avatar billede eagleeye Praktikant
16. august 2004 - 13:08 #9
Ok.
Hvad står der i linje 77?

Man kan bruge Tekst kolonne hvis man bruger CDate til at konvertere til dato men datoen skal stadig skrives som yyyy-mm-dd i SQL sætningnen:

dato = "04-06-2003"
strDato = Year(dato) & "-" & Month(dato) & "-" & Day(dato)
SQL = "SELECT * FROM tablenavn WHERE CDate(dato) = #" & strDato & "#"
Avatar billede dj-sejler Praktikant
16. august 2004 - 13:16 #10
rs.Open strSQL, strDSN, 1
Avatar billede dj-sejler Praktikant
16. august 2004 - 13:18 #11
nu er lidt tungnem...
men kan jeg beholde tekst feltet? men så ændre formatet til: åååå-mm-dd?
Avatar billede fennec Nybegynder
16. august 2004 - 13:19 #12
Det kan du, men det er ikke optimalt....
Avatar billede dj-sejler Praktikant
16. august 2004 - 13:22 #13
ok...
så det skal være? dato og klokkeslet?
det har jeg så ændre til... men det bliver så på formen: dd/mm/åååå
Avatar billede fennec Nybegynder
16. august 2004 - 13:25 #14
Der kan du sætte en anden session.lcid i ASP, og ændre det.
session.lcid = 1030 'Dansk format.
Avatar billede dj-sejler Praktikant
16. august 2004 - 13:28 #15
øh...?
jeg har session.lcid = 1030 stående... skulle den ændres eller?!
Avatar billede fennec Nybegynder
16. august 2004 - 13:32 #16
det så jeg også lige i din tidligere besked. Mærkeligt.... Prøv at ændre lcid til noget andet og se om formatet ændre sig.
Avatar billede dj-sejler Praktikant
16. august 2004 - 13:52 #17
øh... det med formatet var bare når jeg redigere i access på min computer...
Avatar billede dj-sejler Praktikant
16. august 2004 - 14:05 #18
fandt lige en fejl...
der skal stå     Set rs = Server.CreateObject("ADODB.RecordSet")inde i løkken (eller hvad det hedder) da jeg jo lukker efter hver "dag"
Avatar billede fennec Nybegynder
16. august 2004 - 14:06 #19
hvad er ststus så nu.
Virker det, eller er der stadig problemer???
Avatar billede dj-sejler Praktikant
16. august 2004 - 14:11 #20
der er problemer...

jeg har to poster i min db:
id=4 , fradato=16/08/2004 , tildato=16/08/2004
id=5 , fradato=17/08/2004 , tildato=19/08/2004

kan ses på: http://net-lunden.dk/familie/?side=minkalender

som man kan se så bliver id=4 vist hver dag
og id=5 vist lige præcis ikke den 18.
Avatar billede dj-sejler Praktikant
16. august 2004 - 14:20 #21
Nu ser det sådan ud:
<% for f = 0 to 6
  myDateNow = dateadd("d",f,myDate) %>
    <table>
    <tr>
      <td colspan="2">
        <b>
          <%=WeekdayName(datepart("w",myDateNow))%> den
          <%= datepart("d",myDateNow)%>.&nbsp;
          <%= MonthName(datepart("m",myDateNow))%>
        </b>
      </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><%= myDateNow %>
            <table>
<%    Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM kalender where ((fradato <= #"& myDateNow & "# and #"& myDateNow &"# >= tildato) or fradato = #"& myDateNow &"#) ORDER by id"
rs.Open strSQL, strDSN, 1
Do While Not rs.EOF
%>
        <tr><td><%=rs("id")%></td></tr>
<%
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
%>
Avatar billede fennec Nybegynder
16. august 2004 - 14:25 #22
Prøv lige at køre datoen igenne denne funktion. Den plejer at virke.

Function ConvertToSqlDate(dato)
dim SQLYear,SQLMonth,SQLDay
  SQLYear = Year(dato)
  SQLMonth = Month(dato)
  SQLDay = Day(dato)
  if SQLDay<10 then
    SQLDay = 0&SQLDay
  end if
  if SQLMonth<10 then
    SQLMonth = 0&SQLMonth
  end if
  ConvertToSqlDate = SQLYear&SQLMonth&SQLDay
End Function

strSQL = "SELECT * FROM kalender where ((fradato <= #"& ConvertToSqlDate(myDateNow) &"# and #"& ConvertToSqlDate(myDateNow) &"# >= tildato) or fradato = #"& ConvertToSqlDate(myDateNow) &"#) ORDER by id"
Avatar billede dj-sejler Praktikant
16. august 2004 - 14:29 #23
jeg får en syntax error
Avatar billede dj-sejler Praktikant
16. august 2004 - 14:42 #24
jeg får fejl i denne linie nu...
rs.Open strSQL, strDSN, 1
Avatar billede fennec Nybegynder
16. august 2004 - 14:56 #25
siger den ikke mere end "syntax error"??
Avatar billede dj-sejler Praktikant
16. august 2004 - 14:57 #26
nej...
det er en ny fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e21'
ODBC driver does not support the requested properties.

/familie/sider/minkalender.asp, line 95
rs.Open strSQL, strDSN, 1 <-- linie 95
Avatar billede dj-sejler Praktikant
16. august 2004 - 14:58 #27
men jeg tænkte på om det ikke er noget med strSQL-sætningen, der er galt. har prøvet at ændre lidt, men har bare fået nogen andre fejl
Avatar billede ldanielsen Nybegynder
16. august 2004 - 15:07 #28
prøv med
Response.write strSQL

lige før rs.Open, så kan vi se om sætningen er korrekt
Avatar billede dj-sejler Praktikant
16. august 2004 - 15:09 #29
tjo... så er det vel formateringen af fradato og tildato der er galt...
de er jo på formen dd/mm/åååå

selv om jeg har ændret det til "dato og..."
Avatar billede fennec Nybegynder
16. august 2004 - 15:21 #30
Du kan jo altid prøve at pille ved denne linje:
ConvertToSqlDate = SQLYear&SQLMonth&SQLDay

Bare flyt om på dem og tilføj /. Den burde bare lave en "type mismatch" fejl hvis det var formatet. Prøv at skrive SQL-sætningen ud på skærmen som ldanielsen foreslår. Det gør det ofte nemmere at finde fejlen.
Avatar billede dj-sejler Praktikant
16. august 2004 - 15:23 #31
det har jeg gjort...
SELECT * FROM kalender where ((fradato <= #20040816# and #20040816# >= tildato) or fradato = #20040816#) ORDER by id
Avatar billede fennec Nybegynder
16. august 2004 - 15:27 #32
Det ser jo rigtig nok ud. Så prøv at pille ved ConvertToSqlDate.

ConvertToSqlDate = SQLDay &"/"& SQLMonth &"/"& SQLYear
Avatar billede eagleeye Praktikant
16. august 2004 - 16:22 #33
Prøv at tjekke du har en Connection streng som hedder strDSN
og at den ser rigtigt ud.
Avatar billede dj-sejler Praktikant
16. august 2004 - 17:00 #34
http://net-lunden.dk/familie/?side=minkalender
hvis i kigger igen...

jeg har ændret fennec's convert og min strDNS ser rigtig nok ud... men fejlen er næsten den samme, at den udskriver id=4 alle dage og id=5 alle undtagen den 16. og den 18.
Avatar billede eagleeye Praktikant
16. august 2004 - 17:12 #35
Prøv at kig på tegne <= og >= i forhold til hvor kolonnen og datoen står i denne:

strSQL = "SELECT * FROM kalender where ((fradato <= #"& ConvertToSqlDate(myDateNow) &"# and #"& ConvertToSqlDate(myDateNow) &"# >= tildato) or fradato = #"& ConvertToSqlDate(myDateNow) &"#) ORDER by id"


Dette henter ikke de poster hvor ConvertToSqlDate(myDateNow) er imellem fra og til dato, men den henter alle hvor ConvertToSqlDate(myDateNow) er størrer end både til og fra dato så det skal være:
strSQL = "SELECT * FROM kalender where ((fradato <= #"& ConvertToSqlDate(myDateNow) &"# and #"& ConvertToSqlDate(myDateNow) &"# <= tildato) or fradato = #"& ConvertToSqlDate(myDateNow) &"#) ORDER by id"
Avatar billede dj-sejler Praktikant
16. august 2004 - 17:22 #36
Det ser sku ud til at virke :D

Så eagleeye og fennec... i må hellere svare...
og mange tak
Avatar billede eagleeye Praktikant
16. august 2004 - 17:24 #37
Ok :) her et svar fra mig.
Avatar billede fennec Nybegynder
17. august 2004 - 08:11 #38
svar
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