Bonjour,
Ma contribution à la question, avec un certain retard, mais le sujet est complexe.

D'une part le "plus un an" fonctionne correctement entre deux contrôles Date d'un formulaire, sans nécessiter de correction:

Sub Plus1An
dim oDocument as object, oForm as object
dim vDate as date, vDateFin as date

oDocument = ThisComponent
oForm = oDocument.DrawPage.Forms.Standard

vDate= cdatefromiso(oForm.DateDebut.date)
vDateFin =dateserial (year (vdate)+1, month (vdate), day (vdate))
oForm.DateFin.date =  cdatetoiso(vDateFin)
End Sub

La routine donne un résultat intelligent : 28/02/2004 + 1 an donne 01/03/2005. Noter qu'ici le type date des deux variables locales est un type interne à Basic.

D'autre part, la mise à jour d'un champ Date dans une base dBase.
Quand on récupère ce champ avec un .getDate (ou .Date) on obtient un objet com.sun.star.util.date. Aucun rapport avec le type date de Basic.
Cet objet est une structure composée des éléments:
.Day   (exemple : 18)
.Month   (exemple : 12)
.Year    (exemple : 1975)
Il faut donc que tu remplisses une telle structure pour mettre à jour ton champ dBase, en utilisant un updateDate. Quelque chose comme:

dim nouvDate as new com.sun.star.util.date
nouvDate.Day = day(vDateFin)
nouvDate.Month = month(vDateFin)
nouvDate.Year = year(vDateFin)
oForm.updateDate(oForm.findColumn ("DATEFIN"),nouvDate)

Alors, pourquoi cela marchait presque ? Parce que lorsqu'on lit ou met à jour un champ de la base en employant un autre type que celui prévu (par exemple .updateDouble) l'API effectue des conversions en espérant que ça marche. Et ici ça marche mal.
   Bernard


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à