[Base] Calcul conditionnel sur champs 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 !
stepofwolf
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 04 mars 2018 18:24

[Base] Calcul conditionnel sur champs date

Message par stepofwolf »

Bonjour,
Je continue lentement mon formulaire Emprunt...
Cette fois-ci, je souhaite ajouter des jours à une date. La date de départ est dans le champs Date_emprunt et la date de retour calculée est dans le champs Date_retour_prévu. Le nombre de jours à ajouter dépend de la date d'emprunt. Un table contient les durées d'emprunt selon la date d'emprunt (table Durée). J'ai bien tenté qqchose, mais sans succès (pour vous faire sourire, voici mon essai avec un ajout de 15 jours pour faire simple) :

Code : Tout sélectionner

Sub autofillDateRetour(oEv as Object)
Dim oDate_emprunt as Object
	oEv.Source.Model.Date = DateAdd('d',15,"Date_emprunt")
	oEv.Source.Model.Commit   
End Sub
Merci d'avance
Pièces jointes
Bibliothèque test.odb
BdB bibliothèque école
(92.66 Kio) Téléchargé 71 fois
Dernière modification par stepofwolf le 07 mars 2018 10:51, modifié 1 fois.
OpenOffice 4.1.5
Windows10
Avatar de l’utilisateur
MrPropre
MOOdérateur
MOOdérateur
Messages : 1139
Inscription : 01 oct. 2008 18:54

Re: [Base] Macro calcul conditionnel sur champs date

Message par MrPropre »

Bonjour,

Avez-vous lu le bandeau rouge en haut de la page ?
capture.jpg
Que dit le paragraphe 8 ?

Merci de votre participation sur notre forum et de nous faciliter le travail de modération.
Nettoyez votre PC du piratage, utilisez des logiciels libres à chaque lavage.
Une seule dose de OpenOffice suffit à éliminer durablement toute trace de MS-Office.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Base] Calcul conditionnel sur champs date

Message par Dude »

As-tu lu l'aide F1 sur la fonction DateAdd ?
no_problemo.png
La syntaxe attend une variable Date et non une chaîne de caractères.
stepofwolf
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 04 mars 2018 18:24

Re: [Base] Calcul conditionnel sur champs date

Message par stepofwolf »

Bonjour,
Le principe de ma base de donnée est que la date d'emprunt est une variable. Dans l'exemple de l'aide, la date de référence est une constante : "1/31/2004". Je vois bien que ma syntaxe dans ma macro est mauvaise, c'est l'objet de ma question...
Merci pour vos lumières
Pièces jointes
Bibliothèque test.odb
BdD Bibliothèque école
(99.21 Kio) Téléchargé 65 fois
OpenOffice 4.1.5
Windows10
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Base] Calcul conditionnel sur champs date

Message par Piaf »

Bonjour
Décidément l'événement à la réception du focus sur la colonne Date emprunt ne me convient pas :lol: J'ai donc passer la procédure sur l'événement perte du focus.
Tu peux tester :

Code : Tout sélectionner

Sub autofillDateJour(oEv as Object)
	If isEmpty(oEv.Source.Model.CurrentValue) Then
      oEv.Source.Model.Date = CDateToIso(Date)
      oEv.Source.Model.Commit
   	End If
   	autofillDateRetour(oEv.Source.Model.Parent,CDateFromIso(oEv.Source.Model.Date))   	
End Sub

Sub autofillDateRetour(oGrille as Object,dteEmprunt as Date)
Dim maConnexion as Object, maRequete as Object,Resultat as Object
Dim instrSQL as String, Debut as Date, Fin as Date, Jour as Integer
	maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
	strSQL = "SELECT ""Début période"", ""Fin période"", ""Durée"" FROM ""Durée"""
	maRequete = maConnexion.createStatement()
	Resultat = maRequete.executeQuery(strSQL)
	Do While Resultat.Next
		Debut = DateValue(Resultat.Columns.getByName("Début période").String)
		Fin = DateValue(Resultat.Columns.getByName("Fin période").String)
		If dteEmprunt >= Debut And dteEmprun <= Fin Then
			Jour = Resultat.Columns.getByName("Durée").Int
			oGrille.getByName("Date_retour_prévu").Date = CDateToIso(DateAdd("d",Jour,dteEmprunt))
			oGrille.getByName("Date_retour_prévu").Commit
			Exit Do
		End If
	Loop   
End Sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
stepofwolf
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 04 mars 2018 18:24

Re: [Base] Calcul conditionnel sur champs date

Message par stepofwolf »

Bonjour et merci Piaf,

Le code tourne pas mal, mais il y a un petit bug :
Une erreur de structure de script s'est produite lors de l'exécution du script
Standard.Module3.autofillDateRetour de Basic
Message : Wrong number of parameters!


J'ai rajouté un
t
à emprunt sur la ligne If dteEmprunt >= Debut And dteEmprun <= Fin Then

A ton interrogation sur le déclenchement de la macro autofillDateEmprunt: j'espère un jour être capable de scanner un code barre (va compléter le champ code_ISBN) et aller directement dans le champs suivant : Date_Emprunt. Ainsi, l'utilisateur n'aura pas à entrer dans le champs Date_emprunt pour mettre la date. Il entrera dans ce champs uniquement pour corriger la date si la date par défaut (date du jour).

A bientôt
Pièces jointes
Bibliothèque test.odb
BdD bibliothèque école
(99.81 Kio) Téléchargé 78 fois
OpenOffice 4.1.5
Windows10
Répondre