5 messages in org.openoffice.fr.progRe: [prog] Calcul sur les dates (suite)
FromSent OnAttachments
Bernard MarcellyJun 29, 2005 5:39 am 
GeGeJun 29, 2005 12:16 pm 
GeGeJun 29, 2005 12:26 pm 
Bernard MarcellyJun 29, 2005 1:05 pm 
GeGeJun 29, 2005 11:35 pm 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] Calcul sur les dates (suite)Actions...
From:GeGe (ggn@free.fr)
Date:Jun 29, 2005 12:16:06 pm
List:org.openoffice.fr.prog

Ça ne marche pas avec: dim nouvDate as new com.sun.star.util.date n'est pas accepté avec l'erreur: "Impossible d'accéder à l'objet Référence d'ogjet incorrecte"

En fait, il faut mettre date avec une majuscule: dim nouvDate as new com.sun.star.util.Date

On arrive à:

dim nouvDate as new com.sun.star.util.Date dim vDate as date dim vDateFin as date dim vYear as double, vMonth as double, vDay as double if oForm.DateDebut.date>0 then vDate= cdatefromiso(oForm.DateDebut.date) vDateFin =dateserial (year (vDate)+1, month (vDate), day (vDate)) nouvDate.Day = day(vDateFin) nouvDate.Month = month(vDateFin) nouvDate.Year = year(vDateFin) oForm.updateDate(oForm.findColumn ("DATEFIN"),nouvDate)

et ça marche Où trouver les syntaxes de programmation? Je n'aurais jamais pensé à "dim nouvDate as new com.sun.star.util.Date" tout seul! On est obligé de passer par les nouvDate.Day ... Month ... Year? Y a pas plus simple?

En tout cas: Merrrrrrrci

[ANTISPAM: Pour me répondre, pensez à retirer le tiret avant l'arobase (-@) dans l'adresse d'envoi] [Ecoutez http://www.radioparadise.com - http://www.bide-et-musique.com]

----- Message d'origine ----- De : "Bernard Marcelly" <marc@club-internet.fr> À : "Liste Prog-fr" <pr@fr.openoffice.org> Envoyé : mercredi 29 juin 2005 14:39 Objet : [prog] Calcul sur les dates (suite)

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