[Résolu] dernière modification dans une table

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
henriG
NOOuvel adepte
NOOuvel adepte
Messages : 18
Inscription : 19 nov. 2020 22:14

[Résolu] dernière modification dans une table

Message par henriG »

Bonjour,
Existerait il un champ caché où serait enregistré la date de la dernière modification de la ligne ?
Sinon, il faudra que je le crée.
Cordialement, merci
Dernière modification par micmac le 05 avr. 2021 23:44, modifié 3 fois.
Raison : Ajout de la coche verte
Libreoffice 6.4.7.2 sous Debian 10 Buster
LibreOffice 7.0.4.2 sous Linux Mint 20 Ulyana
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: dernière modification dans une table

Message par Dude »

Salut,

Caché où ? Tu parles de champ (table) ou de contrôle (formulaire) ?
Pour horodater une table, il suffit de déclarer la colonne en type TIMESTAMP :
Image
henriG
NOOuvel adepte
NOOuvel adepte
Messages : 18
Inscription : 19 nov. 2020 22:14

Re: dernière modification dans une table

Message par henriG »

Merci, c'est bien pour une table.
Ok pour le format TIMESTAMP, que je peux remplir à la saisie d'un formulaire qui modifie la table (fonction NOW() peut être).
Y a t'il une astuce pour mettre à jour ce champ lors d'une modif directement dans la table ?

Ca a l'air possible pour une table externe, mais on est encore sur une table intégrée :
https://alvinalexander.com/blog/post/jdbc/specify-default-date-time-with-hsqldb-timestamp/
Libreoffice 6.4.7.2 sous Debian 10 Buster
LibreOffice 7.0.4.2 sous Linux Mint 20 Ulyana
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: dernière modification dans une table

Message par Dude »

henriG a écrit :Y a t'il une astuce pour mettre à jour ce champ lors d'une modif directement dans la table ?
As-tu recherché dans le forum ? Il y a des exemples de requête.
Les instructions divergent d'un SGBD à l'autre.
henriG a écrit :Ca a l'air possible pour une table externe, mais on est encore sur une table intégrée
Peu importe, cette notion est du ressort du SGBD.
henriG
NOOuvel adepte
NOOuvel adepte
Messages : 18
Inscription : 19 nov. 2020 22:14

Re: dernière modification dans une table

Message par henriG »

Ok, j'ai cherché ... et trouvé la requète à lancer par Outils > SQL :
ALTER TABLE "Adhérents" ALTER COLUMN "datemaj" SET DEFAULT CURRENT_TIMESTAMP
qui définit une valeur par défaut égale à la date -heure de la création (ou CURRENT_DATE si on ne désire que la date).

Ca fonctionne pour l'ajout d'enregistrement, par contre la modification, je pense être obligé de passer par une Macro, et de faire les modifications via un formulaire.
Merci !
Libreoffice 6.4.7.2 sous Debian 10 Buster
LibreOffice 7.0.4.2 sous Linux Mint 20 Ulyana
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: dernière modification dans une table

Message par Dude »

henriG a écrit :Ca fonctionne pour l'ajout d'enregistrement, par contre la modification
Pourquoi modifier ? Ce genre de champ est fait pour de la journalisation.
En clair, tu horodates au fur-et-à-mesure dans une table dédiée et donc, c'est un ajout à chaque fois.
henriG
NOOuvel adepte
NOOuvel adepte
Messages : 18
Inscription : 19 nov. 2020 22:14

Re: dernière modification dans une table

Message par henriG »

Ok pour l'utilisation d'une table dédiée à l'horodatage.
Mais comment détecter la modification d'une table si elle n'est pas faite dans un formulaire ?
Libreoffice 6.4.7.2 sous Debian 10 Buster
LibreOffice 7.0.4.2 sous Linux Mint 20 Ulyana
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: dernière modification dans une table

Message par jeanmi2403 »

