IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

champ auto increment


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 8
    Points
    8
    Par défaut champ auto increment
    Bonjour a tous...

    j'ai une table admin dans ma base de donnée et je veux créés de nouveau "admin" au travers d'un form delphi... j'utilise un query dont la requête est :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into "ADMIN" (idadmin, nom_admin, pass_admin) values (:idadmin, :nom_admin, :pass_admin)

    Derrière mon bouton Enregistrer j'ai mis le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    qrenradm.Prepare;
    {??je veux connaitre cette ligne??}
    qrenradm.ParamByName('nom_admin').AsString := editnom.Text;
    qrenradm.ParamByName('pass_admin').AsString := editmdp.Text;
    qrenradm.ExecSQL;
    base de donnée: firebird, delphi embarcadero,

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 105
    Points : 41 195
    Points
    41 195
    Billets dans le blog
    63
    Par défaut
    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
    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
     
    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 :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into "ADMIN" (nom_admin, pass_admin) values (:nom_admin, :pass_admin)
    ou encore
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci bien ça fonctionne parfaitement !

Discussions similaires

  1. zerofill pour champ auto-increment
    Par seb92 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/07/2004, 15h52
  2. champ auto increment
    Par seb92 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2004, 16h12
  3. Champ auto increment
    Par webbulls dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/04/2004, 16h07
  4. Remise à zero champ auto-incrementé (SQL Server)
    Par James85 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/01/2004, 09h23
  5. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 18h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo