Avatar billede martin86 Nybegynder
15. oktober 2005 - 18:12 Der er 30 kommentarer og
1 løsning

Vis indlæg der er max X antal dage gamle

Hej Eksperter,

Jeg er ved at lave et forum og jeg ville gerne have at når der var et svar der var eks. 4 dage gammel at der stod "NYT SVAR" og hvis det nyeste svar så var mere end eks. 4 dage gammel stod der ingen ting .....

Jeg har snuset lidt rundt her inde men fandt kun det her:
http://www.eksperten.dk/spm/46956

Og jeg vidste ærligtalt ikke helt hvor jeg skulle begynde..


Jeg har gjort et forsøg:

<%SQLnyt ="Select * from debat_indlaeg where svarid=" & indlaeg("id")
Set nyt = Conn.Execute(SQLnyt)%>

<%if nyt("dato")=> DateAdd("d",-4, Date()) then%>  <--- Linie 84
NYT SVAR
<%else%><%end if%>


Men jeg får flg. fejl:
Error Type:
(0x80020009)
Exception occurred.
debat.asp, line 84


-Martin
Avatar billede martin86 Nybegynder
15. oktober 2005 - 18:14 #1
i min Access DB er Dato sat til tekst ...

og når der bliver oprettet et nyt svar bliver dato sat til flg.:

dato = ""&Date&"&nbsp;"&Time&""
Avatar billede martin86 Nybegynder
15. oktober 2005 - 18:32 #2
Jeg har ændret så koden ser sådan ud (uden sql forbindelsen):

<%if nyt("dato")=> DateAdd(-4, Date()) then%>
NY POST
<%else%><%end if%>


og nu får jeg en ny fejl:
Error Type:
Microsoft VBScript runtime (0x800A01C2)
Wrong number of arguments or invalid property assignment: 'DateAdd'
debat.asp, line 84
Avatar billede softspot Forsker
15. oktober 2005 - 19:41 #3
<%
SQLnyt ="SELECT * FROM debat_indlaeg WHERE svarid=" & indlaeg("id")
Set nyt = Conn.Execute(SQLnyt)
%>

<%
if CDate(nyt("dato")) => DateAdd("d", -4, Date()) then
%>
NYT SVAR
<%
end if
%>
Avatar billede martin86 Nybegynder
15. oktober 2005 - 20:32 #4
<%if CDate(nyt("dato")) => DateAdd(-4, Date()) then%>
NYT SVAR
<%end if%>

giver mig flg. fejl:

Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'CDate'
debat.asp, line 84
Avatar billede softspot Forsker
15. oktober 2005 - 20:42 #5
Hvad er årsagen til at du har valgt at lave datoen som en streng i databasen? Det er meget lettere at arbejde med en rigtig dato...
Avatar billede martin86 Nybegynder
15. oktober 2005 - 20:54 #6
jeg har ikke arbejdet meget med datoer så derfor var det, det nemmeste på kort sigt ...

mener du at det ville være lettete hvis jeg lavede Dato i min access om fra tekst til Dato ???
Avatar billede softspot Forsker
15. oktober 2005 - 20:58 #7
Det vil i det mindste sikre dig at det er datoer der ligger i databasen. Det kan godt være at databasen ikke tillader en konvertering af feltet, hvis der ligger datoer i, som ikke er gyldige.

Prøv evt. lige dette i første omgang:

<%
SQLnyt ="SELECT * FROM debat_indlaeg WHERE svarid=" & indlaeg("id")
Set nyt = Conn.Execute(SQLnyt)
%>

<%
if isDate(nyt("dato")) then
  if CDate(nyt("dato")) => DateAdd("d", -4, Date()) then
%>
    response.write "NYT SVAR"
<%
  end if
else
  response.write "Det er ikke en gyldig dato: " & nyt("dato")
end if
%>
Avatar billede martin86 Nybegynder
15. oktober 2005 - 21:15 #8
Den skriver at der er fejl i linie 93.:

response.write "Det er ikke en gyldig dato: " & nyt("dato")

...... Jeg har konverterede hele tabellen om så dato nu er dato klokkeslæt og ikke tekst
Avatar billede softspot Forsker
15. oktober 2005 - 21:29 #9
Noget kunne tyde på at der slet ikke er noget indhold i feltet (altså at det ikke er udfyldt) - kan det passe?
Avatar billede martin86 Nybegynder
16. oktober 2005 - 13:19 #10
der står noget i feltet der står en dato eks.: 15/10/2005 1:22:32 PM
Avatar billede softspot Forsker
16. oktober 2005 - 15:17 #11
OK, men det er jo ikke en valid dato for det betyder den 10. i den 15. måned, hvilket jo ikke eksisterer. Hvordan er den dato fremkommet?
Avatar billede martin86 Nybegynder
16. oktober 2005 - 15:44 #12
det er lavet automatisk ... med: &now& ... jeg har sat session.LCID = 1030 ... ved ikke om det har noget at sige ...
Avatar billede softspot Forsker
16. oktober 2005 - 16:58 #13
Med LCID = 1030 burde den fortolke datoen som dansk, men noget tyder på at den ikke acceptere det som en dato (ellers ville isDate-funktionen ikke returnere false).

