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

Connexion aux bases de données Firebird Discussion :

Champ auto qui ne s'affiche pas


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut Champ auto qui ne s'affiche pas
    Bonjour,

    Dans une table Firebird (GDB) j'ai un champ auto appelé LIV_ID. Ce champ qui commence à 100 me sert de numéro de bon de commande.

    Quand je saisi un bon de commande, tous les champs se mettent bien dans mon DBGrid sauf mon numéro (LIV_ID) qui ne s'affiche que lorsque je relance mon prog. Ce que je cherche à faire c'est à l'afficher dès la saisie pour le visualiser.

    Pour me connecter à ma base j'utilise TIBDataBase et pour mettre à jour la table un TIBDataSet avec INSERTSQL, ModifySQL et DeleteSQL renseignés.

    Comment je peux faire?

    D'avance merci

    Codial

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Sur ton FIBDataSet renseigne la propriété GeneratorField. Tu lui associes le Générateur qui incremente ton champ auto, et tu précises quand tu veux y faire appel (à l'insertion ou avant le post).

    [edit]
    C'est une question que j'aurais posé dans le forum Delphi/Bases de données puisque qu'il s'agit d'un composant Delphi.
    [/edit]
    @+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    merci beaucoup pour la réponse, celà fonctionne avec "Lors de la validation".

    Cordialement

    Codial

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    je reviens car je viens de m'apercevoir que maintenant mon champ auto s'incrémente de 2 ?

    Or j'aimerai qu'il ne s'incrémente que de 1

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Modifie ton trigger before insert sur ta table, et appelle le GEN_ID uniquement si ta clé est NULL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      if (new.LIV_ID is NULL) then new.LIV_ID = GEN_ID(TON_GENERATEUR, 1);
    @+

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Re,

    c'est ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF (new.LIV_ID IS NULL) then 
    begin
    new.LIV_ID = GEN_ID("G$_LIV_ID", 1);
    end
    end
    Je ne comprends pas!

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par codial
    Je ne comprends pas!
    Qu'est-ce que tu ne comprends pas ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    que ça s'incrémente de 2

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Jusqu'à présent lorsque tu postais ton enregistrement la valeur de LIV_ID était à NULL. Mais à présent tu appelles le générateur depuis l'application qui te fournit la valeur de ta clé.
    Donc au moment du Post (dans ton appli) la valeur de LIV_ID est déjà renseignée. C'est pour cela qu'il faut poser cette condition dans ton trigger (if new.LIV_ID is NULL) pour éviter que le générateur ne soit appelé un 2° fois.

    Voiloù. En fait c'est tout bête !

    @+

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    re,
    comme je l'ai dit plus haut ce test existe dans mon trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF (new.LIV_ID IS NULL) then 
    begin
    new.LIV_ID = GEN_ID("G$_LIV_ID", 1);
    end
    end

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ah OK la condition existait déjà !

    Qu'est qui est inscrit pour la propriété GeneratorField:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      G$_LIV_ID -> LIV_ID by 1
    C'est ça ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    oui c'est ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    G$_LIV_ID -> LIV_ID By 1

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ah c'est bizarre !

    Nul part ailleurs tu ne fais appel au générateur, ou modifie la valeur de LIV_ID dans ton prog ?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Non, nul par ailleurs, dans mon InsertSQL j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO LIVRAISONS
      ( ClI_ID, LIV_DOC, LIV_DATE)
    VALUES
      ( :ClI_ID, :LIV_DOC, :LIV_DATE)
    et dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DM.IBDLivraisons.Post;

  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Bon ben j'ai du mal à comprendre !
    Je viens de faire un petit test: Un IBDataSet, avec GeneratorField de renseigné, je saisi dans un DBGrid et tout fonctionne correctement. Mes clés se suivent.

    A moins que... Est-ce que tu utilises des champs persistents, et si oui est-ce la propriété AutoGenerateValue du champ LIV_ID est bien à arNone (et non arAutoInc) ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    il y un trigger d'affecté à l'ID ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    j'ai vérifié mon champ persistant LIV_ID est bien sur GeneratorField = arNone .

    Ceci dit j'ai recréé mon champ LIV_ID non plus en auto mais en integer avec GeneratorField renseigné et là quand je saisi, j'ai bien mes numéros qui se suivent.

    Celà me pose une autre question: Quand j'annule une saisie la numérotation tient compte du numéro annulé, existe il une méthode pour repartir à partir du dernier numéro saisi plus un ?

  18. #18
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Si tu appelles le GEN_ID avant le post (lors de la validation) normalement si tu annules ta saisie avant de poster, l'incrément n'est modifié (contrairement à 'sur le nouvel enregistrement').

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonsoir,

    je te remercie pour pour tes réponses qui m'ont bien éclairées, effectivement j'avais mis le GeneratorField sur ' Sur le nouvel enregistrement' qui avait l'avantage de visualiser dès la saisie le numéro du bon (le champ incrémenté). Maintenant, sur 'lors de la validation' il s'affiche après. Mais bon ça me convient.

    Encore merci pour ta patience.

    Cordialement

    Codial

  20. #20
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par codial
    Encore merci pour ta patience.
    Y a pas de quoi !!

    @+ Claudius

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] [États] Champ auto-extensible qui ne s'affiche pas en entier
    Par DamKre dans le forum IHM
    Réponses: 7
    Dernier message: 31/12/2014, 09h33
  2. Réponses: 3
    Dernier message: 12/05/2007, 18h24
  3. champ auto d'interbase qui ne s'affiche pas
    Par ally dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/04/2007, 20h03
  4. Champs qui ne s'affichent pas dans formulaire
    Par capitaine dans le forum Access
    Réponses: 1
    Dernier message: 02/06/2006, 15h00
  5. Réponses: 5
    Dernier message: 23/01/2006, 12h31

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