[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 &eacute;crit&nbsp;:
    <blockquote cite="mid:[email protected]" type="cite">
      <pre wrap="">Le 14/12/11 16:54, Alexander Thurgood a &eacute;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&eacute; 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&eacute;rieures.

La seule mani&egrave;re de faire cette deuxi&egrave;me partie est expliqu&eacute;e ici :
<a class="moz-txt-link-freetext" href="http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&amp;t=2002">http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&amp;t=2002</a>

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


Alex

</pre>
    </blockquote>
    Bonjour &agrave; tous,<br>
    <br>
    Merci Alex pour ta r&eacute;ponse.<br>
    <br>
    J'ai besoin de la date de modification sur une base HSQLDB (cr&eacute;&eacute;e
    par OOo). <br>
    <br>
    J'ai suivi le lien que tu donnes, j'ai t&eacute;l&eacute;charg&eacute; la base exemple. <br>
    J'ai install&eacute; la macro sur mon poste, sur la base exemple &ccedil;a marche.<br>
    J'ai cr&eacute;&eacute; une base test j'ai attribu&eacute; la macro &agrave; "avant
    enregistrement" du formulaire (comme dans l'exemple) sauf que j'ai
    une erreur lors de l'ex&eacute;cution : "erreur d'ex&eacute;cution Basic.
    Propri&eacute;t&eacute; ou m&eacute;thode non trouv&eacute;e : Action" (ligne 13)<br>
    Qu'est-ce que &ccedil;a veut dire ? Dois-je, quelque part, d&eacute;clarer Action
    ?<br>
    <br>
    Voici la macro en question : <br>
    <br>
    <hr size="2" width="100%">1&nbsp;&nbsp;&nbsp; Sub onUpdateRecord( oEvent as object
    )<br>
    2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dim oDataForm as variant<br>
    3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dim oStatement as variant<br>
    4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dim oResultSet as variant<br>
    <br>
    5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if oEvent.Source.SupportsService(
    "com.sun.star.form.component.DataForm" ) then<br>
    6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if oEvent.Action =
    com.sun.star.sdbc.ChangeAction.UPDATE then<br>
    7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oDataForm = oEvent.Source<br>
    8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oStatement =
    oDataForm.ActiveConnection.CreateStatement<br>
    9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oStatement.EscapeProcessing = False<br>
    10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oResultSet = oStatement.executequery( "CALL
    CURRENT_TIMESTAMP" )<br>
    11&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oResultSet.next<br>
    12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oDataForm.updateTimeStamp( oDataForm.FindColumn(
    "LastEdit" ), oResultSet.getTimestamp( 1 ) )<br>
    13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br>
    14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br>
    <br>
    &nbsp;&nbsp;&nbsp; End Sub<br>
    <hr size="2" width="100%"><br>
    Merci de votre aide.<br>
    <br>
    Cordialement,<br>
    Fran&ccedil;ois<br>
  </body>
</html>

--------------080206090704050209060802--