Delphi 7 avec Firebird 2.1

Généralement je gère les champs autoincrémenté (NOT NULL) avec un "trigger before" qui garnit la valeur de la requête SQL de création.

Depuis peu j'explore le fonctionnement de toutes les potentialités du TIBdataSet lequel contient une propriété GeneratorField laissant entendre qu'on peut se passer de Trigger.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
	if ((new.bas_id is null) or (new.BAS_ID<1)) then
        new.bas_id=gen_id(gen_mail_base,1);
Pourtant si j'inactive le trigger et bien qu'ayant spécifié un GeneratorField, lors de la validation je reçois une erreur "le champ ID doit avoir une valeur".

Trigger qui comme on le voit ne fait rien si le champ n'est pas vide et > 0.

Si je le réactive ça fonctionne.

Intrigué par cette double nécessité (GeneratorField et Trigger) je tente de supprimer le GeneratorField (qui n'est possible qu'en éditant la fiche en mode texte d'ailleurs) et là l'erreur réapparait.

Ce n'est donc pas la propriété GeneratorField qui garnit la valeur sinon le trigger serait inutile. Or on a vu qu'ils était indispensable. A quoi sert elle donc ?

J'ajoute que les deux fonctions (Trigger et GeneratorField) ne font pas double emploi car contrairement à un cas sur le forum les enregistrements sont bien identifiés avec un pas de 1.

A noter que GeneratorField agit "sur le serveur" les autres options ne fonctionnant pas. (C/S sur le même poste)