Avatar billede riishoj Nybegynder
27. oktober 2003 - 20:31 Der er 48 kommentarer og
2 løsninger

Svært datoproblem

Problemet ligger i den første SQL, som udfører en handling, hvis Date() ligger mellem 2 datoer i db'en.
Det virker ok, men tingene bliver indsat i et skema, som dækker en uge. Man kan så klikke frem og tilbage i ugerne, og det er her problemet opstår. Hvis man f.eks. klikker 5 uger frem, så er det jo den dato, som skal gælde, og ikke Date(), som jo stadig er den aktuelle dato. Jeg har en funktion, som "laver" den rigtige dato, når man klikker frem eller tilbage.

FormatDateTime(UgeTilDato(aar, uge, 2), vbShortDate)

men det kan jeg jo ikke bare indsætte i SQL'en.

Er der nogen som ved hvordan den skal klares?




<%Session.LCID = &H0407%>
<%
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
%>
<%
if Request("mode") = "change" then
Response.Redirect("fysik.asp?uge=" & Request("uge") & "&aar=2003")
end if
%>
<html>

<head>
<title>Fysik</title>
<LINK REL="StyleSheet"
HREF="../style.css"
TYPE="text/css">
<SCRIPT LANGUAGE="JavaScript">
<!-- Original:  Tom Khoury (twaks@yahoo.com) -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
function placeFocus() {
if (document.forms.length > 0) {
var field = document.forms[0];
for (i = 0; i < field.length; i++) {
if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea") || (field.elements[i].type.toString().charAt(0) == "s")) {
document.forms[0].elements[i].focus();
break;
        }
      }
  }
}
//  End -->
</script>
</head>

<body background="../images/background7.gif" OnLoad="placeFocus()">

<table border="1" width="100%" cellspacing="0" cellpadding="0" bordercolor="#0000FF" bordercolorlight="#0000FF" bordercolordark="#FFFFFF">
  <tr>
    <td width="128%" colspan="6" bgcolor="#669999">
      <table border="0" width="100%">
        <tr>
          <td width="25%" valign="bottom"><b><font face="Verdana" color="#FFFFFF" size="4">Fysik</font></b></td>
          <%
          Function UgeTilDato(aar,uge,dag)
  januar1 = DateSerial(aar, 1, 1)
  ugedagjan1 = Weekday(januar1, vbMonday)
  if ugedagjan1 <= 4 then
      ' 1. januar er i uge 1
      mandaguge1 = DateAdd("d", -ugedagjan1+1, januar1)
  else
      ' 1. januar er i sidste uge foregående år
      mandaguge1 = DateAdd("d", 7-ugedagjan1+1, januar1)
  end if

  mandagugex = DateAdd("ww", uge-1, mandaguge1)
  xdagugex = DateAdd("d", dag-1, mandagugex)
  UgeTilDato = xdagugex
End Function         

         
If request.querystring("uge") <> "" Then
  uge = request.querystring("uge")
 
Else
  uge = DatePart("ww",date())
End if
  If request.querystring("aar") <> "" Then
  aar = request.querystring("aar")
Else

  aar = Year(Date)
End If

fuge = uge - 1
faar = aar
If fuge < 1 then
  fuge = 52
  faar = faar - 1
End If

Response.Write"<td width=20% align=left valign=bottom><font face=verdana size=3><A class='speciel' HREF='fysik.asp?uge=" & fuge & "&aar=" & faar & "'><--Forrige uge </A></font></td>"
%>

          <td width="20%" align="left"><font color="#FFFFFF"><b><font face="Verdana" size="4">Uge</font><font face="Verdana" size="3">&nbsp</font></b>
            </font>
                       
            <%


If Request.Querystring("uge") <> "" Then
      uge = Request.Querystring("uge")
    Else
      uge = DatePart("ww",date())
    End If
   
    Response.Write "<font color=white face=verdana size=5>"
    Response.Write uge
    %>
</td>
<%

If request.querystring("uge") <> "" Then
  uge = request.querystring("uge")
Else
  uge = DatePart("ww",date())
End if
  If request.querystring("aar") <> "" Then
  aar = request.querystring("aar")
Else
aar = Year(Date)
End If

nuge = uge + 1
naar = aar
If nuge > 52 then
  nuge = 1
  naar = naar + 1
