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 :

D7/firebird 1.5 - détection de doublons


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut D7/firebird 1.5 - détection de doublons
    Bonjour,

    Lorsque je crée un nouvel enregistrement dans ma table, je souhaite détecter si c'est un doublon et envoyer un message.

    Voilà un code qui fonctionne mais qui me semble pas génial:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    if datamodule1.IBDataSet2.Locate('NOM',combobox1.Text,[locaseInsensitive]) then
    showmessage('Doublons');
    N'y a-t-il pas un code plus efficace?

    Merci d'avance.

    Jer.

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Il me semble qu'on ne fera pas mieux que le moteur de base de données; donc déclarer une "unique key" sur le(s) champs de la table. Et là, au moment de poster l'ajout, une exception surviendra en disant qu'il y un contrainte d'unicité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alter table T_PERSONNE_PERS
    add constraint C_PK_T_PERSONNE_PERS
    unique (PERS_NOM)
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Oui, mais j'ai besoin de vérifier la présence du doublon avant de poster, car l'utilisateur final doit avoir l'info dés le départ pour éviter un travail de saisie inutile.

    ???

  4. #4
    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 le faire par une requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    function Doublon (sParam : String) : Boolean;
    begin
      Result := False;
      With Query do // a toi de mettre le bon composant ici
      begin
        Close;
        SQL.Clear;
        SQL.Add(' Select ChampNom from laTableNom');
        SQL.Add(' Where NOM = ' + QuotedStr(sParam));
        try
          Open;
     
          if RecordCount > 0 then
            Result := True
        Except on E:Exception do
          Showmessage(E.Message);
        end; // try
      end; // with
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    J'ai utilisé l'exemple de la function sur un bouton, mais ma requête m'indique toujours la même réponse quelque soit le nombre d'enregistrement et la présence ou non de doublons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    With datamodule1 do
      begin
     
        ibdataset2.Close;
        ibdataset2.selectSQL.Clear;
        ibdataset2.selectSQL.Add(' Select * from MATABLE');
        ibdataset2.selectSQL.Add(' Where NOM = '+ '''' + combobox1.Text + '''');
     
        ibdataset2.Open;
     
        if ibdataset2.RecordCount > 1 then
     
     
          Showmessage('Doublons') ELSE showmessage('OK');
     
      end;

    Ou est l'erreur?

    Jer

  6. #6
    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
    Cette fonction doit te permettre de rechercher s'il n'y a pas déjà 1 nom qui existe.
    Mais dans la requete, toi, tu cherches s'il y a deux fois ou plus le nom dans la base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ibdataset2.RecordCount > 1 then // Tu affiches doublons que s'il y a 2 ou plus
    il faut que tu indique 0 au lieu de 1 si tu veux une réponse.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Bonjour,





    if ibdataset2.RecordCount > 1 then // Tu affiches doublons que s'il y a 2 ou plus



    il faut que tu indique 0 au lieu de 1 si tu veux une réponse.
    Même comme cela j'ai toujours la même réponse????????????

    JER

  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
    Attention les requetes sont sensibles à la casse (Majuscule/minuscule)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    J'ai fait attention à la casse, mais le problème n'est pas résolu.

    ??????

  10. #10
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut.

    Attention avec l'utilisation de recordcount avec Interbase, car des fois ça ne renvoi pas le nombre d'enregistrement exacte, il faut fetcher.
    Il vaut mieux utiliser une requête parametrer et tester s'il y a des enregistrement renvoyés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
      Function TPerson.CheckExist (Nom : String) : Boolean;
      With TIbQuery.Create do 
      Try 
        try
          Database := TonIBDatabase;
          Transaction := TonIbTransaction;
          SQL.Add(' Select ChampNom from laTableNom'); 
          SQL.Add(' Where NOM = :PNOM'); 
          ParamByname('PNOM') .Asstring := Nom;
          Open; 
          Result := Not IsEmpty; 
        Except on E:Exception do 
          Showmessage(E.Message); 
        end; 
      finally
        Free;
      end; // with
    Ce fonction renvoi vrai si la personne existe dans la base de dnnée.

    A toi de le modifier.

    A+
    On progresse .....

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Merci pour votre aide mais je n'y comprend rien, rien ne fonctionne.


    ???????????

    Jer

  12. #12
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Bonjour,

    Dis nous ce que tu ne comprends pas.
    La fonction que je t'ai donnée ci dessous permet de tester que la personne ayant comme nom NOM existe dans la table LaTableNom.
    Si c'est à propos de l'utilisation, il suffit de :
    - declarer une fonction Function CheckExist (Nom : String) : Boolean;
    dans la section privée de ta fiche.
    - ajouter IBQuery dans la clause Uses de ta fiche.
    - utiliser maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if CheckExist (combobox1.Text) then
       showmessage('Doublons');
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    datamodule1.IBDataSet2.Locate('NOM',combobox1.Text,[locaseInsensitive]) then 
      showmessage('Doublons');
    Et le tours est joué

    Bon dev
    On progresse .....

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Merci beaucoup, maintenant j'ai compris et cela marche impec.

    Encore merci pour ton aide.

    A+

    Jer

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

Discussions similaires

  1. Détection de doublons avec SSIS
    Par nacimoun dans le forum SSIS
    Réponses: 2
    Dernier message: 28/09/2009, 17h19
  2. Détection de doublons
    Par Tchupacabra dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/06/2009, 09h49
  3. Problème de détection de doublons
    Par billoux70 dans le forum SQL
    Réponses: 25
    Dernier message: 23/10/2008, 15h59
  4. Détection des doublons sans effacer
    Par drakkar_agfa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/10/2008, 21h55
  5. Détection de doublons dans une table
    Par doo.bonivento dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/10/2007, 17h05

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