IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Problème de date courante


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut Problème de date courante
    Bonjour,

    J'aimerais récupérer la date courante afin de la comparer à la date de modification de ma table, afin de récupérer seulement les enregistrements modifiés ou insérés. J'ai effectué une requête mais elle ne me renvoie rien quand j'utilise la fontion DATE() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT TBClient.Nom, TBClient.Prenom, MSysObjects.DateUpdate
    FROM MSysObjects, TBClient
    WHERE MSysObjects.DateUpdate=Date();
    Si vous avez des idées afin que je puisse récupérer simplement les enregistrements qui ont été updatés ou insérés le jour même.

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Je crois savoir pourquoi ça ne m'affiche rien, en fait la fonction Date() ou Now() récupère la date et l'heure courante, or le champ DateUpdate de la table système MSysObjects est de type Date/Heure, il récupère donc la date et l'heure de modification, c'est pour cela que quand je compare ce champ à la date courante c'est la même date mais pas la même haure, c'est pourquoi ma requête n'affiche rien.
    Peut-on par conséquent modifier la table système pour qu'elle affiche la date abrégé?
    Peut-on caster le type de la table système directeme,t dans ma requête?

    Help me please !!!

  3. #3
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,
    Je ne comprends peut-être pas bien ce que tu veux faire, mais :
    1- C'est bizarre il n'y a pas de jointure entre tes 2 tables
    2- Je ne vois vraiment pas comment arriver à retrouver les enregistrements récemment modifiés de TBClient à partir des infos contenues dans MSysObjects

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Bonjour,

    en fait la table MSysObjects contient un champ DateUpdate avec la date de modification de la table, par exemple si j'effectue cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT TBClient.Nom, TBClient.Prenom, MSysObjects.DateUpdate
    FROM MSysObjects, TBClient;
    Alors elle va me renvoyer les nom et prenom des clients avec la date de modification :



    Merci

  5. #5
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    J'ai peur qu'il te manque effectivement quelque chose dans ta requete: visiblement la quand tu fais ta requete il te renvoie tous les champs nom et prenom et pour chaque nom/prenom: tous les champs DateUpdate!! Regarde: chaque personne a ete modifiee en meme temps...

    Il faut que tu fasses une jointure, c'est a dire qu'il doit recouper les informations au lieu de tout mettre. Quels champ as-tu dans ta table MSysObjects qui puisse identifier le nom/prenom de la table TBClient qui correspond?

    Par exemple si c'est le champ Id de la table MSysObjects qui renvoie sur la cle Identifiant de la table TBClient tu feras:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TBClient.Nom, TBClient.Prenom, MSysObjects.DateUpdate
    FROM MSysObjects INNER JOIN TBClient
    ON MSysObjects.Id=TBClient.Identifiant;
    Et pour la date il suffit je pense de comparer la valeur "jour/mois/annee" du champ et de la date Now() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Format(MSysObjects.DateUpdate,"DD/MM/YYYY")=Format(Now(),"DD/MM/YYYY")

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Ouai c'est vrai qu'il y avait un petit (gros) soucis dans ma requêtes
    Merci pour ta réponse trés complète, je vais tester tout ça et je te tiens au courant.

    Merci encore et désolé pour mon impertinence

  7. #7
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Pas de probleme! Le forum est la pour ca et puis on a tous ete comme ca

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Re,

    Bon c'est un peu la galère car dans la table système MSysObjects ya pas de réel champ qui identifie ma table TBClient seul un champ Name qui contient les noms des tables modifiées :



    Sinon j'ai une autre idée , rajouter un champ Date/Heure avec comme valeur Now() dans ma table TBClient qui permettrais de récupérer les dates de modification de ma table.
    Le problème cela fonctionne qu'avec les INSERT et non pas UPDATE.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Points : 59
    Points
    59
    Par défaut Problème de date courante Répondre à la discussion
    Citation Envoyé par guigui11
    Re,

    Bon c'est un peu la galère car dans la table système MSysObjects ya pas de réel champ qui identifie ma table TBClient seul un champ Name qui contient les noms des tables modifiées :



    Sinon j'ai une autre idée , rajouter un champ Date/Heure avec comme valeur Now() dans ma table TBClient qui permettrais de récupérer les dates de modification de ma table.
    Le problème cela fonctionne qu'avec les INSERT et non pas UPDATE.

    Je ne suis pas sur d'avoir tout compris
    TB Client est la table source dans laquelle les données sont créées ou modifiées.
    Est ce q'un l'instruction d'Udate utilisée pour la maj de la table source contient quelque chose comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE Tablesource SET Tablesource.[Datetime] = Now();
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE Tablesource SET Tablesource.[Datetime] = Date();
    @+zeste
    CarpeDiem,CarpeNoctem
    May the Force Be With Us

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Désolé j'ai du m'absenter, sinon je vais reprendre du début, en essayant d'être le plus clair possible.
    Nous avons un logiciel d'encaissement qui utilise une base de données de type Access. Donc tous les magasins ont leur propre BDD. L'évolution que je dois mettre en place consiste à centraliser toutes les bases Access des magasins sur un serveur central SQL Server.
    La problématique est qu'à chaque fois qu'un magasins ajoute un client ou modifie par exemple l'adresse dans sa BDD Access, il faut faire remonter que les enregistrements qui ont été modifiés ou ajoutés, car sinon on a un problème d'intégrité de données puisque si par exemple un magasin A modifie l'adresse de Paul, lors de la réplication du soir, le magasin A mettra à jour l'adresse de Paul sur le serveur, mais les magasins B, C et D ont encore l'ancienne adresse et donc remettront à jour le serveur avec l'ancienne adresse, c'est pourquoi je souhaite remonter simplement les enregistrements modifiés ou insérés (car ce n'est pas possible qu'in magasin modofie en même temps un client).
    Pour répondre donc à ta question, l'utilisateur modifie ou ajoute un client directement dans l'interface de notre logiciel d'encaissement qui lui réplique les changements sur la base Access. Ensuite, le soir venu toutes les modifications et les nouveaux clients doivent remonter sur le serveur afin que celui-ci mette à jour les autres magasins.

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Aprés l'explication fonctionnelle, je t'explique le mise en place.
    En ce qui concerne la réplication, on utilise pas SQL Server, on passe par un progiciel tiers qui permet d'exporter les données dans un fichiers plat (.txt) et de l'envoyer vers le serveur pour ensuite l'importer dans la table de SQL Server.
    Pour mettre à jour cette table client, il faut renseigner un ordre SELECT au progiciel afin qu'il est un critère de sélection et il effectuera un UPDATE par rapport au résultat du SELECT... tu me suis toujours ?
    C'est dans cet ordre SELECT que je dois lui faire récupérer simplement les enregistrements modifiés ou insérés, car sinon il effectue un UPDATE de tous les enregistrements.

  12. #12
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    ça avait l'air bien comme idée, quel est le problème ?
    Citation Envoyé par guigui11
    Re,

    Bon c'est un peu la galère car dans la table système MSysObjects ya pas de réel champ qui identifie ma table TBClient seul un champ Name qui contient les noms des tables modifiées :



    Sinon j'ai une autre idée , rajouter un champ Date/Heure avec comme valeur Now() dans ma table TBClient qui permettrais de récupérer les dates de modification de ma table.
    Le problème cela fonctionne qu'avec les INSERT et non pas UPDATE.

  13. #13
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Salut,

    Le problème c'est que la date se met à jour que quand on insère un enregistrement, alors que quand je modifie un enregistrment la date ne change pas. Or, j'ai besoin que la date prenne la valeur de la date du jour pour effectuer une requête de sélection en lui disant que je veux récupérer que les enregistrements dont la date de mise à jour est égale à celle courante.

  14. #14
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Je suis toujours bloqué sur ce problème.
    Effectivement je voudrais créer dans ma table TBClient, un champ de type Date/Heure avec comme valeur Maintenant(), ce qui me permettrais de récupérer la date courrante lors des insertions. Mais voilà ce système fonctionne qu'avec les insertions de ligne et non pas avec les modifications. Or j'ai besoin justement de récupérer la date de modification d'une ligne.
    Si quelqu'un a une solution à mon problème je vous serez trés reconnaissant

  15. #15
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par guigui11
    Je suis toujours bloqué sur ce problème.
    Effectivement je voudrais créer dans ma table TBClient, un champ de type Date/Heure avec comme valeur Maintenant(), ce qui me permettrais de récupérer la date courrante lors des insertions. Mais voilà ce système fonctionne qu'avec les insertions de ligne et non pas avec les modifications. Or j'ai besoin justement de récupérer la date de modification d'une ligne.
    Si quelqu'un a une solution à mon problème je vous serez trés reconnaissant
    comment se fait la saisie des modifs ?
    Si c'est par un formulaire, il suffit de gérer l'événement BeforeUpdate du Formulaire pour renseigner un champ caché qui serait la date de derniere mise à jour.
    Si c'est directement par la feuille de données requete / table, ce n'est pas gérable avec Microsoft JET

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    bien sur que c'est gérable
    il suffit de faire une copie à l'instant t de la table clients
    à l'instant t1 on compare clients et sa copie avec le niveau d'intégrité souhaité
    toutes les non concordances t1-t sont des évènements saisis entre ces dates

  17. #17
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Bonjour tout le monde,

    Le problème est enfin résolu, voilà comment j'ai procédé afin de récupérer seulement mes clients qui ont été modifiés dans la table TBClient :

    • 1. j'ai rajouté un champ nommé DateUpdate de type Date/Heure

    • 2. j'ai ensuite ajouté dans ma requête de mise à jour (exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE TBClient SET DateUpdate = Now(), Adresse = '10 rue Victor', Ville = 'Montpellier' 
    WHERE Nom = 'TOTO';
    • 3. j'ai ensuite effectué une requête de selection qui compare la date de mise à jour avec celle courante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom, Prenom, Adresse, Ville 
    FROM TBClient 
    WHERE Format(DateUpdate,"DD/MM/YYYY")=Format(Now(),"DD/MM/YYYY")

    Maintenant je peux récupérer seulement les enregistrments mis à jour le jour même afin de les répliquer tous les soirs sur le serveur central.

    Merci à tous ceux qui ont apportés des réponses à mes questions et tout particulièrement zeste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2006, 21h01
  2. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 12h21
  3. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 16h05
  4. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 19h22
  5. Date courante
    Par missllyss dans le forum SQL
    Réponses: 5
    Dernier message: 29/08/2003, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo