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

Bases de données Delphi Discussion :

Comment calculer le nombre de jours?


Sujet :

Bases de données Delphi

  1. #1
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut Comment calculer le nombre de jours?
    Bonjour à tous

    j'ai 2 tables

    Employeur =Id,Nom,Prenom,...,IDAbsence
    Absence =IDAbsence ,dateAbs,NbrAbs

    J'enregistre les deux tables tous les mois sous le nom de
    Janvier.FDB
    Fevrier.FDB
    Mars.FDB
    Avril.FDB
    .......
    .......
    .......

    Mon problème est de savoir comment calculer le nombre d'absences de chaque employé au cours de tous les mois.

    Dois-je ouvrir la base de données pour chaque mois et prendre l'absence, puis la fermer et ainsi de suite avec le reste des mois

    La méthode de sauvegarder la base de données pour chaque mois est-elle correcte? Ou existe-t-il une autre meilleure façon

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    IDAbsence tel que décrit me semble douteux

    pourquoi créer une base par mois ? et que fais-tu l'année suivante ?!!
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    IDAbsence tel que décrit me semble douteux
    il y a relation entre les deux tables Parent/Enfant



    pourquoi créer une base par mois ? et que fais-tu l'année suivante ?!!
    C'est mon problème dans lequel je suis tombé.
    Y a-t-il une autre méthode pour sauvgarder les mois pour chaque année

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    je réponds d'abord à la dernière question, avec une question : de quel SGBD s'agit-il ? S'il s'agit de Firebird (ce que tendrait à indiquer l'extension fdb) c'est plus que comme méthode

    La méthode de sauvegarder la base de données pour chaque mois est-elle correcte? Ou existe-t-il une autre meilleure façon
    S'il s'agit de Firebird, faire un backup ou nbackup est nettement mieux

    Mon problème est de savoir comment calculer le nombre d'absences de chaque employé au cours de tous les mois.
    Dois-je ouvrir la base de données pour chaque mois et prendre l'absence, puis la fermer et ainsi de suite avec le reste des mois
    Toujours s'il s'agit de Firebird, il est possible de travailler sur plusieurs bases de données différentes.

    Citation Envoyé par Paul Toth
    pourquoi créer une base par mois ?
    Je plussoie, c'est totalement abhérent quand on sait que Firebird (s'il s'agit de Firebird) peut aller jusqu'à 32 Tera (version 2.5).
    Toujours s'il s'agit de firebird, cela ressemble à une migration Paradox mal conçue (où effectivement faire de petites tables avait une raison d'être) . Je comprends l'intérêt, discutable, de vider régulièrement des tables en archivant dans une autre base les données mais de là à faire une base de données par mois !

    P.S.
    Employeur =Id,Nom,Prenom,...,IDAbsence
    ce ne serait pas plutôt Employé ?
    il y a relation entre les deux tables Parent/Enfant
    AMHA elle n'est pas dans le bon sens la structure devrait être
    Employe =Id,Nom,Prenom,..., ?
    Absence =IDAbsence,idEmploye ,dateAbs,NbrAbs
    avec un clé étrangère ABSENCE.IdEmploye REFERENCE EMPLOYE.Id

    En conclusion,commençons par le début : de quel SGBD s'agit-il ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    avec une petites analyse tu aurais vu que les cardinalités n'était pas cohérente

    tu as 1 employé et n absence alors que dans ta description
    nous avons 1 absence et n employé
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    J'ajoute mon exemple
    avec FireBird3
    prog.rar

    S'il s'agit de Firebird, faire un backup ou nbackup est nettement mieux
    Comment puis-je sauvgarder chaque mois?

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par S.H
    avec FireBird3
    Donc, il s'agit bien de Firebird

    Reste à comprendre l'utilité de ces diverses bases A Mon Humble Avis totalement inutiles.
    Si j'arrive à comprendre l'utilité du backup (d'ailleurs ne pas en faire au moins une chaque jour est pour moi absolument rédhibitoire) la partition telle que vous la faite, je ne comprends pas !
    Plusieurs scenaris possibles
    la base de production
    une base d'historique
    dans la base d'historique :
    une table "miroir" employés
    une table par annee/mois des absences ou une seule table des absences ? (il faudra m'éclaircir ce point si vous voulez continuer dans cette voie)

    Maintenant pratiquement.
    Il faut déjà savoir que si vous ne faites pas régulièrement des backups :
    - les transactions mal terminées restent en LIMBO (dans les limbes) donc ralentissent l'accès aux données
    - le vidage de la poubelle interne (garbage collector) ne se fait pas ou du moins pas vraiment (selon la configuration de firebird)
    - les enregistrements supprimés ne réduisent pas la taille de la base de données l'espace alloué (par page) reste
    En considération de ce dernier point donc, faire des copies mensuelles des données dans des bases de données distinctes ne sert qu'à vous pénaliser et pas à réduire la taille de la base de données de production.

    La seule manière de réduire la taille de la base de production après, par exemple ce traitement mensuel, c'est de faire un restore du backup. Ce qui aura l'avantage également de virer les transaction en LIMBO.

    Comment puis-je sauvegarder chaque mois?
    si vous ne faites qu'une sauvegarde par mois en environnement de production après ce que vous venez de lire, je vous tape sur la tête
    Plus sérieusement ma stratégie est de faire un backup (gbak) tous les jours mais aussi, également tous les jours, un nbackup par heure.
    la différence ? un backup est le plus portable, le nbackup ne procéde pas aux nettoyages tels qu'expliqués plus haut.
    pourquoi alors un nbackup ? parce que cela permet de sauvegarder la base totale dans la première passe puis de ne sauvegarder que les différences heure par heure.
    Ma recette ensuite est de faire des suppressions journalières des sauvegardes précédentes en fonction d'une stragégie définie, par exemple ne garder que les sauvegardes que des débuts de mois <
    et les sauvegardes journalières du mois en cours, voire, supprimer les sauvegardes mensuelles des années n-2.

    Bien sûr pour cela j'ai fait mon propre programme, je n'allais pas faire ça à la main quand même ! Mais il existe des programmes sur le net qui propose peu ou prou la même chose de mémoire sur le site de FirebirdSQl.org il est possible d'en retrouver, j'en ai utilisé un longtemps (Gbak Scheduler) à titre personnel avant de faire mon propre programme pour y intégrer NBackup


    Le rar.

    Côté structure de la BDD (succinte) rien à dire, vous avez semble-t'il intégré les remarques qui vous avaient été faites.
    Juste quelques remarques :
    - Vous avez créé une base d'encodage NONE, c'est à éviter, vous aurez par la suite beaucoup de difficulté à en changer partez tout de suite sur de l'UTF8 ou du WIN1252
    - Les triggers (j'ai reconnu la patte de Flamerobin dans cette codification ) pour les clés uniques, vous auriez pu l'éviter en utilisant IDENTITY
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     id BIGINT generated by default as identity primary key

    Côté programme. OMG Pas de datamodule, un showmodal, je déteste. Je ne jetterai pas la pierre mais ...
    Quant au traitement une copie de la base de données dans un contexte multi-utilisateurs cela peut courrir à la catastrophe ! Et puisque vous utilisez Firedac faites un tour du côté de FDIBBackup

    et tant qu'à faire FDFBNbackup

    Dernier point pour répondre à la question initiale
    Mon problème est de savoir comment calculer le nombre d'absences de chaque employé au cours de tous les mois.
    S'il n'y a pas de "purge" des données contrairement à ce que laissait penser cette histoire de
    J'enregistre les deux tables tous les mois
    un simple SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID_EMP,SUM(NBRJOURS)  ABSENCES FROM ABSENCES GROUP BY ID_EMP
    ou avec une CTE :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     WITH A AS (SELECT ID_EMP,SUM(NBRJOURS)  ABSENCES FROM ABSENCES GROUP BY ID_EMP)
     SELECT N.ID,N.NOM,N.PRENOM,COALESCE(A.ABSENCES,0)  JOURS FROM EMPLOYEE N LEFT JOIN A ON A.ID_EMP=N.ID
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    J'ai fait une Backup de la base de données.
    Est-ce que ça veut dire que je fais ça tous les mois?N'est-ce pas la même chose que j'ai fait avant?
    La question reste comment calculer le nombre de jours d'absence?
    C'est ma tentative
    prog.rar

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par S.H Voir le message
    J'ai fait une Backup de la base de données.
    Je vois ça.
    Est-ce que ça veut dire que je fais ça tous les mois?
    en environnement de production ? sauvegardez au moins une fois par jour
    N'est-ce pas la même chose que j'ai fait avant?
    Absolument pas, regardez les tailles de la base de données et celle d'un backup devrait vous convaincre en peu de mots.
    En environnement multi-utilisateur c'est se mettre une balle dans le pied de de faire une sauvegarde de la base en copiant le fichier fdb.

    La question reste comment calculer le nombre de jours d'absence?
    j'ai l'impression que vous ne m'avez pas lu en entier car je vous ai donné les réponses !
    Après l'insertion de quelques absences dans le jeu d'essai
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO ABSENCE (NBRDEJOUR, DATEABSENCE, IDEMP) VALUES ('2', '01.01.2021', '1');
    INSERT INTO ABSENCE (NBRDEJOUR, DATEABSENCE, IDEMP) VALUES ('4', '10.01.2021', '1');
    INSERT INTO ABSENCE (NBRDEJOUR, DATEABSENCE, IDEMP) VALUES ('1', '24.01.2021', '1');
    INSERT INTO ABSENCE (NBRDEJOUR, DATEABSENCE, IDEMP) VALUES ('1', '01.01.2021', '3');

    Nom : Capture.PNG
Affichages : 190
Taille : 27,4 Ko

    Bien sûr il est possible de faire des groupements par mois ou par an mais ce n'est pas précisé dans votre question
    par exemple, SQL non peaufiné
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH A AS (SELECT IDEMP,extract(MONTH FROM DATEABSENCE) MOIS,SUM(NBRDEJOUR)  ABSENCES FROM ABSENCE 
                GROUP BY IDEMP,extract(MONTH FROM DATEABSENCE))
     SELECT N.ID,N.NOM,N.PRENOM,A.MOIS,COALESCE(A.ABSENCES,0)  JOURS_d_ABSENCE FROM EMPLOYEE N LEFT JOIN A ON A.IDEMP=N.ID

    Bien sûr vous ajouterez des clauses WHERE et des paramètres selon vos besoins.

    J'ai noté que l'insertion d'absence avec votre programme n'enregistrait pas la date.
    J'ai un doute car si dans mes insertions test j'ai fait attention, on pourrait facilement insérer des chevauchements
    exemple
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ABSENCE (NBRDEJOUR, DATEABSENCE, IDEMP) VALUES ('4', '13.01.2021', '1');
    donnerait 11 jours d'absences pour l'employé 1
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup SergioMaster

    Je comprends ce que tu veux dire maintenant

    Cela signifie qu'il n'est pas nécessaire de diviser la base de données en mois ou en années, il est préférable de travailler sur la même base de données et cette procédure est suivie avec toutes les bases de données.
    On peut rechercher le nombre d'absences par mois ou par an en précisant la date
    Mais dans certains programmes tels que la gestion des stocks
    Vous voyez qu'ils mémorisent chaque année séparément!!
    Pour vider certaines tables par exemple : entrées,Movement,Ventes et d'autres selon votre conception de la base de données .Et garder le reste des tables Produits / Fournisseurs / Clients ...
    Si je vide les tables et que je veux connaître les informations précédentes?par exemple les ventes, achats de l'année précédente.Une nouvelle facture commence chaque année
    Cela signifie-t-il qu'ils se trompent dans leur conception?

  11. #11
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par S.H Voir le message
    dans certains programmes tels que la gestion des stocks
    Vous voyez qu'ils mémorisent chaque année séparément!!
    Attention, est-ce qu'ils mémorisent, c'est à dire qu'ils enregistrent un backup par année en guise d'archive ?
    Ou bien est-ce qu'ils découpent effectivement la base par années ?

    Pour avoir développé un logiciel de gestion de stocks il y a quelques années, ce n'est pas quelque chose que nous avions mis en place (le fait de découper la base par années). Et les clients ne nous ont même jamais fait cette demande.
    Est-ce une pratique pour les très gros logiciels ?

    Aurais-tu des noms de logiciels qui effectuent ce découpage ?

  12. #12
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par blonde Voir le message
    Attention, est-ce qu'ils mémorisent, c'est à dire qu'ils enregistrent un backup par année en guise d'archive ?
    Ou bien est-ce qu'ils découpent effectivement la base par années ?
    ils divisent la base par années!!

    Citation Envoyé par blonde Voir le message
    Est-ce une pratique pour les très gros logiciels ?
    Non mais peut-être des amateurs

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Je suis peut-être un amateur, mais dans ma GPAO vintage (+20ans d'âge), gestion de Stocks incluse, j'ai fourni une option d'archivage des commandes clients, peu utilisée à vrai dire, mais possible.
    Cela a été très utile lors de la scission de l'entreprise suite à un dépôt de bilan, chaque société ayant pu garder un archivage des années écoulées. Cela dit cela ne sert que pour les stats sur x années.

    De plus, il faut dire que le logiciel à été commencé en 1995 et qu'à l'époque j'étais moins doué j'utilisais beaucoup de TTables et de filtres, qu'il s'agissait d'interbase 5 etc...

    Toujours est-il que, et je l'ai déjà écrit dans ma première réponse
    Citation Envoyé par SergioMaster
    s'il s'agit de Firebird, il est possible de travailler sur plusieurs bases de données différentes.
    avec Firebird il est possible de faire des requêtes (ou plus exactement du PSQL) qui peut récupérer des données d'une base externe
    EXECUTE STATEMENT ... ON EXTERNAL ...


    voir en exemple cette discussion, attention, ça pique, ce n'est pas un modèle que je recommanderai.

    Autre solution, Firedac permet de faire des requêtes sur plusieurs connexions différentes et même SGBD différent grâce aux composant TFDLocalQuery.

    en P.S. Une des choses qui manque dans firebird c'est bien un planificateur qui pourrait lancer quelques traitements (procédures)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup SergioMaster

  15. #15
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    J'ai déjà demandé comment sauvegarder une base de données ,Et La réponse était qu'il est préférable de la sauvegarder dans une seule base de données, plutôt que de la diviser en plusieurs bases.

    Si la base de données n'est enregistrée que mensuellement, je peux l'ouvrir dans n'importe quel mois avec les modifications.

    Dans le cas où la base de données n'est pas partitionnée
    Supposons que j'apporte de nombreux changements à mes tables de base de données chaque mois et que le mois suivant j'apporte de nombreux changements. Si je veux imprimer le premier etat, c'est-à-dire les modifications que j'ai effectuées le mois précédent,

    Par exemple, j'ai trois tables qui étaient au mois de janvier avec ces informations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Employee
    +----+---------+--------+-------------+
    | id | nom     | prenom |date de naiss|
    +----+---------+--------+-------------+
    | 01 | Pierre  |Pierre  | 12/12/1984  |
    | 02 | John    | John   | 01/05/1990  |
    +----+---------+--------+-------------+
    Absence
    +-----------+---------+--------------+---+
    | idAbsence | Nbr Abs | date absence |Id |
    +-----------+---------+--------------+---+
    | 01        |    03   |  03/01/2021  | 1 |
    | 02        |         |              | 2 |
    +-----------+---------+--------------+---+
    Enfant
    +-----------+---------+---+
    | idEnfant  |Nbr Enf  |Id |
    +-----------+---------+---+
    | 01        |    02   | 1 |
    | 02        |    01   | 2 |
    +-----------+---------+---+
    En février, j'ai apporté quelques modifications à la base de données comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Employee
    +----+---------+--------+-------------+
    | id | nom     | prenom |date de naiss|
    +----+---------+--------+-------------+
    | 01 | Pierre  |Piere   | 12/12/1984  |
    | 02 | John    | John   | 01/05/1990  |
    +----+---------+--------+-------------+
    Absence
    +-----------+---------+--------------+---+
    | idAbsence | Nbr Abs | date absence |Id |
    +-----------+---------+--------------+---+
    | 01        |         |               | 1 |
    | 02        |    01   |   01/02/2021  | 2 |
    +-----------+---------+--------------+---+
    Enfant
    +-----------+---------+---+
    | idEnfant  |Nbr Enf  |Id |
    +-----------+---------+---+
    | 01        |    03   | 1 |
    | 02        |    02   | 2 |
    +-----------+---------+---+
    J'ai rectifié les trois tables en février, comment puis-je imprimer mon premier etat en janvier.
    En d'autres termes, comment imprimer un mois de l'année avec les modifications qui y sont apportées?

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par S.H Voir le message
    J'ai déjà demandé comment sauvegarder une base de données ,Et La réponse était qu'il est préférable de la sauvegarder dans une seule base de données, plutôt que de la diviser en plusieurs bases.
    Non, vous n'avez pas compris. La réponse était faites des backups, à l'occasion en changeant le nom du fichier à obtenir (exemples Absences2021_01.fbk,Absences2021_02.fbk,Absences2021_03.fbk ...).
    Une copie telle que vous le faisiez était dangeureuse dans un environnement multi-utilisateur (ou utilisateur prodique en alt+ctrl+suppr ou processeur disfonctionnel ou programme mal fait et gérant mal les transactions)
    Un backup d'une base est moins dangereux, même si parfois même celui-ci peut être défectueux. Mais, on ne travaille pas sur des backups, pour travailler dessus on restore ce backup dans une base temporaire.

    Si la base de données n'est enregistrée que mensuellement, je peux l'ouvrir dans n'importe quel mois avec les modifications.
    ça, oui, c'est ce que pourrait vous demander un inspecteur du travail : "la situation au mois tant de l'année tant"

    Dans le cas où la base de données n'est pas partitionnée
    Vous ne l'avez pas partitionnée, pour cela il eusse fallu suite à la sauvegarde effacer le contenu des tables (ce qui serait ) , juste sauvegardée. Les données sont donc toujours dans la base de "production", pour la "partitionner" il faudrait voir des notions de copie plus poussée dans une base de données "historique"

    Supposons que j'apporte de nombreux changements à mes tables de base de données chaque mois et que le mois suivant j'apporte de nombreux changements. Si je veux imprimer le premier etat, c'est-à-dire les modifications que j'ai effectuées le mois précédent,
    En d'autres termes, comment imprimer un mois de l'année avec les modifications qui y sont apportées?
    solution 1 - Vous travaillez alors une base de données temporaires restaurée à partir du backup voulu et travaillez dessus et non sur la base de production.
    solution 2 - En premier lieu vous créez une seconde base "historique" vide.
    (solution delphi)
    Vous pourrez alors utiliser TFDBatchmove pour copier les différentes tables de la base de production vers la table "historique" (en n'oubliant pas d'appliquer une modification de nom pour la table de destination).
    (solution firebird)
    Vous creez une procedure dans la base de données "historique" qui fera la même chose que FDBatchMove, compliqué mais pas impossible, hors forum delphi et je n'ai pas l'intention de détailler celle-ci, cela prendrai trop de temps

    Le reproche que je ferai à cette supposition c'est est-elle vraiment fondée ?
    Pour l'annecdote, j'ai collaboré, il y a des années, avec le chef de projet Volvo qui a été pour moi un vrai maitre de stage. Anglais, il me répétait sans cesse 'DON'T ASS/U/ME', faites la prononciation en replaçant les / par des silences et le jeu de mots commence à se dessiner.

    Ensuite, si votre programme d'édition change au fil des versions et que vos structures de tables évoluent vous allez devoir aussi garder un hitorique des versions du programme ce qui devient une usine à gaz assurée.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  17. #17
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vous travaillez alors une base de données temporaires restaurée à partir du backup voulu et travaillez dessus et non sur la base de production..
    Je suis vraiment distrait,
    La solution est de renommer la base de données

    desole et merci beaucoup

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2012, 19h01
  2. Comment calculer le nombre de jours entre deux dates
    Par pierrot10 dans le forum Langage
    Réponses: 8
    Dernier message: 22/06/2011, 08h38
  3. Réponses: 0
    Dernier message: 31/05/2011, 19h15
  4. Comment obtenir le nombre de jours entre deux timedatepicker
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2005, 11h59
  5. calcule du nombre de jours entre 2 dates
    Par nazimb dans le forum ASP
    Réponses: 4
    Dernier message: 28/09/2004, 15h22

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