Bonsoir,
henriG a écrit :Ok pour l'utilisation d'une table dédiée à l'horodatage.
Une table ou un champ ?
Si le but est de savoir quand un enregistrement a été modifié (désigné par "ligne" dans un post précédent), il faut effectivement un champ horodatage qui sera mis à jour par une macro.
Cette macro sera lancée par l'événement "après l'action d'enregistrement". Elle exécutera une instruction SQL du genre de celle citée ci-dessus.
Pour ne pas travailler dans le vide, il serait bon de nous donner un embryon de base posant le problème, avec ce qui existe et une description claire de ce qui reste à faire.
Cordialement
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
henriG
NOOuvel adepte
NOOuvel adepte
Messages : 18
Inscription : 19 nov. 2020 22:14

Re: dernière modification dans une table

Message par henriG »

Merci !
Je précise : il s'agit de détecter la modification d'un champ dans un enregistrement.
Losque la modification se fait dans un formulaire, on sait lancer une macro qui actualise le champ horodatage (par l'évènementr avant l'action d'enregistrement).

Mais lorsque le champ est modifié dans la table, on ne sait pas actualiser l'horodatage ...

Il s'agit de la gestion des adhérents d'une association. On imprime des états avec les coordonées des adhérents ou les sorties effectuées, et on aimerait connaitre les modifications depuis le dernier état imprimé.
Cordialement
Libreoffice 6.4.7.2 sous Debian 10 Buster
LibreOffice 7.0.4.2 sous Linux Mint 20 Ulyana
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: dernière modification dans une table

Message par Dude »

Si ton SGBD le supporte, il faut passer par la mécanique du TRIGGER.
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: dernière modification dans une table

Message par jeanmi2403 »

Bonjour,
henriG a écrit :Mais lorsque le champ est modifié dans la table, on ne sait pas actualiser l'horodatage ...
Je ne vois pas trop l'intérêt de modifier les données directement dans la table, surtout dans un modèle relationnel où les conséquences peuvent être lourdes en terme d'intégrité.
Le mieux, à mon avis serait un formulaire avec un contrôle table, qui offre les mêmes services que l'éditeur de contenu de table, avec l'accès aux événements du formulaire.
@Dude ; Trigger quésaco? idem événements ?
Bonne journée,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
henriG
NOOuvel adepte
NOOuvel adepte
Messages : 18
Inscription : 19 nov. 2020 22:14

Re: dernière modification dans une table

Message par henriG »

C'est vrai que modifier dans la table est une facilité pendant le développement et la mise au point, mais qu'en fonctionnement l'utilisation d'un formulaire, avec un contrôle table est plus sure et facile à mettre en place !

Je ne connaissais pas les Triggers, mais ça semble répondre au problème. Par contre, c'est très puissant et un peu complexe, et je vais me contenter du formulaire avec un contrôle table. Mais c'est bon à savoir pour des actions plus complexes.

A TRIGGER is a child schema object that always belongs to a TABLE or a VIEW.
Each time a DELETE, UPDATE or INSERT is performed on the table or view, additional actions are taken by the triggers that have been declared on the table or view.
Triggers are discussed in detail in Triggers chapter.
There is a separate name space for triggers.

Le chapitre sur les triggers : http://hsqldb.org/doc/2.0/guide/triggers-chapt.html

Merci à Dude et à JeanMi pour votre contribution !
Libreoffice 6.4.7.2 sous Debian 10 Buster
LibreOffice 7.0.4.2 sous Linux Mint 20 Ulyana
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: dernière modification dans une table

Message par jeanmi2403 »

Bonsoir,
henriG a écrit :Je ne connaissais pas les Triggers, mais ça semble répondre au problème. Par contre, c'est très puissant et un peu complexe, et je vais me contenter du formulaire avec un contrôle table.
Oui, mais ça, c'est un accès direct dans HSQLDB, pas sûr que ça fonctionne avec la version embarquée.
De plus, il semble bien qu'il faille programmer en JAVA. Ça fait une marche supplémentaire à monter....Pas sûr que le jeu en vaille la chandelle !
Cordialement,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Verrouillé