Toon posts:

[ASP] 3 maanden verder tellen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het volgende probleem heb ik met een script wat ik wil maken en kom er niet helemaal uit.

Het volgende moet namelijk kunnen:

Wanneer er een record in het database staat met de datum 1/1/2005 dat er op 20/3/2005 een actie word uitgevoerd, nu is dit nog geen eens een groot probleem.
Wat ik alleen niet snap ik hoe ik het gaat doen wanneer een record op 1/11/2004 is aangemaakt en ik dus een actie wil op bijvoorbeeld 20/1/2005.

Even stap voor een stap.

Ik wil een actie uitvoeren alleen met een record wanneer het ongeveer 2 maanden en 20 dagen in het database staat.

Is die mogelijk en hoe??

  • Flard
  • Registratie: Februari 2001
  • Laatst online: 08-05 22:38
ASP kan niet spontaan starten, dus je zult óf iets in de taakplanner op de server moeten zetten (ik weet niet of je toegang hebt daartoe), of bijvoorbeeld op de homepage een soort 'check' scriptje toevoegen, wat kijkt of er iets als drie maanden in de database staat.

(Rekenen met Data doe je trouwens met DateAdd(), mocht je het nog niet hebben gezien )

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Flard schreef op zaterdag 19 februari 2005 @ 13:47:
ASP kan niet spontaan starten, dus je zult óf iets in de taakplanner op de server moeten zetten (ik weet niet of je toegang hebt daartoe), of bijvoorbeeld op de homepage een soort 'check' scriptje toevoegen, wat kijkt of er iets als drie maanden in de database staat.
Of als je niet aan de taakplanner op de server kan maar wel een lokale pc hebt die vaak aan staat: een combinatie van de items die Flard noemt. Je maakt een taak op je eigen pc, die eens per dag een check-scriptje op je server benadert.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Dat starten is geen probleem. Die pagina word namelijk iig dagelijks geopend, het gaat mij om het script.

Ik ga eens zoeken op DateAdd()

Wat ik tot nu toe heb:

Het volgende:

In het database heb ik een kollom Datum_betaald.

Ik wil dus dat wanneer test.asp geopend er een SQL selectie word gemaakt van de datums die 3 maanden na de datum Date() liggen.

Dus als het vandaag nu 01-05-2005 is dan moet er dus een selectie van alle records gemaakt die de datum lager < dan 01-02-2005 hebben.

Zelf heb ik het volgende gemaakt:



<!--#include file="inc_functies.asp"-->

<%
‘-----------------------------------------------------------------

‘Om de uitvoer even te bekijken

Begindatum = date()
Veranderd = DateAdd("m",3,Begindatum)

Response.Write(begindatum)
Response.Write(Veranderd)

‘------------------------------------------------------------------

Set MailDB = Server.CreateObject("ADODB.Recordset")

SQL = "SELECT * FROM tblabonnee WHERE datum_betaald > #" & DateAdd("m",3,Begindatum) & "#"

MailDB.CursorType = 1
MailDB.LockType = 3
MailDB.Open SQL, Connection

‘---------------------------------------------------------------------
do while not MailDB.EOF
Response.Write(MailDB("UserID"))
maildb.movenext()
loop

%>





Nu het probleem wanneer ik het < teken gebruik krijg ik een selectie van alles en wanneer ik het > teken gebruik krijg ik niks.

Met alle mogelijke datums gecheckt.

[ Voor 83% gewijzigd door Verwijderd op 19-02-2005 16:07 ]


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Dat kan je heel mooi in sql oplossen, dan heb je ook geen problemen met verschilllende formaten van de datums. Afhankelijk van je database zijn er verschillende functies maar de meeste zullen toch wel iets als dateadd and date() zijn. Daarnaast kan je datums niet met < en > vergelijken. Je kan wel het verschil tussen datums vergelijken.
Bijvoorbeeld voor mysql (uit t hoofd :o)
SQL:
1
2
3
SELECT *
FROM test
WHERE DATEDIFF(date_a, CURDATE()) >= DATEDIFF(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), CURDATE())

[ Voor 36% gewijzigd door Gert op 20-02-2005 00:11 ]


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 08-05 22:38
Ik weet niet precies welk dbms je gebruikt.

Maar wat ik meestal doe bij Access is data als Double meegeven. Want als je met #datum# werkt, dan zit je soms met amerikaanse notering e.d.
#03-04-05# is bij ons 3 april 2005, maar kan in amerika ook 4 maart 2005 zijn.
Daarom doe ik meestal:

SQL = "SELECT * FROM Tabel WHERE Datum = " & CDbl(Date())

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Flard schreef op zondag 20 februari 2005 @ 01:16:
Ik weet niet precies welk dbms je gebruikt.

Maar wat ik meestal doe bij Access is data als Double meegeven. Want als je met #datum# werkt, dan zit je soms met amerikaanse notering e.d.
#03-04-05# is bij ons 3 april 2005, maar kan in amerika ook 4 maart 2005 zijn.
Daarom doe ik meestal:

SQL = "SELECT * FROM Tabel WHERE Datum = " & CDbl(Date())
Je kan natuurlijk ook de juiste locale instellen...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Wanneer je met parameterized queries werkt dan lost ADO je datumnotatieproblemen op...

Zoek maar eens met de search, er zijn genoeg voorbeelden voorbij gekomen...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 08-05 22:38
Probleem met die locale is dat je het soms weer alleen voor de database wil hebben, omdat de rest van website in de locale van de user moet komen, en soms heb je dan ook nog problemen als je van server verhuist (van een engelse naar een nederlandse).
Als je het op deze manier doet heb je nóóit problemen ;)


Ja, parameterized queries zijn nóg mooier, en maken ook nog SQL-Injection onmogelijk dus zijn wat dat betreft ideaal.

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Tip, gebruik altijd ISO date format, dan heb je nooit meer dat probleem.

Verwijderd

Topicstarter
gelukt, tnx
Pagina: 1