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 :

PROBLEME avec limitation de longueur de champ...


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 33
    Points : 20
    Points
    20
    Par défaut PROBLEME avec limitation de longueur de champ...
    Hello,

    J'ai un petit problème avec TOUT les DBEdit de mon programme.

    Petit exemple : J'ai un DBEdit qui me permet de modifier - ajouter un champ "nom_client".

    Le champ nom_client de ma base de donnée est limité à 30 caractère.

    Comment est-ce que je peux faire appliquer cette limite dans Delphi ?

    Ce qui se passe maintenant c'est que si j'ai deja 3 enregistrement ("michel", "pierre", "andré") et que je veux en ajouter un, je pourrais pas ajouter un enreg. qui comptera plus de 6 caractères (parce que michel ou pierre fait 6 caractère).

    C'est assez ennuyant...

    Merci de m'aider..


    ZDigital

  2. #2
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Normalement Delphi a du mettre la "Size" de ton champ "nom_client" à 30 tout seul. Maintenant, tu peux aussi définir le "MaxLength" du DBEdit à 30 si ça ne s'est pas fait tout seul.

    Cela répond-t-il à ta question ?

    Je demande car je ne te suis pas dans cette explication :
    Citation Envoyé par zarbydigital
    Ce qui se passe maintenant c'est que si j'ai deja 3 enregistrement ("michel", "pierre", "andré") et que je veux en ajouter un, je pourrais pas ajouter un enreg. qui comptera plus de 6 caractères (parce que michel ou pierre fait 6 caractère).

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut Re: PROBLEME avec limitation de longueur de champ...
    Citation Envoyé par zarbydigital

    J'ai un petit problème avec TOUT les DBEdit de mon programme.

    Petit exemple : J'ai un DBEdit qui me permet de modifier - ajouter un champ "nom_client".

    Le champ nom_client de ma base de donnée est limité à 30 caractère.

    Comment est-ce que je peux faire appliquer cette limite dans Delphi ?
    C'est automatique! Rien à faire. Le TField agit sur le DBEdit auquel il est relié pour certains types de contrôles : taille du champ pour les chaînes, structure pour les valeurs numériques.

    Citation Envoyé par zarbydigital
    Ce qui se passe maintenant c'est que si j'ai deja 3 enregistrement ("michel", "pierre", "andré") et que je veux en ajouter un, je pourrais pas ajouter un enreg. qui comptera plus de 6 caractères (parce que michel ou pierre fait 6 caractère).
    En quel honneur, cela déepnd uniquement de la taille du champ Prenom.

    Je ne vois pas où sont tes problèmes, est-ce que les réponses que je te donne sont pertinentes ?

    cdlt

    e-ric

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Ce qui se passe. Si j'ai aucun enregistrement dans ma table, je ne pourrais pas en ajouter un.

    Si j'ajouter "Didier" depuis MySql je pourrais ajouter des enreg. depuis mon programme mais si je met "Antonin" j'aurais dans ma table "Antoni" Il ne va me prendre que les 6 premiers caracteres (parce que Didier contient 6 caracteres...)

    En conclusions. Je ne peux pas ajouter un enregistrement plus long que le plus long des enreg. deja dans ma table...

    Est-ce plus clair comme ça ?

  5. #5
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Citation Envoyé par zarbydigital
    En conclusions. Je ne peux pas ajouter un enregistrement plus long que le plus long des enreg. deja dans ma table...
    Est-ce plus clair comme ça ?
    C'est ce que tu crois ou ce que tu constates que tu expliques ici ?
    Si c'est ce que tu crois, ben tu te trompes :-)
    Si c'est ce que tu constates alors va falloir nous fournir plus d'info sur la base de données et tout le reste parce que c'est genre X-Files cette histoire..

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Salut

    Bizarre ton affaire ! la limite en taille des données n'est pas définie par les données elles-mêmes mais par la description de la structure de la table (ordre Create table SQL).

    En outre, si l'on pousse ton raisonnement plus loin, on ne peut jamais insérer de prénom de plus de zéro caractère puisque la table est vide au départ (on peut admettre que dans ce cas le plus long prénom a une longueur nulle).

    N'y aurait-il pas un trigger un peu loufoque dans ta base(genre Before Insert) ?

    cdlt

    e-ric

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par e-ric
    En outre, si l'on pousse ton raisonnement plus loin, on ne peut jamais insérer de prénom de plus de zéro caractère puisque la table est vide au départ (on peut admettre que dans ce cas le plus long prénom a une longueur nulle).
    C'est la cas. Le premier enregistrement je suis obligé de le mettre directement depuis MySQL. Si je met un enreg de 8 caractères, je pourrais en ajouter tant que je veux depuis mon prog mais si je met quelques chose de 10 caracteres il ne va me prendre que les 8 premier...

    Si plus tard j'ajoute un enreg. de 12 caractere depuis MYsql. je pourrais ajouter des enreg depuis Mon prog de 12 car. mais pas plus. Sinon il va me les tronquer à 12 char. C'est X_Files je sais...

    C'est jamais arrivé à personne ce genre de merde ?

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    tu peux fournir la structure de ta table ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Champ - Type - Attributs - Null - Défaut - Extra
    langue_pk - int(11) - nil - Non - nil - auto_increment
    langue_nom - varchar(30) - nil - Oui - NULL

    Voila... C'est moyennement clair... j'ai symboliser les colones par des caracteres gras et j'ai mis nil pour symboliser ou il n'y a rien d'écrit

  10. #10
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Salut

    Si tu peux ajouter un nom de taille quelconque mais inférieur à 30 caractères (limite physique de ton champ) depuis MySQL, l'hypothèse du trigger s'écroule, ce n'est pas la base qui est à l'origine de ton problème.

    Recherche donc dans le source de l'application, il doit y avoir un morceau de code qui fait une recherche de la taille maximale des noms existant (sans doute un SELECT * FROM <LA_TABLE> et un parcours du résultat pour obtenir la taille maximale). Recherche les occurences de length par exemple dans tout les sources de ton projet.

    Je pense que personne ne pourra te donner la solution sans un examen sérieux du code de ton application car il s'agit manifestement d'un comportement spécifique à ton application mais non lié à Delphi ni à la base de données sous-jacente.

    Ceci dit, un tel comportement est surprenant, on ne voit pas l'intérêt d'un tel contrôle. Je pense que tu as affaire à un beau bug.

    Est-ce ton application est de grande taille ?

    cdlt

    e-ric

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Merci de ta réponse...

    Je vais continuer a chercher... L'application est de taille moyenne. La base contient 19 tables (forcément toutes en relations l'une avec l'autre) J'au un vingtaine de de formulaires dont certains avec plus de 15 champs. ET tout les champs présentent le même problème...

    Pour ajouter un champ j'ai utiliser TADODataset.insert qui m'ajoute un nouveau champ dans lequel j'insert ma valeur.

    Aurais-je du utiliser TADODataset.insertrecord ? Cela me force à faire a chaque fois un formulaire d'insertion... beaucoup de travail... (trop)...

    ... mon employeur va me clouer sur ma chaise jusqu'à ce que je termine... vive les heures sup !!!

Discussions similaires

  1. Réponses: 19
    Dernier message: 08/06/2010, 14h20
  2. Réponses: 3
    Dernier message: 30/01/2009, 09h38
  3. Probleme avec multiple valeur d'un champ
    Par Delphieur dans le forum Oracle
    Réponses: 4
    Dernier message: 18/07/2007, 22h34
  4. Probleme avec plusiers valeur d'un champ
    Par Delphieur dans le forum Oracle
    Réponses: 3
    Dernier message: 17/07/2007, 15h58
  5. Réponses: 9
    Dernier message: 20/06/2007, 17h34

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