Problème de date dans requête SQL [ASP] - ASP - Programmation
Marsh Posté le 15-03-2003 à 20:29:44
salut,
c'est ADO que tu utilises pour accéder aux données? Tu devrais alors avoir une expression date qui ressemble plutôt à ceci: '2003-03-15' (avec les quotes au lieu des #).
Marsh Posté le 15-03-2003 à 20:46:48
avec les quotes il me fait une erreur (syntaxe error, ou je ne sais plus quoi). avec le dièse + les quote aussi. avec rien aussi... c'est désespérant
j'utilise une connexion ado (avec fichier dsn)
Marsh Posté le 15-03-2003 à 21:08:11
ça c'est bizarre, parce que je l'ai testé avant de poster. Je suis certain que le format de date universel passe sur ADO quelque soit la config
Marsh Posté le 15-03-2003 à 21:40:38
le problème vient peut-etre des minutes, car en utilisant seulement la date du jour je n'avais aucun problème. tout ces embetements surgissent en utilisant la date et l'heure dans un meme champ ('10.02.2003 12:23:21'
Marsh Posté le 15-03-2003 à 21:47:22
t'as encore mis des points
essaie les tirets pour la date
Marsh Posté le 15-03-2003 à 21:52:49
déjà testé avec le replace (voir première requête tout en haut)
Marsh Posté le 15-03-2003 à 21:55:35
ben d'après ta requête en haut tu finis toujours par un CDate donc ton replace ne sert en fait à rien
Marsh Posté le 15-03-2003 à 21:57:57
oConnection.Execute "DELETE * FROM t_adop_connectes WHERE connectes_date < '" & Format(DateAdd("n", -2, Now), "yyyy-mm-dd hh:mm:ss" ) & "'" |
à vue de nez c'est comme ça que j'écrirais ta première requête.
Marsh Posté le 15-03-2003 à 22:18:40
je viens de regarder et tu as raison, en enlevant le CDate ca fonctionne. il me semblait pourtant avoir testé sans et que cela foirait, je l'avais ajouté par dépit sans penser qu'il reformattait (je croyais qu'il précisait juste le type de variable).
en tout cas ca a l'air de fonctionner cette fois, et le temps d'exécution s'en voit diminué ouf!
merci
Marsh Posté le 15-03-2003 à 22:23:40
oui, quand tu renvoies une variable de type date à une string (donc la requête ici), VB/ASP va traduire ça dans le format par défaut
Marsh Posté le 03-04-2003 à 21:45:14
mon script fonctionnait parfaitement jusqu'à avant-hier, mais depuis lundi matin ca ne fonctionne plus! Voici une liste de tout ce que j'ai essayé, avec les messages d'erreurs ou commentaires:
Code :
|
j'ai envoyé un email à mon hébergeur mais ils n'ont fait aucune modifs, j'ai également purgé ma table de connectes (j'ai pensé que le problème venait peut-etre du changement horaire?)
Bref, je ne sais plus quoi faire
Marsh Posté le 03-04-2003 à 21:50:24
Tu pas faire un truc propre genre :
DELETE t_adop_connectes WHERE connectes_date < Now() |
Marsh Posté le 03-04-2003 à 21:51:03
non, je dois supprimer les personnes qui ont reloadé la page il y a 2min et + (c'est pour un chat tout moisi)
Marsh Posté le 03-04-2003 à 22:05:09
Hé ben...
DELETE t_adop_connectes WHERE connectes_date < DateAdd("n", -2, Now()) |
Sans passer par la construction de la date depuis l'ASP...
Access utilise la syntaxe VBA (donc la même qu'ASP) pour toutes les fonctions de date et de chaînes...
Marsh Posté le 03-04-2003 à 22:12:18
réponse à ta requête:
Code :
|
Marsh Posté le 03-04-2003 à 22:25:24
DELETE * FROM t_adop_connectes WHERE connectes_date < DateAdd("n", -2, Now()) |
En fait, il lui faut une liste de champs et FROM (c débile mais bon)
Marsh Posté le 03-04-2003 à 22:28:22
en effet c'est mieux.
"DELETE * FROM t_adop_connectes WHERE connectes_date < DateAdd(""n"", -2, Now())"
erreur: Too few parameters. Expected 1.
Marsh Posté le 03-04-2003 à 22:29:53
c quelle version d'access qu'il utilise ton hébergeur
access 2.0 ?
Marsh Posté le 03-04-2003 à 22:31:55
j'ai enlevé et j'ai la meme erreur
je ne sais pas la version, je peux le savoir comment?
edit: je vais au dodo si jamais, je continuerai demain
Marsh Posté le 03-04-2003 à 22:33:25
je sais pas.
en tout cas, ça marche sous access xp, et sous access 2k (testé)
sous 97 je pense que ça marche aussi. mais au-delà...
Marsh Posté le 03-04-2003 à 22:58:41
ReplyMarsh Posté le 06-04-2003 à 13:37:04
Après quelques jours du bug, je suis encore + perplexe.
Résumons, j'ai une requête de cette syntaxe:
"DELETE * FROM t_adop_connectes WHERE connectes_date < #" & replace(DateAdd("n", -2, Now),".","/" ) & "#"
J'en ai une autre sur le meme principe, pour deleter toutes les 24 heures.
Jour 1: les 2 fonctionnent
Jour 2: le premier ne delete rien, le 2e fonctionne
Jour 3: le premier refonctionne, le 2e ne delete rien
Jour 4: le premier fonctionne, le 2e delete TOUT
je n'y comprend plus rien, d'ou peut venir un tel problème? pourquoi est-ce que mon script n'est-il pas stable??
Marsh Posté le 06-04-2003 à 16:47:59
Déjà, essaie vraiment de trouver comment traîter les dates dans ACCESS.
En effet, à priori, ça ne doit pas arriver, mais si jamais le format de date dans Access est différent de celui du serveur, ça va chier.
Sinon, essaie vraiment d'utiliser un autre SGBD qu'Access. En effet, access c'est très bien pour générer quelques infos genre des menus personnalisés ou des CSS personnalisées (sur le site de M$ d'ailleurs, avant de passer au XML, ils bossaient avec une petite base en Access 2 pour gérer tout ce qui est menus, et cnie. J'en suis sûr, au taf on leur avait fait quelques pages )
Mais access n'est pas performant du tout pour ce qui est des accès concurrents (donc il ne faut jamais avoir à écrire dedans lorque tu bosses en environnement partagé) et encore moins pour les gros volumes (chaque requête dans Access nécessite un chargement complet de toute la base !)
Marsh Posté le 06-04-2003 à 18:04:33
Personellement ayant été confronté au problème de settings régionaux du serveur, d'access , ... je prépare mes dates au format amerloc' (MM/DD/YYYY) avant de les ajouter à ma chaine et ca fonctionne sans problèmes. En réalité j'utilise deux fonctions qui sont indépendantes des settings régionaux, les voici :
Code :
|
Marsh Posté le 07-04-2003 à 07:16:07
merci pour vos infos.
je vais coder d'une autre facon mon truc, je ferai une purge "manuelle" avec le script de départ (celui qui compare la date dans un script asp, il est beaucoup plus lourd). Pour l'affichage je comparerai la date dans un condition asp pour l'afficher ou non.
changer de base de données ne doit pas être possible, mon hébergeur n'accepte apparemment que l'access.
bah, je trouverai bien une solution
Marsh Posté le 15-03-2003 à 19:33:31
Je suis en train de coder un partie pour voir les personnes qui ont relaodé une page dans les 2 dernières minutes, basé sur une table dans Access.
j'ai d'abord essayé la requête suivante, mais cela semblait fonctionner une fois sur 2 (mon brower ne me faisait pas d'erreur, mais celui d'un ordinateur juste à coté oui (les 2 fois internet explorer)).
j'ai donc remplacé par le code-spagettis suivant:
le gros problème, c'est que à présent j'ai des problèmes de temps. ce bout de code est lui aussi accompagné de "veaux" qui font ensembles que ça en devient inacceptable au niveau du temps.
Alors si qqun a la moindre idée de comment arriver à qqch d'autre que l'équivalent d'un émulateur modem 33,1, ca me serait vraiment utile!
merci d'avance
---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.