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

Connexion aux bases de données Firebird Discussion :

[BCB5][IBX5.4]TIBDataSet et fonction Locate() ??


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 109
    Points
    109
    Par défaut [BCB5][IBX5.4]TIBDataSet et fonction Locate() ??
    Bonjour,

    Je souhaite effectuer une recherche afin de me positionner dessus (grâce à la fonction locate du TIBDataSet) sur un champ de type CHAR(50).
    Le champ dans ma BD comporte mon texte + des blancs (pour arriver a une taille de 50), ce qui n'a rien d'inhabituelle, cependant lorsque j'effectue ma recherche je passe a la fonction locate la chaîne recherché sans les blancs et la il ne me trouve pas ma chaîne alors que si je recherche ma chaîne en y ajoutant les blancs cela fonctionne.

    Mes questions sont les suivantes:
    - Existe t'il une méthode pour effectuer une recherche sur une chaîne sans devoir y rajouter les blancs

    - Est t'il possible de se passer de la fonction locate (très lente), pour obtenir le même résultat que cette dernière.

    Merci d’avance,
    Les deux mots les plus brefs et les plus anciens, oui et non, sont ceux qui exigent le plus de réflexion. "Pythagore"

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Je suppose que vous parlez des blancs en fin de chaine ?

    CHAR(50) est une chaine de 50 caractères donc si vous y mettez que un seul caractère il va compléter par 49 espaces.

    Si vous aviez utiliser plutot un VARCHAR(50) alors là il ne compléte pas avec des espaces à la fin... (Mais il peux y en avoir si vous enregistrez une chaine qui comporte des espaces à la fin...)


    Voilà maintenant en ce qui concerne locate, l'inconvéniant de celui ci c'est qu'il me semble que le traitement se fait en locale et donc si vous avez une grosse table, celle ci va devoir transiter entièrement via le réseau.

    D'un point de vue performance un select avec un where adapté sera certainement plus performant.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    Oui effectivement les blancs correspondent au caractère espace.
    Je conçois qu'une requête serait bien plus rapide, cependant le TIBDataSet ne sera pas positionné sur le bon enregistrement ??
    Mon code ressemble un peu a celui la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (IBDataSet->Locate("MACHAINE")) {
      IBDataSet->Edit();
      IBDataSet->FieldByName("A0")->AsString = "MACHAINE_1"
      IBDataSet->CheckBrowseMode();
    }
    Les deux mots les plus brefs et les plus anciens, oui et non, sont ceux qui exigent le plus de réflexion. "Pythagore"

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par Sitting Bull
    Oui effectivement les blancs correspondent au caractère espace.
    Ca je le savais mais ma remarque c'était de savoir si c'était bien des blancs (ou espaces...) finaux ?

    Relisez ma remarque sur la différence entre CHAR et VARCHAR pour mieux comprendre votre problème.

    En ce qui concerne le second point (la question performance) :
    Citation Envoyé par Sitting Bull
    Je conçois qu'une requête serait bien plus rapide, cependant le TIBDataSet ne sera pas positionné sur le bon enregistrement ??
    Si vous reformulez le where de votre requete dans le TIBDataset il n'y aura plus que l' (ou les) enreregistrements que vous cherchez.
    C'est pas tout à fait la même chose que le locate (qui se positionne sur un enregistrement), c'est du filtrage donc si vous ne voulez pas filtrer mais vous positionnez utilisez locate en effet.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    Ca je le savais mais ma remarque c'était de savoir si c'était bien des blancs (ou espaces...) finaux ?
    Mauvaise journée, mauvaise nuit apres une longue reflexion, (une bonne dose de café) ce sont des BLANCS et non des ESPACES.
    Dans tous les cas je ne cherche pas à effectuer un Filtre mais bien me positionner sur l'enregistrement. Donc Locate obligatoire

    Merci.
    Bonne nu.. euh non journée !!
    Les deux mots les plus brefs et les plus anciens, oui et non, sont ceux qui exigent le plus de réflexion. "Pythagore"

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Et donc utilisez un varchar plutot qu'un char pour vous éviter de devoir completer vos chaines de recherche par des espaces en fin.

    PS :
    Espace = blanc on est d'accords ...

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    Merci
    Les deux mots les plus brefs et les plus anciens, oui et non, sont ceux qui exigent le plus de réflexion. "Pythagore"

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

Discussions similaires

  1. probleme avec la fonction locate
    Par kroma23 dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/06/2011, 09h48
  2. Réponses: 3
    Dernier message: 23/09/2009, 10h45
  3. Table ADO et la fonction Locate
    Par bilal_ini dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2008, 13h51
  4. [BCB5][IBX5.4]Recupérer le nom du serveur ??
    Par Sitting Bull dans le forum Débuter
    Réponses: 1
    Dernier message: 19/10/2004, 19h01
  5. [BCB5][IBX5.4]FOREIGN KEY ??!!
    Par Sitting Bull dans le forum InterBase
    Réponses: 2
    Dernier message: 06/07/2004, 15h14

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