[Résolu][Base] Enregistrer des données automatisées

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 21:22
Localisation : Laval, Pays de Loire

[Résolu][Base] Enregistrer des données automatisées

Message par Dominique Pautrel »

Bonjour,

J'aimerais insérer dans la table, sur modification d'un enregistrement, la date et l'heure de dernière modification.

L'exemple est la base sur ce petit projet :
http://user.services.openoffice.org/fr/ ... 26&t=14074

Pour ce faire j'ai assigné la macro au sous-formulaire à l'évènement
Avant l'opération d'enregistrement

Code : Tout sélectionner

Sub DateDerniereModif ' Insère la date et l'heure
' courante après modification d'une traduction.
Dim Form1 As Object, Form3 As Object, CtrlDate As object
Form1 = thisComponent.DrawPage.Forms.getByName(sFm1)
Form3 = Form1.getByName(sFm2).getByName(sFm3)
CtrlDate = Form3.getByName("txtTrdDate")
CtrlDate.text = Now
End Sub
Ensuite je m'attends à ce qu'il poursuive l'opération d'enregistrement et insère cette donnée dans la table, mais non ...

J'ai essayé Form3.Write mais il me répond : Argument len(gth) differ ...
J'imagine que la réponse tient en une ligne. Mais une fois de plus je sèche ... :?:

Merci d'avance,
Dominique
Dernière modification par Dominique Pautrel le 04 févr. 2009 15:26, modifié 1 fois.
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
reserve34
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 06 oct. 2008 07:39

Re: [Base] Enregistrer des données automatisées

Message par reserve34 »

Bonjour à tous,

Désolé Dominique, je ne viens pas à ton aide, mais rencontrant le même problème je me permets de faire un ajout à ton post.

Quoi que, peut être trouveras tu des éléments qui vont te permettre d'avancer.

Avec le bouton "Marche" de mon formulaire de menu "1_Menu_Marche" j'appelle mon formulaire "Form_saisie_Marche".

Dans ce formulaire je voudrais cumuler mes montants des lignes dans le lot correspondant. Je mets bien à jour mon champ "Montant HT" dans le sous formulaire "Lot", mais je n'arrive pas à répercuter la mise à jour dans la table.

Ma macro rattachée au sous formulaire "Form_saisie_Marche" est déclenchée après le mise à jour du champ "Montant HT" du sous formulaire "Lignes", et se trouve dans le module "Mar_s_calculs".

Ci joint copie de la base.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par reserve34 le 02 févr. 2009 08:49, modifié 1 fois.
OpenOffice 2.4 sous Windows XP SP2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Enregistrer des données automatisées

Message par Dude »

Salut,
Dominique Pautrel a écrit :J'aimerais insérer dans la table, sur modification d'un enregistrement, la date et l'heure de dernière modification.
Pourquoi ne pas utiliser le type de champ [TIMESTAMP] directement dans ta table ?

Cela se ferait alors automatiquement.

:idea:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 21:22
Localisation : Laval, Pays de Loire

Re: [Base] Enregistrer des données automatisées

Message par Dominique Pautrel »

Bonjour,
reserve34 a écrit :peut être trouveras tu des éléments qui vont te permettre d'avancer.
J'ai bon espoir. Ou il me manque une commande, ou ...
Dude a écrit :Pourquoi ne pas utiliser le type de champ [TIMESTAMP] directement dans ta table ?
C'est bien un type de champ Date/Heure[TIMESTAMP] que j'ai assigné à tblTrad.trdDate. Et dans les propriétés du champ, Exemple de format affiche 01/01/1900 00:00:00

La première fois que j'ai déposé le contrôle sur le formulaire (mais je ne sais plus comment j'avais fait précisement :oops: ) j'ai obtenu un groupe de deux champs et deux étiquettes. Depuis et parce que je n'y arrivais pas, j'ai refait un contrôle "Zone de texte" - en vert -, puis supprimé ce fameux groupe de 4 contrôles, puis remis un "Champ de date" - en jaune - et un "Champ horaire" - en rouge - (Je nettoierai quand j'aurais compris.)
Dude a écrit :Cela se ferait alors automatiquement.
Je suis content de te "l'entendre dire", mais alors moi j'ai un problème entre la chaise et le clavier. J'essaie des "trucs" divers, mais ne vois pas la bonne façon de faire :tesfou: En même temps c'est encore flou pour moi la différence entre le champ TIMESTAMP et les champs DATE et TIME. La touche F1 (Base ou Basic) ne m'apporte aucun résultat sur Timestamp ...

Pour la date de création de l'enregistrement ce serait simple, une valeur par défaut et voilà.
Là, j'aimerais que ça fonctionne de façon transparente pour l'utilisateur. Grosso-modo, quand l'enregistrement est modifié (peut-être le formulaire possède une propriété "dirty" ?), le champ TIMESTAMP = Now, puis l'enregistrement est stocké.

Viens de faire une recherche sur TIMESTAMP, j'ai exécuté la requête citée ici : http://user.services.openoffice.org/fr/ ... 751#p52751 , ce qui me donne :

Code : Tout sélectionner

ALTER TABLE "tblTrad" ALTER COLUMN "trdDate" SET DEFAULT CURRENT_TIMESTAMP
Et avec CURRENT_TIMESTAMP, cela fonctionne pour un enregistrement ou le champ est vierge. :) Mais s'il y a déjà quelque chose, il ne met pas à jour ...

