Voilà à quoi servent les générateurs voire même l'ajout d'un trigger ! je ne parlerais pas des applications multi-tiers !
sans générateur déjà
1 2 3 4
|
sql.strings[0]:='select numero from ticket order by numero';
open;last;
i:=fielbyname('numero').asinteger+1; |
ce code aurait avantageusement été remplacé par
1 2 3 4
| sql.Text:='select Max(numero)+1 from ticket';
open;
i:=fielbyname('numero').asinteger;
close; // qu'il manquait |
ou encore
sql.text:='select first 1 numero+1 from ticket order by numero desc';
Ensuite , le UPDATE , alors là c'est étrange , selon votre code
sql.strings[0]:='update ticket set numero='+inttostr(i);
cela voudrait dire que votre table TICKET ne contient qu'un seul enregistrement (dans ce cas , à quoi sert le order by, le open+last), sinon vous modifiez tous les enregistrements !
bref et heureusement
une description de la table TICKET s'impose !
considérons maintenant l'emploi d'un générateur , Barbibulle en a donné les principes ici
note : depuis Firebird 2.0 on parle aussi de SEQUENCE
CREATE SEQUENCE MESTICKETS;
on obtient alors facilement un nouveau numéro
1 2 3 4 5 6
| SQL.Text:='SELECT GEN_ID(MESTICKETS,1) AS NUMERO FROM
RDB$DATABASE';
open;
i:=fielbyname('numero').asinteger;
close;
// il faut m'expliquer le UPDATE car là je pense qu'il y a erreur d'analyse |
Partager