[Résolu][Base] Insertion d'une date

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
chimere
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 05 avr. 2008 14:03

[Résolu][Base] Insertion d'une date

Message par chimere »

Bonjour

Il s'agit pour moi de disposer d'une macro qui insère ou met à jour la valeur DATE dans un champ d'une base-de-données (indéalement à réception du focus).
Des recherches m'ont rapidement fait trouver la macro ci-jointe (format .odt) que j'ai installée et contrôlée.
Mais elle ne fonctionne pas. La ligne
oFunction.NullDate = oDocument.NullDate
cause une erreur :
NullDate
n'existe pas.

Quelqu'un a-t-il utilisé cette macro avec succès et pourrait peut-être me donner un conseil ?
Merci
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par chimere le 11 oct. 2010 12:23, modifié 1 fois.
openoffice.org 3.2.1.4 sous linux ubuntu 10.04
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12838
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: InsertDate

Message par Bidouille »

Bonjour,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche. Avez-vous remarqué comment étaient les autres questions postées ?

Lisez ce fil pour savoir quelle balise utiliser : http://user.services.openoffice.org/fr/ ... html#27295

N'oubliez pas que le terme "Macro" ou "OpenOffice" ne doit pas être employé car il est implicite. Essayer de synthétiser au mieux ce que vous cherchez à faire.

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.

Merci de votre collaboration.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Insertion d'une date

Message par Dude »

Salut,
chimere a écrit :Des recherches m'ont rapidement fait trouver la macro ci-jointe
On peut savoir où tu l'as trouvé cette macro ?

Pourquoi ne pas utiliser le type de champ [TIMESTAMP] directement dans ta table ?

Cela se ferait alors automatiquement.

Plutôt que de joindre un ODT, mets ta base en ligne directement et explique mieux ce que tu cherches à faire.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Base] Insertion d'une date

Message par Churay »

Bonjour

chimere a écrit :Des recherches m'ont rapidement fait trouver la macro ci-jointe (format .odt)
Pitonyak je suppose...
que j'ai installée et contrôlée.
je suppose toujours : et donc adaptée...
Mais elle ne fonctionne pas. La ligne oFunction.NullDate = oDocument.NullDate cause une erreur : NullDate n'existe pas.
Avant la ligne citée :
oFunction = CreateUnoService("com.sun.star.sheet.FunctionAccess")

Et si la source de ton code est bien Pitonyak, je me permets d'attirer ton attention sur le fait qu'avant de l'utiliser, il effectue un test pour vérifier qu'il est bien dans un document Calc....

Code : Tout sélectionner

  REM Verify that this is a Calc document
  If ThisComponent.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
cOOordialement
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
chimere
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 05 avr. 2008 14:03

Re: [Base] Insertion d'une date

Message par chimere »

Bonjour et merci pour les conseils auxquels je tâche de répondre :

En annexe une Base-Test à laquelle j'ai intégrée la macro qui me cause soucis.
Le but recherché est le suivant :
quand je me déplace sur le champ MODIF, la réception de focus devrait déclencher la saisie automatique de TIMESTAMP dans ce champ.
J'imagine ainsi garder la trâce de la date de modification de l'enregistrement mais ça ne fonctionne pas.

J'ai trouvé le code de cette macro sous
http://fr.openoffice.org/Documentation/ ... _basic.pdf

Merci pour ton aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
openoffice.org 3.2.1.4 sous linux ubuntu 10.04
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Base] Insertion d'une date

Message par Churay »

Re
J'ai trouvé le code de cette macro sous
http://fr.openoffice.org/Documentation/ ... _basic.pdf
En commentaire, il est précisé au début du code du How-to cité :
' Une macro complète destinée à mettre la date courante dans une cellule sélectionnée
(incluant le format de nombres, sans la vérification d'erreurs)

Il n'y a effectivement pas de vérification, entre autres sur le type de document.
Or, comme dit précédemment, oFunction est défini comme CreateUnoService("com.sun.star.sheet.FunctionAccess")
Et sheet s'applique aux feuilles d'un tableur.
chimere a écrit :En annexe une Base-Test à laquelle j'ai intégrée la macro qui me cause soucis.
Euh... c'est un odt qui est est associé au lien
Ce qui nous donne un formulaire, mais pas de table...

Cela dit tu as une piste ici

Si ta table est classé secret défense, laisse un ou deux enregistrements en changeant au besoin le contenu des champs ART / PU / QTE.
Ca permettrait de répondre pile poil à ton cas précis.

cOOordialement
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
chimere
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 05 avr. 2008 14:03

Re: [Base] Insertion d'une date

Message par chimere »

Salut
la pièce joint à mon message de ce jour 15:24 est bien .odb donc Base.
C'est en tout cas ce qui s'affiche sur mon écran.
Je la remets en ligne, à tout hasard.
Si je comprends bien, la macro InitDate ne fonctionnera que sous Calc. Exact ?
Je vais suivre les autres pistes que tu m'indiques.
Mais je me permets quand la question : comment obtenir pour Base une macro équivalente ?
Merci pour tous vos conseils,
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
openoffice.org 3.2.1.4 sous linux ubuntu 10.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Insertion d'une date

Message par Dude »

Bon, je t'ai donné la piste du TIMESTAMP. Tu fais un peu de recherche et tu tombes sur ce fil :
http://user.services.openoffice.org/fr/ ... =timestamp
chimere a écrit :quand je me déplace sur le champ MODIF, la réception de focus devrait déclencher la saisie automatique de TIMESTAMP dans ce champ.
Oui il y a une petite manip à faire sur la table : http://user.services.openoffice.org/fr/ ... =timestamp

:idea:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Base] Insertion d'une date