Désolé pour la tartine et merci de votre aide à un mal-comprenant :arrow: ,
(Merci également à M. Pierre Desproges)
J'ai mis à jour sur le fil : http://user.services.openoffice.org/fr/ ... 498#p78498
Cordialement,
Dominique.
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Enregistrer des données automatisées

Message par Dude »

Dominique Pautrel a écrit :Mais s'il y a déjà quelque chose, il ne met pas à jour ...
Bon, je viens de regarder rapidement et effectivement, c'est la misère pour mettre un champ TIMESTAMP à jour.

Le seul moyen que j'ai trouvé est de faire une requête UPDATE.

:?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 21:22
Localisation : Laval, Pays de Loire

Re: [Base] Enregistrer des données automatisées

Message par Dominique Pautrel »

Dude a écrit :Le seul moyen que j'ai trouvé est de faire une requête UPDATE.
Dans ce cas, il faut que je code la chaine SQL avec le "brouillard" du formulaire (sous forme de variables) :?:

Je m'attendais plutôt avoir à "enregistrer" le RowSet sur lequel le sous-formulaire est fondé pour l'enregistrement courant :?:
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Base] Enregistrer des données automatisées

Message par Pierre-Yves Samyn »

Bonjour

Désolé je n'ai pu que jeter un oeil mais il me semble qu'il suffit de rajouter le commit (mais pour tester il faut bien sûr saisir les champs obligatoires (trdRefUser) sinon rien n'est enregistré...

Code : Tout sélectionner

Sub DateDerniereModif ' Insère la date et l'heure courante après modification d'une traduction.

Dim Form1 As Object, Form3 As Object, CtrlDate As object
Form1 = thisComponent.DrawPage.Forms.getByName(sFm1)
Form3 = Form1.getByName(sFm2).getByName(sFm3)
CtrlDate = Form3.getByName("txtTrdDate")
CtrlDate.text = CDate(Now)
CtrlDate.commit

End Sub ' ensuite comment enregistrer l'enregistrement ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 21:22
Localisation : Laval, Pays de Loire

Re: [Résolu][Base] Enregistrer des données automatisées

Message par Dominique Pautrel »

Bonjour,

Merci beaucoup à vous deux. Deux canards d'un coup de fusil ! :mrgreen:

Date de création d'un enregistrement : http://user.services.openoffice.org/fr/ ... 751#p52751
Merci Dude, effectivement, ALTER TABLE ... SET DEFAULT CURRENT_TIMESTAMP permet d'entrer la valeur par défaut dans un champ.

Date de modification d'un enregistrement :
Oui, PYS, tu as (encore :lol: ) raison : La solution est :

Code : Tout sélectionner

MonContrôle.Commit
(D'ailleurs, j'ai bien envie de renommer ce fil "Gérer Dates de création / modification")
Pierre-Yves Samyn a écrit :mais pour tester il faut bien sûr saisir les champs obligatoires (trdRefUser) sinon rien n'est enregistré...
Ou je trouve la solution assez rapidement, ou ce sera bientôt l'objet d'un autre fil :aie:
Mais il m'est d'avis qu'avec ce .commit, je vais pouvoir commettre quelques essais ... avant de défricher ma future question ... :P

Merci à vous deux ! :D
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
Avatar de l’utilisateur
LoloSon
Fraîchement OOthentifié
Messages : 5
Inscription : 09 nov. 2017 01:12

Re: [Résolu][Base] Enregistrer des données automatisées

Message par LoloSon »

... pour le "rapidement" (8 ans plus tard ^^) .. c'est rapé !
..En revanche ça pourra en aider d'autres (date et heure de dernière modif) :
Tout est écrit là : https://forum.openoffice.org/en/forum/v ... =13&t=2002

Super tutoriel (en anglais, mais pas trop compliqué).
La macro est en complément du code déjà cité plus haut : ALTER TABLE ... SET DEFAULT CURRENT_TIMESTAMP

Je me permets de recopier bien humblement le code de la macro fourni par DrewJensen (Thanks' ! :super: )

Code : Tout sélectionner

    Sub onUpdateRecord( oEvent as object )
        dim oDataForm as variant
        dim oStatement as variant
        dim oResultSet as variant

        if oEvent.Source.SupportsService( "com.sun.star.form.component.DataForm" ) then
            if oEvent.Action = com.sun.star.sdbc.ChangeAction.UPDATE then
                oDataForm = oEvent.Source
                oStatement = oDataForm.ActiveConnection.CreateStatement
                oStatement.EscapeProcessing = False
                oResultSet = oStatement.executequery( "CALL CURRENT_TIMESTAMP" )
                oResultSet.next
                oDataForm.updateTimeStamp( oDataForm.FindColumn( "LastEdit" ), oResultSet.getTimestamp( 1 ) )
            end if
        end if

    End Sub
Il faut éventuellement juste remplacer "LastEdit" par le nom du champ timestamp.
On appelle la macro directement au niveau du formulaire (MainForm => propriétés => Evènements => Avant l'action d'enregistrement)

:o Et le tour est joué ! :bravo:
(et big-merci à DrewJensen !)
biz++
LibreOffice 5.4.5.1 sous Windows 7