Bonjour,
selon le titre , il semblerai donc que idadmin soit un champ autoincrémenté (generator) deux cas vont donc se présenter :
1- il y a un trigger associé a la table
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
CREATE TRIGGER ADMIN_BI ACTIVE
BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE tmp DECIMAL(18,0);
BEGIN
IF (NEW.IDADMIN IS NULL) THEN
NEW.IDADMIN = GEN_ID(GEN_IDADMIN, 1);
ELSE
BEGIN
tmp = GEN_ID(GEN_IDADMIN, 0);
if (tmp < new.IDADMIN) then
tmp = GEN_ID(GEN_IDADMIN, new.IDADMIN-tmp);
END
END^ |
dans ce cas le insert pourrait avoir la forme suivante :
insert into "ADMIN" (nom_admin, pass_admin) values (:nom_admin, :pass_admin)
ou encore
insert into "ADMIN" (idadmin, nom_admin, pass_admin) values (NULL, :nom_admin, :pass_admin)
et pas a se casser la tête pour ce qui est de l'id !
2- pas de trigger , il faut gérer "à la main" , là encore cela peut dépendre des composants utilisés pour accéder à la BDD . Bien que je le rappelle encore une fois le BDE est obsolète c'est avec ces composants que je vais répondre tout d'abord en indiquant la firebird page=generator
la procédure pour obtenir un nouveau numéro est donc de faire une query
et de l'ouvrir pour obtenir le nouveau numéro, par exemple ainsi :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
var : N
begin
....
with TQuery.Create(nil) do
begin
Connexion:=Tdatabase1.Database;
SQL.Text:='SELECT gen_id(GEN_IDADMIN,1) AS NOUVEAUNUMERO FROM RDB$DATABASE';
Open;
N:=FieldNyName('NOUVEAUNUMERO').asInteger;
Close;
end;
...
qrenradm.Prepare;
qrenradm.ParamByName('idadmin').AsInteger :=N;
qrenradm.ParamByName('nom_admin').AsString := editnom.Text;
qrenradm.ParamByName('pass_admin').AsString := editmdp.Text;
qrenradm.ExecSQL; |
vous trouverez une autre méthode dans ce tutoriel utilisant une procedure de la BDD
Partager