Recherche d'un texte dans une data base [Résolu]

Signaler
Messages postés
22
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
5 novembre 2006
-
yousef450
Messages postés
2
Date d'inscription
dimanche 6 août 2006
Statut
Membre
Dernière intervention
22 mai 2009
-
bonjour à tous,

j'ai une database dbase dans laquelle je veux effectuer une recherche d'un enregistrement contenant un texte précis.

Comment faire pour que cette recherche soit indépendante de la case utilisée,
je veux trouver Pierre...meme si dans ma recherche je demande :
- pierre
- ou pIerre
- ou PieRRe
etc...

merci à tous ceux qui sauront me conseiller

cordialement

Pierre

8 réponses

Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010

tu impose une casse pour les deux ! tu passe tous en minuscule ou alors tout en majuscule (le mot lu dans la base et celui recherché) .. et tu compare ensuite !

Cordialement jfs.

Tout est en tout et réciproquement ...
Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010

si tu est sur du format une majuscule + minuscules tu passe tous en minuscule et ensuite la premiere lettre en majuscule uniquement (pour le mot recherché uniquement cette fois) tu compare ensuite

Cordialement jfs.

Tout est en tout et réciproquement ...
Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010

un ti exemple de fonction pour mettre en majuscule la premiere lettre

Function majuscule1erelettre(chaine : string): string;
begin
chaine := Ansilowercase(chaine);
chaine[1] := AnsiUpperCase(chaine)[1];
result := chaine;
end;

mais bon ca doit exister dans les bibliotheques delphi .. j'ai pas cherché...

Cordialement jfs.

Tout est en tout et réciproquement ...
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
27
je sais pas si dbase possede une syntaxe differente de SQL mais logiquement tu peux faire cela avec le mots clef LIKE :

SELECT * FROM table WHERE name LIKE 'pierre'

sinon dans du texte normal (liste ou memo) on ferait :

// variable globale permettant de recuperer l'index de l'item en cours
var oldindex : integer = -1;

// fonction permettant de chercher la prochaine ligne contenant le texte SFind
function FindAndSelect(const SFind : string; const FromIndex : integer = -1) : integer;
begin
  // on init result a -1
  result := -1;
  // si la liste est vide on sort
  if List.count = 0 then exit;


  // on increment OldIndex

  inc(OldIndex);


  // si on a choisi un index de depart on place la valeur dans OldIndex
  if FromIndex <> -1 then
     OldIndex := FromIndex;

  // on verifie le debordement d'interval
  if OldIndex >= List.count then OldIndex := 0;

  // boucle de recherche
  for i := OldIndex to List.count-1 do
      // si le texte SFind et present dans la ligne
      if pos(lowercase(SFind), lowercase(list.items[i])) <> 0 then begin
         // on recupere l'index dans OldIndex pour la prochaine recherche
         OldIndex := i;
         // on renvois l'index dans le resultat de la fonction
         Result   := i;
         // on selectionne la ligne dans la liste
         list.itemindex := i;
         // on arrete la boucle
         break;
      end;
end;





Messages postés
11
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
14 janvier 2009

Salut,

Il existe aussi la fonction Locate du composant TTable de Delphi qui retourne avec comme paramètre

Table1.Locate('NOM DE CHAMPS', Chaine à rechercher, [loCaseInsensitive])

Le 3é paramétre [loCaseInsensitive] si tu veux ignorer les différences majuscule minuscule.

Fiba
Messages postés
22
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
5 novembre 2006

Bonjour,

merci pour ta réponse rapide et ton aide précieuse,
je mets tes suggestions en pratique tout de suite

bon we et merci encore
cordialement
Pierre
Messages postés
644
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

Bonjour,


Attention au lettres accentuées é û ....

yvessimon
Messages postés
2
Date d'inscription
dimanche 6 août 2006
Statut
Membre
Dernière intervention
22 mai 2009

je sais pas si dbase possede une syntaxe differente de SQL mais logiquement tu peux faire cela avec le mots clef LIKE :

SELECT * FROM table WHERE name LIKE 'pierre'

sinon dans du texte normal (liste ou memo) on ferait :

// variable globale permettant de recuperer l'index de l'item en cours
var oldindex : integer = -1;

// fonction permettant de chercher la prochaine ligne contenant le texte SFind
function FindAndSelect(const SFind : string; const FromIndex : integer = -1) : integer;
begin
  // on init result a -1
  result := -1;
  // si la liste est vide on sort
  if List.count = 0 then exit;


  // on increment OldIndex
  inc(OldIndex);


  // si on a choisi un index de depart on place la valeur dans OldIndex
  if FromIndex <> -1 then
     OldIndex := FromIndex;

  // on verifie le debordement d'interval
  if OldIndex >= List.count then OldIndex := 0;

  // boucle de recherche
  for i := OldIndex to List.count-1 do
      // si le texte SFind et present dans la ligne
      if pos(lowercase(SFind), lowercase(list.items[i])) <> 0 then begin
         // on recupere l'index dans OldIndex pour la prochaine recherche
         OldIndex := i;
         // on renvois l'index dans le resultat de la fonction
         Result   := i;
         // on selectionne la ligne dans la liste
         list.itemindex := i;
         // on arrete la boucle
         break;
      end;
end;



merci