End If
Response.Write"<td width=35% align=left valign=bottom><font face=verdana size=3><A class='speciel' HREF='fysik.asp?uge=" & nuge & "&aar=" & naar & "'>Næste uge--></A></font></td>"
%>

        </tr>
     
      </table>
     
  <tr>
    <td width="8%" bgcolor="#669999">&nbsp;</td>
    <td width="18%" bgcolor="#669999">
      <p align="center"><font color="#FFFFFF" face="Verdana" size="2"><b>Mandag</b><br>
            <% Response.Write FormatDateTime(UgeTilDato(aar, uge, 1), vbShortDate) %></font></td>
    <td width="18%" bgcolor="#669999">
      <p align="center"><font color="#FFFFFF" face="Verdana" size="2"><b>Tirsdag</b><br>
            <% Response.Write FormatDateTime(UgeTilDato(aar, uge, 2), vbShortDate) %></font></td>
    <td width="19%" bgcolor="#669999">
      <p align="center"><font color="#FFFFFF" face="Verdana" size="2"><b>Onsdag</b><br>
              <% Response.Write FormatDateTime(UgeTilDato(aar, uge, 3), vbShortDate) %></font></td>
    <td width="19%" bgcolor="#669999">
      <p align="center"><font color="#FFFFFF" face="Verdana" size="2"><b>Torsdag</b><br>

              <% Response.Write FormatDateTime(UgeTilDato(aar, uge, 4), vbShortDate) %></font></td>
    <td width="19%" bgcolor="#669999">
      <p align="center"><font color="#FFFFFF" face="Verdana" size="2"><b>Fredag</b><br>

              <% Response.Write FormatDateTime(UgeTilDato(aar, uge, 5), vbShortDate) %></font></td>
 
 
  </tr>
<%
    Set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath ("/reservation5/data.mdb")
    Conn.Open DSN
   
    lektion = Request.Querystring("lektion")
    dag = Request.Querystring("dag")
    reservation = Request.Querystring("reservation")
 

   
    dim SQLdag(7)
SQLdag(1) = "Mandag"
SQLdag(2) = "Tirsdag"
SQLdag(3) = "Onsdag"
SQLdag(4) = "Torsdag"
SQLdag(5) = "Fredag"
SQLdag(6) = "Lørdag"
SQLdag(7) = "Søndag"

dim linkdag(7)
linkdag(1) = "mandag"
linkdag(2) = "tirsdag"
linkdag(3) = "onsdag"
linkdag(4) = "torsdag"
linkdag(5) = "fredag"
linkdag(6) = "lørdag"
linkdag(7) = "søndag"

 
for lektion = 1 to 7

Response.Write "<tr>"
    Response.Write "<td width=8% height=40 align=center bgcolor=#669999><font face=Verdana size=2 color=#FFFFFF>" & lektion & ". time</font></td>"




  for dag = 1 to 5
 
  strSQL = "SELECT dag,tekst,lektion FROM mintabelWHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND Date()BETWEEN minDato and maxDato "
set rs = Conn.Execute(strSQL)

if not (rs.EOF or rs.BOF) then
Response.write"<td border=1  bordercolor=#0000FF bordercolordark=#FFFFFF bordercolorlight=#0000F width=18% height=40 bgcolor=red><font face=Verdana size=1 color=#FFFFFF><p align=center>"&rs("tekst")&"</font></td>" 
 
Else
      'generer data og HTML kode for (dag,lektion)
      strSQL = "SELECT initialer,klasse FROM ebberup_reserver WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND uge='" & uge & "' AND aar='" & aar & "'"
set rs = Conn.Execute(strSQL)
if rs.EOF or rs.BOF then
Response.Write"<td width=18% height=40 bgcolor=#FFFFFF><font color=#FFFFFF><A HREF='reserver_form.asp?aar=" & aar & "&uge=" & uge & "&dag=" & linkdag(dag) & "&lektion=" & lektion & "&reservation=fysik'><img border=0 src='../images/greenball.gif' alt='Ledig'></font></td>"

  Else

    Response.Write"<td width=18% height=40 bgcolor=#FFFFFF><b><font color=#FFFFFF face='verdana' size='2'><img src='../images/redball.gif' alt='Optaget'><img src='../images/blank2.gif'><A HREF='vis_reservation.asp?reservation=fysik&lektion=" & lektion & "&dag=" & linkdag(dag) & "&uge=" & uge &"'>"&rs("initialer")&"</A></font></b></td>"

    rs.MoveNext
   
    End if
    End if
  next
  Response.Write "</tr>"
