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

Bases de données Delphi Discussion :

champ_non_numerique_autoincremente


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut champ_non_numerique_autoincremente
    comment réaliser avec unne application delphi un champ autoincrementé non numerique dans une base interbase sans generer des erreurs de violation de cle ou autre erreur ?

    je propose une solution, mais disez moi est ce que c'est bonne ?

    voilà ma solution:

    1) je crée un generateur dans interbase.
    2) je crée un trigger pour incrémenter ce génerateur à chaque insertion d'un nouveau enregistrement.
    3)pour le champ alphanumérique spécifique que je veux lui rendre autoincrémenté, j'enregistre dans lui une chaine par exemple ( com )

    suivie du nouveau valeur du generateur par exemple ( 12 )
    --> ainsi la valeur du champ devient (com12).

    ** cette méthode est _elle juste ? est ce qu'elle ne provoque pas
    d'erreur (violation de clé, accés concurentiel, etc..) ?

    ** existe t'il une autre méthode plus meilleur que celle çi ?

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    Mais pourquoi ne pas utiliser un champ numérique ???

    Quelle est ta contrainte ?

    Parce que, même si ta méthode fonctionne, tu vas ensuite te trouver confronter à d'autres problèmes :
    Les tris sur ce champ ne vont pas fonctionner
    com1
    com10
    com100
    com101
    com...
    com11
    com12
    com...
    com19
    com2

    De plus, les temps de traitement vont être allongés par de multiples conversion string <-> numérique.

    A mon avis, tu te lances dans une usine à gaz...

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut probleme
    le probleme est que la table qui contient ce champ est une table qui contient un autre champ de nom : type. dans ce dernier champ, on désigne le type de commande.
    --> si c'est une commande du 1 er choix alors le n° de commande

    serra : 1com25

    *si c'est une commande de 2 eme choix alors le n° de commande

    serra:2com26

    *si c'est une commande de 3 eme choix alors le n° de commande

    serra:3com27.


    etc...


    --> alors tu vois bien que je suis obligé d'utiliser un champ alphanumerique.


    ******* Merçi beaucoup pour l'aide *********

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut probleme
    le probleme est que la table qui contient ce champ est une table qui contient un autre champ de nom : type. dans ce dernier champ, on désigne le type de commande.
    --> si c'est une commande du 1 er choix alors le n° de commande

    serra : 1com25

    *si c'est une commande de 2 eme choix alors le n° de commande

    serra:2com26

    *si c'est une commande de 3 eme choix alors le n° de commande

    serra:3com27.


    etc...


    --> alors tu vois bien que je suis obligé d'utiliser un champ alphanumerique.


    ******* Merçi beaucoup pour l'aide *********

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Ce serait plus facile de t'aider si tu donnais un peu plus de precisions sur la maniere dont tes commandes sont numerotees. Par exemple apres avoir enregistre une commande de 1er choix de numero 1com15, la commande suivante, si elle est de 2e choix, sera-t-elle 2com15 ou 2com16? Et quelle est le champ cle de tat table?

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut probleme
    si la derniere commande enregistré du 1er choix est: 1com15

    et la commande suivante est de 2 eme choix, elle serra: 2com16.

    cet champ (le numeo du commande) est le champ cle.


    *** aidez moi svp ***

  7. #7
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    Je te conseille de garder seulement l'autoincrement comme cle, puisque tu as le champ type tu n'as pas à le concatener avec ta cle pour obtenir une nouvelle.
    Maintenant, si tu insiste pour aller dans cette voie là qui n'est pas conseillée, tu peux utiliser le trigger pour concatener les trois chaines pour obtenir ta nouvelle cle.

    A+

  8. #8
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut remerciement
    Merçi à tous

  9. #9
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    Je suis de l'avis de MAMMAR.

    Tu crée dans ta table un champ "num_ordre" numérique auto-incrémenté.
    Tu gardes les champs "type" et "num_commande"
    Avec un trigger (ou par programme si ton SGDB ne gère pas les trigger) tu alimentes le champ "num_commande" par concaténation des champs "type" et "num_ordre".

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