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

 Delphi Discussion :

insertion dans une base de données


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut insertion dans une base de données
    bonjour, j'utilise delphi7 et sql server 2008n pour la BD.
    j'ai un pb lors de l'insertion d'un nouveau enregistrement tq si j'insere un enregistrement avec une clé deja utilisee. il m'affiche violation de la clé primaire.
    je veux avoir un programme qui teste l'existance de cette cle dans la base avant meme de passer a un autre champ

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Par défaut
    Bonjour,

    faire une requête SQL avec la valeur de la clé (pour vérifier l'existence)

    - soit dans le validate du champs (en direct)
    - soit dans le before post (validation finale)

    Attention ... si multi utilisateurs ... ce n'est pas parce que tu auras vérifié dans le validate du champ que tu garderas l'unicité au moment du post de ton record (car entretemps qq aura pu encoder la même valeur)

    Sinon tu peux aussi faire un post et dans l'except du post tu peux traiter le cas de la clé dupliquée et retourner sur le champs de cette fameuse clé.

    Autre possibilité ... utiliser une identity column comme clé ainsi tu seras sûr de l'unicité (gérée par le serveur).

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par yayas Voir le message
    bonjour, j'utilise delphi7 et sql server 2008n pour la BD.
    j'ai un pb lors de l'insertion d'un nouveau enregistrement tq si j'insere un enregistrement avec une clé deja utilisee. il m'affiche violation de la clé primaire.
    je veux avoir un programme qui teste l'existance de cette cle dans la base avant meme de passer a un autre champ
    Plusieurs cas peuvent se présenter :
    La table contient une colonne IDENTITY (cad auto-incrémentée) dont il n'est alors pas nécessaire de préciser la valeur lors des insertions.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table MA_TABLE_TAB
    (
        TAB_ID     identity,
        TAB_VALEUR int not null,
        constraint PK_MA_TABLE_TAB primary key (TAB_ID)
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MA_TABLE_TAB(TAB_VALEUR) values(100)
    C'est le cas le plus simple avec MsSqlServer et celui à suivre. Est ce le cas de votre table ?
    Je vous encourage vivement à lire ce billet de Frédéric BROUARD relatif à ce sujet : Auto incrément IDENTITY avec sql server

    La table ne contient pas de colonne IDENTITY, et là ça ne va plus du tout être trivial ! Je déconseille même de poursuivre dans cette voie...
    Il va falloir dans une transaction sérialisée, vérifier par une requête que l'identifiant que l'on souhaite insérer n'existe pas, si oui on réalise l'insertion et on valide la transaction, sinon on prend un autre identifiant et on réitère l'opération...

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    Dans un contexte local, un SELECT 1 as Doublon FROM Table WHERE LeChamp = ValeurControle,
    si Empty alors la valeur est libre, tu peux l'insérer

    Dans un environnement concurrentiel, une vérification avant l'insertion peut échouer, car durant le temps entre la lecture et l'écriture, un autre client a déjà pu utiliser la valeur

    J'ai pour ma part fait une fonction en Sybase 10 pour automatiser une speudo-séquence que je n'approuve pas mais qui plait au client, voir le code dans Conflit Trigger on Insert et Procédure

    Son exécution était faite durant le INSERT, il y a moins de risque de collision, n'étant pas un expert en DB, je ne crois pas qu'un INSERT soit totalement atomique, sans compter les transactions, il y a peut-être un risque de doublon ou d'une violation de clé

    Personnellement, j'évite d'utiliser ce champ (sauf à certains endroits où j'y suis contraint par le code existant) lui préférant mes PRIMARY KEY ou FOREIGN KEY
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Parcours d'un fichier et insertion dans une base de données !
    Par condor_01 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 09h24
  2. Insertion dans une base de donnée
    Par hamzus2005 dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/07/2007, 11h40
  3. Problème d'insertion dans une base de donnèes
    Par atout dans le forum Administration
    Réponses: 14
    Dernier message: 27/12/2006, 07h07
  4. Insertion dans une base de donnée MYSQL !
    Par condor_01 dans le forum JDBC
    Réponses: 7
    Dernier message: 01/08/2006, 12h10
  5. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13

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