Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/07/2004, 13h55   #1
Membre du Club
 
Inscription : mai 2003
Messages : 140
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 140
Points : 66
Points : 66
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,
Sitting Bull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2004, 14h06   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
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.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2004, 14h21   #3
Membre du Club
 
Inscription : mai 2003
Messages : 140
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 140
Points : 66
Points : 66
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 :
1
2
3
4
5
IF (IBDataSet->Locate("MACHAINE")) {
  IBDataSet->Edit();
  IBDataSet->FieldByName("A0")->AsString = "MACHAINE_1"
  IBDataSet->CheckBrowseMode();
}
Sitting Bull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2004, 14h30   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
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.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2004, 14h42   #5
Membre du Club
 
Inscription : mai 2003
Messages : 140
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 140
Points : 66
Points : 66
Citation:
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 !!
Sitting Bull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2004, 15h08   #6
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
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 ...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2004, 18h46   #7
Membre du Club
 
Inscription : mai 2003
Messages : 140
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 140
Points : 66
Points : 66
Merci
Sitting Bull est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h27.


 
 
 
 
Partenaires

Hébergement Web