[Résolu][Base] Intercepter l'erreur "Violation d'intégrité"

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 !
jerome bourgeois
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 08 févr. 2009 00:08
Localisation : Lyon

[Résolu][Base] Intercepter l'erreur "Violation d'intégrité"

Message par jerome bourgeois »

Bonjour,

Ce projet est en fait une maquette dans le cadre d'une migration OpenOffice pour remplacer des "usines à gaz" excel (d'après les utilisateurs)... qui géraient le suivi des heures avec des tableaux croisés dynamiques.

C'est vrai que le développement a été influencé par l'existant comme vous pourrez le voir.

J'ai réutilisé pour ce programme mes macros de la base Comptoir http://user.services.openoffice.org/fr/ ... 26&t=18473.

Sinon, tout fonctionne pratiquement à base de requêtes dynamiques...
On aurait pu fonctionner différemment à base de sous-formulaires et dans les macros avec des resultsets notamment pour éviter les sous-requêtes... Mais bon...

Seul point noir... allez, gris...
Je n'ai pas réussi à intercepter le message d'erreur du datagrid en cas de violation de l'intégrité référentielle :
suiviHeures.png
J'aurais préféré le remplacer par une msgbox plus sympa style " Ce participant est déjà dans ce projet à la date choisie !" et pourquoi pas même terminer en donnant le focus à l'enregistrement en question... Je ne sais pas si c'est possible, je n'ai pas creusé la question mais sûrement...

Si quelqu'un a la solution? je suis preneur évidemment !

Cordialement,

Jérôme

P.S. Nécessite le sun report builder...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par jerome bourgeois le 11 mai 2010 22:08, modifié 9 fois.
Libreoffice 7 Linux
Vous trouverez en annonce la dernière version du Micro Facturier(anciennement AE-Facturier) .
http://xlinfo.fr
Consultant Linux et Logiciels Libres
Intégrateur Open Source
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Base]Gestion suivi des Heures

Message par DLE »

Bonjour,

Au niveau du formulaire "Standard" j'ai associé la macro "ErreurSurvenue" à l'événement de même nom.

En espérant t'avoir aidé.

A+
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
jerome bourgeois
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 08 févr. 2009 00:08
Localisation : Lyon

Re: [Base]Gestion suivi des Heures

Message par jerome bourgeois »

Ben, j'suis content de t'avoir rencontré aujourd'hui !!!! ;-)

Incroyable, j'avais essayé d'intercepter l'erreur au niveau du datagrid, au niveau de la zone de liste de la colonne et pas pensé au formulaire !!!
Génial... Je me penche sur le focus... dès que j'ai un peu de temps !

A bientôt ;-) et encore meci !
Dernière modification par jerome bourgeois le 02 févr. 2010 21:40, modifié 1 fois.
Libreoffice 7 Linux
Vous trouverez en annonce la dernière version du Micro Facturier(anciennement AE-Facturier) .
http://xlinfo.fr
Consultant Linux et Logiciels Libres
Intégrateur Open Source
jerome bourgeois
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 08 févr. 2009 00:08
Localisation : Lyon

Re: [Base]Gestion suivi des Heures

Message par jerome bourgeois »

@DLE : Pour ce qui est du message en double, ce qu' en dit en effet xray c'est que deux erreurs sont émises, une par le controller et une par le component... Enfin de ce que j'en ai compris ;-) Faut pas m'en demander plus !

Code : Tout sélectionner

Sub ErreurSurvenue(evt as Object)

	Dim Msg As String
	
   REM le message apparaît deux fois !?
'	xray evt.source.getSupportedServiceNames()
	REM On n'intercepte que celle émise par le component....
	if instr(1,evt.Source.Dbg_SupportedInterfaces,"com.sun.star.comp.forms.ODatabaseForm") Then
	REM On aurait pu faire l'inverse et n'intercepter que elle émise par le controller
'	if instr(1,evt.Source.Dbg_SupportedInterfaces,"com.sun.star.form.FmXFormController") Then
		if instr(1,evt.Reason.NextException.message,"Duplicate") then
 			Msg = Msg & chr(13) & "l'enregistrement existe déjà!" 
		else
			Msg = Msg & chr(13) & evt.Reason.NextException.message
		end if
		msgBox Msg
	end if

End Sub
@ceux que ça intéresse : Sinon, on peut se servir des variables static (révision)

Code : Tout sélectionner

Sub ErreurSurvenue(evt as Object)

   REM Emploi d'une variable statique pour empêcher l'erreur de s'afficher deux fois sans que l'on en comprenne la raison

	Dim Msg As String
	Static i As Integer

	if i=0 Then
		if instr(1,evt.Reason.NextException.message,"Duplicate") then
 			Msg = Msg & chr(13) & "l'enregistrement existe déjà!" 
		else
			Msg = Msg & chr(13) & evt.Reason.NextException.message
		end if
		msgBox Msg
		i = i + 1
	else
		i = i - 1
	end if

End Sub
C'est tout pour aujourd'hui !

La version sur le premier post de ce fil est à jour, mais la correction par DLE est tout aussi valable ! ;-)
Encore merci à lui...
Libreoffice 7 Linux
Vous trouverez en annonce la dernière version du Micro Facturier(anciennement AE-Facturier) .
http://xlinfo.fr
Consultant Linux et Logiciels Libres
Intégrateur Open Source