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 :

field must have value


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut autoincrémentation sql server
    Bonjour, voila je voudrais faire une insertion dans une table mssql j'ai une clé primaire que j'ai défini comme identité avec 1,1 comme début compteur et incrémentaion mais lorsque le veux insérer une valeur dans un autre champ, il me dit que la clé primaire doit avoir une valeur, comment faire pour l'autoincrémenter ??puisque je ne peux pas non plus l'insérer moi meme ??lorsque j'ajoute directement ds sql server l'autoincrémentation fonctionne dois je faire qq chose ds delphi pour lui dire que la clé primaire est gérée par la bdd ??
    merci de votre aide

  2. #2
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    est-ce que je n'ai pas été assez clair ou alors personne n'a deja eu le cas ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Je ne connais pas MySql,
    mais il doit exister l'équivalent d'un trigger qui jouera le rôle d'incrémentation à l'insert

  4. #4
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par Lucien
    Je ne connais pas MySql,
    mais il doit exister l'équivalent d'un trigger qui jouera le rôle d'incrémentation à l'insert
    bien en fait (c'est sql server) je ne pense pas que ce soit la base de données qui foire mais plutot delphi vs sqlserver pcq qd j'insère a partir de l'interface sqlserver y'a pas de problème il génère automatiquement les clés primaires comme il le doit mais lorsque j'insère une ligne a partir de delphi il me dit qu'il faut obligatoirement une valeur(normal vu que c'est une clé priamaire) mais delphi ne l'entend pas de cette oreille apparemment..

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Indique la commande Delphi que tu utilises, cela pourra peut-être éveiller une idée

  6. #6
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par Lucien
    Indique la commande Delphi que tu utilises, cela pourra peut-être éveiller une idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    table_timesheet.Append;
    table_timesheet.fieldbyname('temps').asinteger:=temps;
    table_timesheet.post;

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    J'ai eu un problème similaire avec Delphi et FB. D connaissant l'existence de cette clé l'exige: il m'a fallu utiliser une procédure stockée qui me renvoie la PK
    que j'affectais à ce moment là sans difficulté...

    Essaie de vérifier cette idée, à défaut de mieux pour l'instant.

  8. #8
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    le problème c'est que je ne peux pas la mettre moi meme, ou alors je dois gérer toutes mes clés moi memes...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Serait-il possible alors de faire disparaître la Pk du regard de D, dans la déclaration de la table, sans mettre la panique partout ?

  10. #10
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    non, pas trop, j'utilisais une version antérieure de delphi avant et je n'ai jamais eu ce problème la, il y a peut etre besoin d'une commande pour lui dire que le champ qui ne peut etre null est généré par la table non ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    J'ai introduit ce code dans un déclencheur FB que j'appelle "BEFORE_INSER_GRD",
    et dans D6 j'affecte la valeur null à la clé primaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if (new.grd_id is null) then
      new.grd_id=gen_id(gen_grd_id,1);
    A essayer...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Une autre solution, une commande sql, à partir d'un TsqlQuery en utilisant le générateur de la base FB, pour moi, "Gen_id(gen_adr_id,1)":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     'INSERT INTO T_ADRESSE_ADR (ADR_ID, ADR_DEFAUT,ADR_IND_ID, ADR_LIEU_DIT, ADR_RUE, '
                +' ADR_BP, ADR_CP, ADR_BUREAU, ADR_CEDEX, '
                +' ADR_CONTACT_NOM, ADR_CONTACT_PRENOM )'
                +' VALUES (GEN_ID(GEN_ADR_ID,1), :ADR_DEFAUT, :ADR_IND_ID, :ADR_LIEU_DIT,  :ADR_RUE,  '
                +' :ADR_BP, :ADR_CP,:ADR_BUREAU, :ADR_CEDEX,  '
                +' :ADR_CONTACT_NOM,  :ADR_CONTACT_PRENOM )';
    Tout part de D6, à condition d'avoir accès à une fonction d'incrémentation et d'un générateur que tu auras créé dans ta table.

  13. #13
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    je vais essayer par des commandes sql avant, ca passera peut etre mieux meme si c'est un peu plus lourd a gérer

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Je l'ai pensé au début et finalement, j'en suis satisfait, d'autant qu'il est possible de remplacer toute la commande par une constante apte à rendre le code plus lisible! Pour l'exemple ci-dessus, j'ai déclaré la constante puis dans la procedure d'envoiBon courage !

  15. #15
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    merci encore pr ton soutien, mais il existerait un moyen de faire prendre en compte un autoincrémenté de sql server, je vais recréer un autre poste avec un titre plus explicite

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Si tu trouvais quelque chose d'autre, je suis preneur, quitte à l'adapter si possible...
    Merci

  17. #17
    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
    Pourrais tu nous indiquer la structure de la table ?

  18. #18
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par Malatar
    Pourrais tu nous indiquer la structure de la table ?

    j'ai uen clé primaire (int auto inc) puis j'ai différentes clés externes mais elles, peuvent etre null

  19. #19
    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
    Et si tu fait une requete insert directement dans sql serveur ?

    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into [LA TABLE] (temps)
    values('test')
    Si cela te sort l'erreur c'est que tu as un champs obligatoire en plus à indiquer

  20. #20
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 266
    Points : 291
    Points
    291
    Par défaut
    Delphi via le BDE ne reconnait pas les auto-increment de SQL-SERVER.

    Si vous avez créé la table à la conception il faut ouvrir l'inspecteur de champs pour cette table et remplacer le champ (qui est indiqué comme entier) par un champ autoincrement.

    a+

Discussions similaires

  1. Object must have some value in its @XmlValue field
    Par daydream123 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 09/02/2015, 16h21
  2. Réponses: 3
    Dernier message: 04/02/2014, 09h49
  3. [2.x] Entities passed to the choice field must have a "__toString()"
    Par pingolitipus dans le forum Symfony
    Réponses: 12
    Dernier message: 17/05/2012, 13h34
  4. error: expression must have a constant value
    Par alaninho dans le forum C++
    Réponses: 4
    Dernier message: 19/03/2012, 14h03
  5. Réponses: 4
    Dernier message: 25/04/2011, 15h58

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