Du sagde du havde lavet feltet om til en dato i databasen, men har du gjort noget ved de dato'er som lå der i forvejen? Hvormange datoer drejer det sig om?
Avatar billede martin86 Nybegynder
16. oktober 2005 - 17:11 #14
omkring 200, jeg har bare givet dem den samme dato alle sammen .... eks.: 15/10/2005 1:22:32 PM
Avatar billede martin86 Nybegynder
16. oktober 2005 - 17:15 #15
hvad er dit forslag så? at jeg ikke har LCID = 1030 ..... eller
Avatar billede softspot Forsker
16. oktober 2005 - 17:25 #16
Nej, det er en god idé at sætte LCID, hvis du altid skal køre med danske datoformater...

Umiddelbart forstår jeg ikke helt at databasen ikke har brokket sig, da du konverterede feltet til datotid-format. Hvis det er muligt (og let for dig at gøre), vil jeg da anbefale at du opdaterer alle datoer med en valid dato. Hvis du siger at alle datoer er de samme, så kunne du f.eks. køre denne SQL-sætning på databasen:

UPDATE tabel SET dato = #2005-10-15 13:22:32#

Det skulle gerne sætte alle dato-felters dato til d. 15. oktober 2005 (som jeg regner med at du gerne vil have). Du skal naturligvis udskifte tabel med navnet på den tabel hvor opdateringen skal ske...
Avatar billede martin86 Nybegynder
16. oktober 2005 - 19:42 #17
sql = "UPDATE tabel SET dato = #2005-10-15 13:22:32#"  ???
Avatar billede softspot Forsker
16. oktober 2005 - 19:45 #18
Ja.

Det ser ud til at du gerne vil spørge om et eller andet... :)
Avatar billede martin86 Nybegynder
16. oktober 2005 - 19:48 #19
hehe ja det er bare for at være sikker!?

Og det er jo en Dato så derfor er det vel med ## men jeg får en fejl, det her er min kode:

SQLopd = "UPDATE debat_indlaeg SET dato = '"2005-10-15 13:22:32"'"
Conn.Execute(SQLopd)

fejlen:
Error Type:
Microsoft VBScript compilation (0x800A0401)
Expected end of statement
Avatar billede softspot Forsker
16. oktober 2005 - 19:53 #20
Du siger: "Og det er jo en Dato så derfor er det vel med ##..."

Ja, det er en dato og der SKAL det være med ## omkring datoen. Det der så sker er at du udskifter ## med '' - og det er så der jeg falder af... hvorfor gør du det???

Grunden til at du får en fejl har dog ikke noget med det at gøre, men snarere at du forsøger at være 200% overbevisende overfor VBScript om at det altså ER en streng du har med at gøre (selvom det jo burde være en dato ;-)). Du behøver imidlertid kun at være 100% overbevisende, så sådan skal det gøres:

SQLopd = "UPDATE debat_indlaeg SET dato = '2005-10-15 13:22:32'"

...hvis altså det var en streng... men det er det jo ikke, men derimod en dato, så sådan SKAL det gøres:

SQLopd = "UPDATE debat_indlaeg SET dato = #2005-10-15 13:22:32#"
Avatar billede martin86 Nybegynder
17. oktober 2005 - 12:54 #21
Jep nu virkede det ... alle datoerne er nu ændret, så nu er der kommet en ny fejl :)

fejlen hedder:
Error Type:
(0x80020009)
Exception occurred.
debat.asp, line 96
Avatar billede softspot Forsker
17. oktober 2005 - 13:06 #22
...og linie 96 indeholder...?
Avatar billede martin86 Nybegynder
17. oktober 2005 - 13:08 #23
sorry fik jeg ikke lige med..

<%
SQLnyt ="SELECT * FROM debat_indlaeg WHERE svarid=" & indlaeg("id")
Set nyt = Conn.Execute(SQLnyt)
%>

<%
if isDate(nyt("dato")) then
  if CDate(nyt("dato")) => DateAdd("d", -4, Date()) then
%>
<%
    response.write "NYT SVAR"
%>
<%
  end if
else
  response.write "Det er ikke en gyldig dato: " & nyt("dato")  <-- Linie 96
end if
%>
Avatar billede softspot Forsker
17. oktober 2005 - 13:16 #24
Hmmm... det bliver mere og mere spøjst!?

Har du mulighed for at vise et udpluk af data fra din database, samt definitionen af feltet dato i databasen (evt. som screendumps som du lægger op på en eller anden url). Jeg fatter ikke hvad der sker lige i øjeblikket...
Avatar billede martin86 Nybegynder
17. oktober 2005 - 13:47 #25
ja det kan jeg ..... har du en MSN konto så kan jeg sende det over der, hvis det er okay!?
Avatar billede softspot Forsker
17. oktober 2005 - 13:53 #26
twiceman(a)hotmail.com
Avatar billede softspot Forsker
17. oktober 2005 - 15:24 #27
Kort og godt: Der er ikke noget resultat på den pågældende forspørgsel, så du skal lægge et check på om nyt.eof = false inden du aflæser værdien af nyt("dato").

<%
if not nyt.eof then
  if CDate(nyt("dato")) => DateAdd("d", -4, Date()) then
    response.write "NYT SVAR"
  end if
end if
%>
Avatar billede martin86 Nybegynder
17. oktober 2005 - 18:01 #28
Super, mange tak for hjælpen ... Opret venligst et svar så du kan få dine velfortjente points :D
Avatar billede softspot Forsker
17. oktober 2005 - 18:07 #29
Velbekomme :)
Avatar billede martin86 Nybegynder
17. oktober 2005 - 18:08 #30
LUKKET og besvarret ....
Avatar billede softspot Forsker
17. oktober 2005 - 18:10 #31
Tak for point :)
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