next
 
      rs.close
      Set rs = Nothing

    Conn.Close
    Set Conn = Nothing
%>   
  </table>


  <form method="POST" action="fysik.asp" name="form1">
<table border="0" width="100%">
  <tr>
    <td width="33%">
      <p align="center"><font face="verdana" size="2"><a class="speciel2" HREF="fysik2.asp">Skema
      for hele dagen</a></font></td>
    <td width="33%">
      <p align="center"><font face="Verdana" size="2">Gå til uge</font> <input type="text" name="uge" size="3">
<input type="submit" value="Send" name="B1"></td>
    <td width="34%">
      <p align="center"><font face=verdana size=2><A class='speciel2' HREF='../index.htm'>Tilbage
      til forsiden</A></font></td>
  </tr>
</table>
<input type="hidden" name="mode" value="change">
</form>

 
<p align="center"><font face="verdana" size="2"><a class="speciel2" HREF="fysik2.asp"><br>
</a></font></p>
<p align="center">&nbsp;</p>


</html>
Avatar billede kovalt Nybegynder
27. oktober 2003 - 22:22 #1
Er ikke sikker på jeg helt forstår hvad det er du vil. Men hvis problemet er at du skal ha lagt X antal uger til en dato kan det gøres som følger:

DateAdd("ww", 3, now())

Ovenstående ligger 3 uger til dd.

/Kovalt
Avatar billede kovalt Nybegynder
27. oktober 2003 - 22:23 #2
i stedet for de tre skal du så bare lave en variable, der indeholder en int, der angiver antallet af uger, der til lægges til

/Kovalt
Avatar billede riishoj Nybegynder
27. oktober 2003 - 22:35 #3
Jeg prøver om jeg kan gøre det mere forståeligt.

Denne sql

strSQL = "SELECT dag,tekst,lektion FROM mintabelWHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND Date()BETWEEN minDato and maxDato "
set rs = Conn.Execute(strSQL)

if not (rs.EOF or rs.BOF) then
Response.write"<td border=1  bordercolor=#0000FF bordercolordark=#FFFFFF bordercolorlight=#0000F width=18% height=40 bgcolor=red><font face=Verdana size=1 color=#FFFFFF><p align=center>"&rs("tekst")&"</font></td>" 

indsætter et rødt felt med tekst i skemaet, hvis dags dato ligger i mellem 2 datoer i db'en. Skemaet er lavet så man ved at klikke på "Næste uge" kan klikke en uge frem ad gangen. Hvis jeg nu klikker f.eks. 3 uger frem, så nytter det jo ikke, at der står

.....AND Date()BETWEEN minDato and maxDato "
i sql'en, da jeg jo har brug for Date()+3 uger.

Håber det blev lidt mere forståeligt, ellers spørg igen.
Avatar billede kovalt Nybegynder
27. oktober 2003 - 22:42 #4
når du skriver date() i din SQL burde det så ikke være et dato-felt, som er i DB.. altså noget i stil med:

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND dit_datofelt BETWEEN #"& minDato &"# and #"& maxDato #"&"

eller

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND dit_datofelt BETWEEN #"& DateAdd("ww", 3, minDato)&"# and #"& DateAdd("ww", 3, maxDato)#"&"

Eller er det forkert forstået?

/Kovalt
Avatar billede riishoj Nybegynder
27. oktober 2003 - 22:52 #5
Jo, minDato og maxDato er datofelter i db'en. Jeg kan ikke gennemskue dine 2 sql-eksempler.
Avatar billede kovalt Nybegynder
27. oktober 2003 - 22:57 #6
OK... jamen så tror jeg ikke du kan bruge beween i denne sammenhæng - brug i stedet WHERE

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato < #"& DateAdd("ww", 3, date())&"# AND maxDato > #"& DateAdd("ww", 3, date()) &"#"

dette burde virke

/kovalt
Avatar billede kovalt Nybegynder
27. oktober 2003 - 22:58 #7
BETWEEN bruges når ét felt i DB skal være mellem to værdier og ikke som du prøvede når én værdi skal være mellem to felter

