[fr-users] Re: Base : Date de dernière modif ication.
Moi <[email protected]> Mon, 19 Dec 2011 01:15:06 +0100
| Newsgroups | gmane.comp.openoffice.general.french |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--------------080206090704050209060802
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
Le 14/12/2011 18:17, Alexander Thurgood a =E9crit :
> Le 14/12/11 16:54, Alexander Thurgood a =E9crit :
>
>> 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=E9 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 n=
e
> 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=E9rieures.
>
> La seule mani=E8re de faire cette deuxi=E8me partie est expliqu=E9e ici=
:
> http://user.services.openoffice.org/en/forum/viewtopic.php?f=3D13&t=3D2=
002
>
> En gros :
> - soit tu =E9cris un TRIGGER en Java,
> - soit tu utilises OOoBasic via un formulaire. J'aurais cru possible de
> cr=E9er un listener d'=E9v=E8nement sur une connexion cr=E9ee par macro=
, mais
> apparemment cela ne marche pas, ou =E7a n'a pas =E9t=E9 test=E9. Il y a
> peut-=EAtre aussi un probl=E8me potentiel de synchronisation avec le
> listener qui doit =EAtre asynchrone, et qui du coup ne saura pas g=E9re=
r des
> acc=E8s multiples concurrents =E0 la base...mais j'avoue, =E7a d=E9pass=
e mes
> comp=E9tences.
>
>
> Alex
>
Bonjour =E0 tous,
Merci Alex pour ta r=E9ponse.
J'ai besoin de la date de modification sur une base HSQLDB (cr=E9=E9e par=
OOo).
J'ai suivi le lien que tu donnes, j'ai t=E9l=E9charg=E9 la base exemple.
J'ai install=E9 la macro sur mon poste, sur la base exemple =E7a marche.
J'ai cr=E9=E9 une base test j'ai attribu=E9 la macro =E0 "avant enregistr=
ement"=20
du formulaire (comme dans l'exemple) sauf que j'ai une erreur lors de=20
l'ex=E9cution : "erreur d'ex=E9cution Basic. Propri=E9t=E9 ou m=E9thode n=
on=20
trouv=E9e : Action" (ligne 13)
Qu'est-ce que =E7a veut dire ? Dois-je, quelque part, d=E9clarer 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(=20
"com.sun.star.form.component.DataForm" ) then
6 if oEvent.Action =3D com.sun.star.sdbc.ChangeAction.UPDATE t=
hen
7 oDataForm =3D oEvent.Source
8 oStatement =3D oDataForm.ActiveConnection.CreateStatemen=
t
9 oStatement.EscapeProcessing =3D False
10 oResultSet =3D oStatement.executequery( "CALL=20
CURRENT_TIMESTAMP" )
11 oResultSet.next
12 oDataForm.updateTimeStamp( oDataForm.FindColumn(=20
"LastEdit" ), oResultSet.getTimestamp( 1 ) )
13 end if
14 end if
End Sub
------------------------------------------------------------------------
Merci de votre aide.
Cordialement,
Fran=E7ois
--
------------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected] with Subject: he=
lp
--------------080206090704050209060802
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#990000" bgcolor="#ffffcc">
Le 14/12/2011 18:17, Alexander Thurgood a écrit :
<blockquote cite="mid:[email protected]" type="cite">
<pre wrap="">Le 14/12/11 16:54, Alexander Thurgood a écrit :
</pre>
<blockquote type="cite">
<pre wrap="">
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.
</pre>
</blockquote>
<pre wrap="">
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 :
<a class="moz-txt-link-freetext" href="http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&t=2002">http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&t=2002</a>
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
</pre>
</blockquote>
Bonjour à tous,<br>
<br>
Merci Alex pour ta réponse.<br>
<br>
J'ai besoin de la date de modification sur une base HSQLDB (créée
par OOo). <br>
<br>
J'ai suivi le lien que tu donnes, j'ai téléchargé la base exemple. <br>
J'ai installé la macro sur mon poste, sur la base exemple ça marche.<br>
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)<br>
Qu'est-ce que ça veut dire ? Dois-je, quelque part, déclarer Action
?<br>
<br>
Voici la macro en question : <br>
<br>
<hr size="2" width="100%">1 Sub onUpdateRecord( oEvent as object
)<br>
2 dim oDataForm as variant<br>
3 dim oStatement as variant<br>
4 dim oResultSet as variant<br>
<br>
5 if oEvent.Source.SupportsService(
"com.sun.star.form.component.DataForm" ) then<br>
6 if oEvent.Action =
com.sun.star.sdbc.ChangeAction.UPDATE then<br>
7 oDataForm = oEvent.Source<br>
8 oStatement =
oDataForm.ActiveConnection.CreateStatement<br>
9 oStatement.EscapeProcessing = False<br>
10 oResultSet = oStatement.executequery( "CALL
CURRENT_TIMESTAMP" )<br>
11 oResultSet.next<br>
12 oDataForm.updateTimeStamp( oDataForm.FindColumn(
"LastEdit" ), oResultSet.getTimestamp( 1 ) )<br>
13 end if<br>
14 end if<br>
<br>
End Sub<br>
<hr size="2" width="100%"><br>
Merci de votre aide.<br>
<br>
Cordialement,<br>
François<br>
</body>
</html>
--------------080206090704050209060802--