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 :

Table ADO et la fonction Locate


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut Table ADO et la fonction Locate
    Salut tout le monde
    je travail avec la fonction Locate d'une table ADO pour verifier si l'enregistrement existe deja ou non avant de l'enregistrer, mais le probleme c'est quand l'enregistrement existe la fonction retourne false. quel est le probleme, donnez moi une methode plus rapide et fiable que celle la .

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Fait plutôt une requête SQL ... SELECT * FROM TRUC WHERE CHAMP = "Machin"
    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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Je sais mais ca va prend pas mal de temps pour une boucle de 1000 iterations .

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Dans ce cas fournit nous le code que tu utilises pour faire ton locate et tu peux d'ores et déjà positionné un index sur le champ dans ton DataSet pour optimiser les temps de recherche puisque tu utilises ce locate dans une longue boucle visiblement.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par bilal_ini Voir le message
    Je sais mais ca va prend pas mal de temps pour une boucle de 1000 iterations .
    Avec les composants ADO, le Locate est délégué au recordset ADO sous jacent.
    Si le locate porte sur un seul champ, le composant ADO transforme le locate en un Find sur le recordset. Dans ce cas, positionner un index avant comme le suggère Aka Guymelef devrait permettre d'améliorer les perfs.

    En revanche, si le locate porte sur plusieurs champs, le composant ADO définit un Filtre et l'applique au recordset. Ce dernier a toutes les chances (à vérifier quand même) de se traduire par une requête dans la base comme le suggère ShaiLeTroll.

    Pour le reste, il faut voir pourquoi ton locate ne fonctionne pas.

    Cependant, si le problème c'est uniquement de ne faire l'insert que si l'enregistrement n'existe pas, pourquoi ne pas tout faire directement dans une requête SQL :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    insert into MaTable(champ1, champ2, champ3)
    select 'valeur1', 'valeur2', 'valeur3'
    from dual
    where not exists(select * from MaTable where champ1 = 'valeur1')

Discussions similaires

  1. Impossible de créer une table temporaire dans une fonction
    Par bossun dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2007, 10h03
  2. Fusionner 2 tables ADO
    Par Kaderovich dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/07/2006, 09h20
  3. [ADO][TADOTABLE] Filter et Locate
    Par spirale dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/05/2006, 17h00
  4. [EvariantTypeCastError] à l'ouverture d'une table ADO
    Par vali dans le forum Bases de données
    Réponses: 1
    Dernier message: 03/02/2006, 18h29
  5. [BCB5][IBX5.4]TIBDataSet et fonction Locate() ??
    Par Sitting Bull dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 02/07/2004, 18h46

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