Bonjour,

Je débute avec Interbase et j'ai encore du mal avec les triggers et procédures stockées qui me paraissent pourtant bien intéressants, certains traitements ayant effectivement mieux leur place sur le serveur qu'au sein des applis. Existe-t-il un bon tuto sur le sujet ? j'ai trouvé pas mal de choses, mais rien de vraiment complet, notemment au niveau du langage à utiliser et de sa syntaxe...

J'ai un cas concret à mettre en oeuvre, et si quelqu'un pouvait m'aider, ce serait sympa. Voilà : j'ai une table (moins d'une centaine d'enregistrements) laquelle doit être ordonnée selon un critère défini par l'utilisateur et que ce dernier doit pouvoir changer à tout instant. J'ai donc créé pour cette table un champ "NumeroDordre", qui définit un index sur ma table. C'est à l'utilisateur de donner les numéros d'ordre de façon à obtenir le classement qu'il souhaite. Jusque là, rien que de très simple et logique.

Je voudrais maintenant que dès qu'un utilisateur modifie le numéro d'ordre d'un enregistrement, au moment de la validation de ses modifications, toute la table soit balayée pour remettre en ordre (c'est le cas de le dire !) les numéros d'ordre. Pour être clair, disons que je voudrais obtenir dans ma table ce qui est réalisé sous Delphi avec les propriétés "Tab Order" des composants d'une fiche : dès qu'on en change un, tous sont reclassés.

Je pense qu'un tel traitement a tout à fait sa place sur le serveur, mais doit-je pour cela faire un trigger ou une procédure stockée ? Et comment l'écrire ? Il faudrait quelque chose du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
NO=Ancien numéro d'ordre de l'enregistrement modifié
NN=Nouveau numéro d'ordre de l'enregistrement modifié
if NO<NN
   begin
      Trouver l'enregistrement NO+1
         do
            begin
                Décrémenter Numéro d'ordre
                Next
            end
         while Numéro d'ordre <= NN
   end
else
   begin
       Trouver l'enregistrement NN-1
        Do
            begin
                Incrémenter Numéro d'ordre
                Previous
            end
         while Numéro d'ordre >= NO
   end
... Mais je ne sais pas l'écrire dans le langage (SQL ?) des procédures stockées...
Merci à ceux qui pourront m'aider !