Message par Churay »

et une piste ici
 Ajout : 
chimere a écrit :la pièce joint à mon message de ce jour 15:24 est bien .odb donc Base.
C'est en tout cas ce qui s'affiche sur mon écran.
vi vi j'ai bien récupéré un odb la première fois, mais sans la table...
Je la remets en ligne, à tout hasard.
Là c'est bon ;) mais je ne regarderai que demain, s'i n'y a pas eu de réponse entre temps
comment obtenir pour Base une macro équivalente ?
AMHA on se fout de NullDate, puisque le but de la manip c'est de récupérer Now pour mettre à jour un TimeStamp 
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
chimere
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 05 avr. 2008 14:03

Re: [Base] Insertion d'une date

Message par chimere »

Bonjour
Les indications données par DUDE sont riches d'informations.
Je vais donc être silencieux le temps, assez long, de tout comprendre et tester ce que je peux.
Entre-temps je reste très intéressé par le résultat de l'analyse de Churay.
Salut
openoffice.org 3.2.1.4 sous linux ubuntu 10.04
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Base] Insertion d'une date

Message par Pierre-Yves Samyn »

Bonjour

Modifier la structure de la table via l'instruction SQL donnée par Dude se fait via Outils > SQL comme ceci :
Capture-1.png
Nota : mettre les noms de table entre guillemets

Cela dit, cette très bonne technique ne servira que pour la saisie de nouveaux enregistrements : il s'agit d'une valeur par défaut qu'on donne au champ ; les valeurs par défaut ne se "déclenchent" que lors de l'ajout de données, pas lors de modification.

Sur ce forum, en français et spécialement dédié à base il y a ce fil avec une base exemple qui contient une macro réalisant l'opération :
http://user.services.openoffice.org/fr/ ... 04&start=0

Dans cette base exemple l'affectation de la date du jour se faisait au changement d'enregistrement et donc, uniquement si le champ date n'était pas vide.

Il suffit de mettre ce test en commentaire (cf. ci-dessous) et affecter le lancement à l'événement "réception de focus" du contrôle pour répondre au besoin.

Code : Tout sélectionner

option explicit

Sub PysDateJour
'Lancée au changement d'enregistrement
'Met la date du jour dans le contrôle Date

dim PysCtrlDate as object
dim PysDate as variant, PysDateLong as long

'Pointe vers le contrôle Date dans
'	le formulaire nommé "Standard" dans
'		la collection des formulaires dans
'			la couche "dessin"
'				du document courant
PysCtrlDate = thiscomponent.DrawPage.Forms.getByName("Standard").getByName("Date")

'La fonction Date retourne la date en texte : JJ/MM/AAAA
'On crée un tableau en découpant au "/"
PysDate = split(Date, "/")

'Conversion en type Long et mise au format AAAAMMJJ
PysDateLong = PysDate(2) & PysDate(1) & PysDate(0)

'Si la date est vide
'Affectation de cette valeur à la propriété Date du contrôle 
'if isEmpty(PysCtrlDate.Date) then
	PysCtrlDate.Date = PysDateLong

	'Validation du contrôle
	PysCtrlDate.commit
'end if
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
chimere
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 05 avr. 2008 14:03

Re: [Base] Insertion d'une date

Message par chimere »

Bonjour et merci à Pierre-Yves pour son message du 23.09.2010 14:11

La macro PysDateJour telle que présentée dans la base-test DateJour me semble répondre à ma recherche.
J'ai cependant un problème : à l'exécution pas-à-pas j'obtiens une erreur de Basic sur la ligne
PysCtrlDate = thiscomponent.DrawPage.Forms.getByName("Standard").getByName("Date")
qui me signale DrawPage - Propriété non trouvée

J'ai essayé de comprendre mais j'avoue ne pas y arriver (mon niveau en Basic est bien faible, pire encore ...)
Alors, si tu peux me donner encore un ou deux conseils pour faire avancer ?
Merci d'avance.
@Michel
openoffice.org 3.2.1.4 sous linux ubuntu 10.04
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Base] Insertion d'une date

Message par Pierre-Yves Samyn »

chimere a écrit :à l'exécution pas-à-pas j'obtiens une erreur de Basic sur la ligne
PysCtrlDate = thiscomponent.DrawPage.Forms.getByName("Standard").getByName("Date")
qui me signale DrawPage - Propriété non trouvée
Tu ne le précises pas, mais compte tenu de l'erreur indiquée, je suppose que tu as cette erreur en essayant d'appliquer cette macro à ton formulaire.

La raison la plus probable (parce que la plus courante) est que tu as créé ton formulaire via l'assistant. Dans ce cas OOo nomme le formulaire "principal" MainForm

Il faut adapter dans le code tous les noms : de formulaire, de champ, voire leur arborescence...


La procédure recherche dans :
  • thiscomponent : le document courant
  • DrawPage : la "page" de ce document dans laquelle sont "dessinés" les contrôles
  • Forms : dans cette page la collection (la liste) de tous les formulaires
  • getByName("Standard") : dans cette collection celui se nommant Standard <= à remplacer par le nom figurant :
    Capture-1.png
  • .getByName("Date") : dans ce formulaire le contrôle nommé Date <= à remplacer par le nom de ton contrôle
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
chimere
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 05 avr. 2008 14:03

Re: [SUJET ABANDONNÉ] [Base] Insertion d'une date

Message par chimere »

Bonjour
Merci pour toutes les suggestions faites et pistes données.
J'abandonne le sujet car je dois constater que la programmation d'une macro dépasse mes possibilités.
Salut !
openoffice.org 3.2.1.4 sous linux ubuntu 10.04