/kovalt
Avatar billede riishoj Nybegynder
27. oktober 2003 - 23:11 #8
Det virker ikke efter hensigten. Når jeg udskriver sql'en ser alle ugerne sådan ud

SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='1' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Tirsdag' AND lektion='1' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Onsdag' AND lektion='1' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Torsdag' AND lektion='1' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Fredag' AND lektion='1' AND mindato < #17.11.03# AND maxDato > #17.11.03# 
2. time SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='2' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Tirsdag' AND lektion='2' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Onsdag' AND lektion='2' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Torsdag' AND lektion='2' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Fredag' AND lektion='2' AND mindato < #17.11.03# AND maxDato > #17.11.03# 
3. time SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='3' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Tirsdag' AND lektion='3' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Onsdag' AND lektion='3' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Torsdag' AND lektion='3' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Fredag' AND lektion='3' AND mindato < #17.11.03# AND maxDato > #17.11.03# 
4. time SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='4' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Tirsdag' AND lektion='4' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Onsdag' AND lektion='4' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Torsdag' AND lektion='4' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Fredag' AND lektion='4' AND mindato < #17.11.03# AND maxDato > #17.11.03# 
5. time SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='5' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Tirsdag' AND lektion='5' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Onsdag' AND lektion='5' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Torsdag' AND lektion='5' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Fredag' AND lektion='5' AND mindato < #17.11.03# AND maxDato > #17.11.03# 
6. time SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='6' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Tirsdag' AND lektion='6' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Onsdag' AND lektion='6' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Torsdag' AND lektion='6' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Fredag' AND lektion='6' AND mindato < #17.11.03# AND maxDato > #17.11.03# 
7. time SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='7' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Tirsdag' AND lektion='7' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Onsdag' AND lektion='7' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Torsdag' AND lektion='7' AND mindato < #17.11.03# AND maxDato > #17.11.03#  SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Fredag' AND lektion='7' AND mindato < #17.11.03# AND maxDato > #17.11.03#
Avatar billede riishoj Nybegynder
27. oktober 2003 - 23:12 #9
Det er vist lidt svært at overskue
Avatar billede kovalt Nybegynder
27. oktober 2003 - 23:15 #10
altså du vil ha de poster ud, hvor maxDato er størrer end dd. og minDato er mindre end dd. - er det rigtigt forstået?

/mvh
Avatar billede kovalt Nybegynder
27. oktober 2003 - 23:21 #11
strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato < #"& DateAdd("ww", 3, date())&"# AND maxDato > #"& DateAdd("ww", 3, date()) &"#"

i stedet for de to tre-taller jeg har sat ind i de to sidste led skal du jo selvfølgelig indsætte din egen funktion således at det bliver dynamiskt. Værdien tre er tænkt som der hvor du angiver hvor mange uger du er henholdsvis fremme eller tilbage

/mvh
Avatar billede riishoj Nybegynder
27. oktober 2003 - 23:21 #12
Ja, og det får jeg jo med

....AND Date()BETWEEN minDato and maxDato "

men datoen skal jo "følge med" når man vælger at skemaet skal vise en anden uge. Sådan som det er nu, så vil sql'en jo tjekke på dags dato selv om det er skemaet for f.eks. uge 47 der vises
Avatar billede riishoj Nybegynder
27. oktober 2003 - 23:27 #13
Hvordan erstatter jeg 3-tallet med en dynamisk funktion?
Avatar billede riishoj Nybegynder
27. oktober 2003 - 23:44 #14
Skal op kl.6 i morgen, så jeg bliver nødt til at smutte i seng. Gider du hænge på i morgen, jeg tror at du har den rigtige løsning, men du bliver altså nødt til at hjælpe mig med den dynamiske funktion. Spenderer gerne flere point for hjælpen.
Avatar billede kovalt Nybegynder
28. oktober 2003 - 09:56 #15
date() er ASP og henter dato og klokkeslet fra serveren.

Syntaxen for BETWEEN i SQL er:

WHERE kolonne_navn BETWEEN value1 AND value2

og ikke som du prøver

WHERE value1 BETWEEN kolonne_navn1 AND kolonne_navn2

du bliver således nødt til at bruge WHERE, hvis du vil ha at en given værdi (din date()) skal ligge mellem to kolonneværdier i din DB. På en eller anden måde har du valgt at oprette en variabel, der indeholder antallet af uger, der skal lægges til eller trækkes fra. Dette kunne eksempelvis være en <input type="hidden" name="antaluger" value="">, hvor du så ligger én til eller trækker én fra værdien hver gang der bladres i ugerne. Når du har denne værdi er det bare at indsætte det i nedenstående SQL, som så bliver:

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato < #"& DateAdd("ww", request.form("antaluger"), date())&"# AND maxDato > #"& DateAdd("ww", request.form("antaluger"), date()) &"#"

/Kovalt
Avatar billede riishoj Nybegynder
28. oktober 2003 - 13:35 #16
Hvad siger du til det her:

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato < #"& DateAdd("ww", request.querystring("uge"), date())&"# AND maxDato > #"& DateAdd("ww", request.querystring("uge"), date()) &"#"

Desværre giver det syntaksfejl

Microsoft OLE DB Provider for ODBC Drivers fejl '80040e14'
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl i datoen i forespørgselsudtrykket "reservation='fysik' AND dag='Mandag' AND lektion='1' AND minDato < #28.10.03# AND maxDato > #28.10.03#".
Avatar billede kovalt Nybegynder
28. oktober 2003 - 17:04 #17
den eneste fejl jeg lige umiddelbart kan se er

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion=" & lektion & " AND mindato < #"& DateAdd("ww", request.querystring("uge"), date())&"# AND maxDato > #"& DateAdd("ww", request.querystring("uge"), date()) &"#"

idet lektion er et tal

/kovalt
Avatar billede riishoj Nybegynder
28. oktober 2003 - 17:32 #18
Nej, lektion er et tekstfelt i db'en. Desuden sker der det underlige, at hvis jeg bladrer en uge frem, kommer der ingen fejlmeddelelse, men datoen bliver forkert.

SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='1' AND minDato < #07.09.04# AND maxDato > #07.09.04#

Hvis jeg så bladrer videre, så ændres datoen godt nok med + 7 dage (eller -7 dage)
Avatar billede kovalt Nybegynder
28. oktober 2003 - 17:47 #19
hvorfor skal der komme en fejl? det virker som jeg troede lige nu
Avatar billede riishoj Nybegynder
28. oktober 2003 - 17:51 #20
Hvad mener du?
Avatar billede riishoj Nybegynder
28. oktober 2003 - 18:48 #21
Fejlmeddelelsen siger jo, at der er en fejl i datoen.
Avatar billede eagleeye Praktikant
28. oktober 2003 - 21:52 #22
Husk på at Access skal havde datoen i US/UK format som er yyyy-mm-dd eller mm-dd-yyyy og ikke i DK format dd-mm-yy da den så vil bytte rundt på månede og dag.

Det kan dog let formateres med Year, Month og Day funktionerne.

Så denne:

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion=" & lektion & " AND mindato < #"& DateAdd("ww", request.querystring("uge"), date())&"# AND maxDato > #"& DateAdd("ww", request.querystring("uge"), date()) &"#"



Bliver til:


minDatoStr = DateAdd("ww", request.querystring("uge"), date())
minDatoStr = Year(minDatoStr) & "-" & Month(minDatoStr) & "-" & Day(minDatoStr)
maxDatoStr = DateAdd("ww", request.querystring("uge"), date())
maxDatoStr = Year(maxDatoStr) & "-" & Month(maxDatoStr) & "-" & Day(maxDatoStr)

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion=" & lektion & " AND mindato < #"& minDatoStr &"# AND maxDato > #"& maxDatoStr &"#"
Avatar billede riishoj Nybegynder
28. oktober 2003 - 22:07 #23
Har prøvet dit forslag, men får fejlen

Microsoft OLE DB Provider for ODBC Drivers fejl '80040e07'
[Microsoft][ODBC Microsoft Access-driver] Datatyperne stemmer ikke overens i kriterieudtrykket.
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:09 #24
Ok, hvilken type er dag og lektion i databasen?
Avatar billede riishoj Nybegynder
28. oktober 2003 - 22:13 #25
De er begge tekstfelter. Jeg kan godt se nu, at jeg så skal have et par '' om lektion, så det prøver jeg lige.
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:14 #26
Jeps ;)  Og både mindato og maxdato er af typen date/dato, er det rigtigt?
Avatar billede riishoj Nybegynder
28. oktober 2003 - 22:17 #27
Ja, det er korrekt. det hjalp, men jeg får stadig ikke den rigtige dato. Hvis jeg udskriver sql'en ser 1. linie sådan ud

SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='1' AND mindato < #2004-8-31# AND maxDato > #2004-8-31#
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:21 #28
ok den udregner samme dato for mindatostr og maxdatostr.. Hvad skal de være?
Avatar billede riishoj Nybegynder
28. oktober 2003 - 22:28 #29
Jeg tror at der er noget grundlæggende forkert i det vi er i gang med. Meningen er, at sql'en skal udføres, hvis datoen ligger i mellem minDato og maxDato.
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:33 #30
Ok, ja så skal den ikke hendte fra Querystingen..
Men hvis den SQL skal hendte records hvor date er imellem minDato og maxDato kan det skrives sådan her:


strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato < Date() AND maxDato > Date()"
Avatar billede riishoj Nybegynder
28. oktober 2003 - 22:35 #31
minDatostr og maxDatostr skulle her gerne være 2003-10-28, altså dags dato.
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:36 #32
Ok så det er udregningen:
minDatoStr = DateAdd("ww", request.querystring("uge"), date())

Som skal laves om. Skal der være en udregning ?? eller kan der jo bare stå:

minDatoStr = date
Avatar billede riishoj Nybegynder
28. oktober 2003 - 22:40 #33
Ja, den har jeg været omkring, men det er lidt mere kompliceret.
Sql'en bruges i et skemasystem, hvor man kan trykke sig frem (og tilbage) en uge ad gangen. Det kan være, at du husker, at du har hjulpet mig med det. Det vil sige, at hvis jeg nu trykker 3 uger frem, så er det datoen i uge 47, som skal bruges i sql'en og ikke den aktuelle dato. Derfor kan jeg ikke bruge Date().
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:43 #34
Ja, hvad overføre du til siden hvis man vææger en uge 3 uder fremme??

