Le 14/12/2011 18:17, Alexander Thurgood a écrit :
Le 14/12/11 16:54, Alexander Thurgood a écrit :

ALTER TABLE matable ADD COLUMN ts DATETIME NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Cette commande SQL marche pour MySQL par exemple, par contre, je n'ai
pas testé avec le moteur HSQLDB.
En fait, pour MySQL, il faut substituer DATETIME pour TIMESTAMP.

Pour HSQLDB, il n'accepte pas de contraintes sur le champ ts, donc tu ne
peux pas lui dire de faire ON UPDATE SET DEFAULT ou ON UPDATE SET
CURRENT_TIMESTAMP.

Du coup, tu peux avoir un champ ts timestamp rempli lors de la creation
d'une nouveau tuple, mais qui ne se changera pas par la suite lors de
modifications ultérieures.

La seule manière de faire cette deuxième partie est expliquée ici :
http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&t=2002

En gros :
- soit tu écris un TRIGGER en Java,
- soit tu utilises OOoBasic via un formulaire. J'aurais cru possible de
créer un listener d'évènement sur une connexion créee par macro, mais
apparemment cela ne marche pas, ou ça n'a pas été testé. Il y a
peut-être aussi un problème potentiel de synchronisation avec le
listener qui doit être asynchrone, et qui du coup ne saura pas gérer des
accès multiples concurrents à la base...mais j'avoue, ça dépasse mes
compétences.


Alex

Bonjour à tous,

Merci Alex pour ta réponse.

J'ai besoin de la date de modification sur une base HSQLDB (créée par OOo).

J'ai suivi le lien que tu donnes, j'ai téléchargé la base exemple.
J'ai installé la macro sur mon poste, sur la base exemple ça marche.
J'ai créé une base test j'ai attribué la macro à "avant enregistrement" du formulaire (comme dans l'exemple) sauf que j'ai une erreur lors de l'exécution : "erreur d'exécution Basic. Propriété ou méthode non trouvée : Action" (ligne 13)
Qu'est-ce que ça veut dire ? Dois-je, quelque part, déclarer Action ?

Voici la macro en question :

------------------------------------------------------------------------
1    Sub onUpdateRecord( oEvent as object )
2       dim oDataForm as variant
3        dim oStatement as variant
4        dim oResultSet as variant

5 if oEvent.Source.SupportsService( "com.sun.star.form.component.DataForm" ) then
6            if oEvent.Action = com.sun.star.sdbc.ChangeAction.UPDATE then
7                oDataForm = oEvent.Source
8                oStatement = oDataForm.ActiveConnection.CreateStatement
9                oStatement.EscapeProcessing = False
10 oResultSet = oStatement.executequery( "CALL CURRENT_TIMESTAMP" )
11               oResultSet.next
12 oDataForm.updateTimeStamp( oDataForm.FindColumn( "LastEdit" ), oResultSet.getTimestamp( 1 ) )
13          end if
14      end if

    End Sub
------------------------------------------------------------------------

Merci de votre aide.

Cordialement,
François
--
------------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@fr.openoffice.org
For additional commands, e-mail: sy...@fr.openoffice.org with Subject: help

Répondre à