[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 !

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

Messagepar jerome bourgeois » 02 Fév 2010 11:38

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/forum/viewtopic.php?f=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...
Pièces jointes
suiviHeures.odb
Maj du 12/05/2010
Standalone (OOOBase invisible)
(104.24 Kio) Téléchargé 309 fois
Dernière édition par jerome bourgeois le 11 Mai 2010 23:08, édité 9 fois.
Libreoffice 5 Linux (Debian, CentOS, Ubuntu, Fedora)
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
 
Message(s) : 153
Inscrit le : 08 Fév 2009 01:08
Localisation : Lyon

Re: [Base]Gestion suivi des Heures

Messagepar DLE » 02 Fév 2010 16:58

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+
AOO 4.1.8 et Libreoffice 6.2.8.2 sous Windows 10 64 bits, FireFox, Thunderbird, ORB 1.2.1
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
 
Message(s) : 1297
Inscrit le : 30 Déc 2007 19:56
Localisation : Lille

Re: [Base]Gestion suivi des Heures

Messagepar jerome bourgeois » 02 Fév 2010 18:25

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 édition par jerome bourgeois le 02 Fév 2010 22:40, édité 1 fois.
Libreoffice 5 Linux (Debian, CentOS, Ubuntu, Fedora)
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
 
Message(s) : 153
Inscrit le : 08 Fév 2009 01:08
Localisation : Lyon

Re: [Base]Gestion suivi des Heures

Messagepar jerome bourgeois » 02 Fév 2010 22:24

@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   AgrandirRéduire
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   AgrandirRéduire
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 5 Linux (Debian, CentOS, Ubuntu, Fedora)
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
 
Message(s) : 153
Inscrit le : 08 Fév 2009 01:08
Localisation : Lyon


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)