uge=3  for 3 uger frem, eller
uge=47  for det uge 47 der skal vises, var der ikke sådan det blev og med årstal også`?
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:45 #35
Så kan du jo bruge din egen funktion som finder første dato i ugen til mindatoStr:

minDatoStr = UgeTilDato(request.querystring("aar"), request.querystring("uge"), 2)
maxDatoStr = DateAdd("ww", 1, minDatoStr)
minDatoStr = Year(minDatoStr) & "-" & Month(minDatoStr) & "-" & Day(minDatoStr)
maxDatoStr = Year(maxDatoStr) & "-" & Month(maxDatoStr) & "-" & Day(maxDatoStr)

SQL = "SELECT ....
Avatar billede eagleeye Praktikant
28. oktober 2003 - 22:50 #36
Ok, det skal nok bare være uge og aar uden Request.Querysting da du i koden hendter både uge og aar:


minDatoStr = UgeTilDato(aar, uge, 2)
maxDatoStr = DateAdd("ww", 1, minDatoStr)
minDatoStr = Year(minDatoStr) & "-" & Month(minDatoStr) & "-" & Day(minDatoStr)
maxDatoStr = Year(maxDatoStr) & "-" & Month(maxDatoStr) & "-" & Day(maxDatoStr)
Avatar billede riishoj Nybegynder
28. oktober 2003 - 22:58 #37
Jeg tror stadig at vi misforstår hinanden. Prøver lige at forklare.

Hvis minDato er sat til 3. august 2003 og maxDato sat til 19. december 2003 i databasen, så skal sql'en eksekveres i alle de uger de har en dato som ligger imellem de 2 nævnte datoer.

Dit sidste forslag giver

SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='1' AND mindato < #2003-10-28# AND maxDato > #2003-11-4#

for uge 44
Avatar billede eagleeye Praktikant
28. oktober 2003 - 23:04 #38
Ok, nu tror (håber) jeg jeg er med. Så det er minDato og maxDato som skal sammenlignes med den samme dato og er den dato imellem mindato og maxdat skal posten ud, prøv lige sådan her så:


datoStr = UgeTilDato(aar, uge, 2)
datoStr = Year(datoStr) & "-" & Month(datoStr) & "-" & Day(datoStr)

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato < #" & datoStr & "# AND maxDato > #" & datoStr & "#"
Avatar billede riishoj Nybegynder
28. oktober 2003 - 23:14 #39
Nu nærmer vi os tror jeg. Datoen passer, men sql'en bliver ikke eksekveret. Jeg tror, at vi blander 2 forskellige datoformater. Hvis jeg i db'en skriver 2003-08-03 ændrer access det til 08-03-03
Avatar billede eagleeye Praktikant
28. oktober 2003 - 23:19 #40
Et dumt spørgsmål har du husket en linje med Conn.Execute(strSQL)?

Hvis typen i tabellen er dato type så skulle det være godt nok.

men den SQL vil ikke medtage poster som starter eller slutter på den dato datoStr har da der ikke er = i SQL sætningen men kun < og > så skal det være

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato <= #" & datoStr & "# AND maxDato >= #" & datoStr & "#"
Avatar billede riishoj Nybegynder
28. oktober 2003 - 23:28 #41
Ja, jeg har en Conn.Execute. Denne linie

SELECT dag,tekst,lektion FROM ebberup_blokering WHERE reservation='fysik' AND dag='Mandag' AND lektion='2' AND mindato <= #2003-10-28# AND maxDato >= #2003-10-28#

burde indsætte et rødt felt med en tekst i skemaet mandag i 2. lektion da datoen  2003-10-28 ligger imellem minDato 08-03-03 og maxDato 12-19-03, men det sker ikke!
Avatar billede eagleeye Praktikant
28. oktober 2003 - 23:37 #42
Ja det burde den gøre. Og der står mandag i dag og 2 i lektion i posten..
Det virker underlidt. Prøv dette så med mm-dd-yy som dato format af datostr

datoStr = UgeTilDato(aar, uge, 2)
datoStr = Month(datoStr) & "-" & Day(datoStr) & "-" & Right(Year(datoStr),2)

strSQL = "SELECT dag,tekst,lektion FROM mintabel WHERE reservation='fysik' AND dag='" & SQLdag(dag) & "' AND lektion='" & lektion & "' AND mindato < #" & datoStr & "# AND maxDato > #" & datoStr & "#"
Avatar billede riishoj Nybegynder
28. oktober 2003 - 23:41 #43
Ja det ændrede datoformatet, men der bliver stadig ikke indsat noget.
Avatar billede riishoj Nybegynder
28. oktober 2003 - 23:44 #44
Den aktuelle post i db'en ser sådan ud

Id    dag    lektion    tekst    reservation    minDato    maxDato
13    Mandag    2    Dagplejen    fysik    03-08-03    12-19-03
Avatar billede eagleeye Praktikant
28. oktober 2003 - 23:54 #45
Det forstår jeg ikke, jeg har lige prøvet at lave et lille eks med den SQL og den post du har vist den bliver vist fint hos mig..
Og mindato og maxdato er defineret som Dato/klokkeslet ??
Når jeg smutter i seng skal tidligt op i morgen.
Avatar billede riishoj Nybegynder
28. oktober 2003 - 23:57 #46
Hey, det virker sørme. Jeg havde skrevet forkert dato i db'en. 1000 tak for hjælpen, du er bare absolut nr. 1 til det her. Send lige et svar så du kan få point. Du bliver nok nødt til at dele med kovalt, da det var ham som satte mig igang med spørgsmålet.

mvh/riishoj:)
Avatar billede eagleeye Praktikant
29. oktober 2003 - 00:01 #47
Det er helt i orden, så det også senge tid for mig ;)
Avatar billede riishoj Nybegynder
29. oktober 2003 - 08:30 #48
eagleeye>Hvad står 2-tallet for i din funktion?

datoStr = Month(datoStr) & "-" & Day(datoStr) & "-" & Right(Year(datoStr),2)
Avatar billede eagleeye Praktikant
29. oktober 2003 - 18:47 #49
Det er til Right funktionen så den tager de to første karakter fra højre af:

2003 -> 03
Avatar billede riishoj Nybegynder
29. oktober 2003 - 20:05 #50
Tak for det. Jeg må jo prøve at forstå funktionerne, men jeg synes, at det er svært :(
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