Rechercher un mot clé dans les tables d'une base access
codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 2015
-
8 nov. 2006 à 18:22
codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 2015
-
9 nov. 2006 à 10:23
Bonsoir,
c'est probablement une question bête, mais bon je bute dessus!!
Je cherche à faire une recherche à partir d'un mot clé dans les tables d'une base access.
Je balaie donc tous les champs des tables mais je bute sur un truc:
Est ce qu'il existe une fonction pour dire: Le champ X contient MonOccurence? Ou bien une autre technique?
D'avance merçi
Cordialement
Codial
<!-- / message -->
A voir également:
Rechercher un mot clé dans les tables d'une base access
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 9 nov. 2006 à 09:17
Heuh...Guillemouze, avec ta requête SQL tu ne recherches que dans le champ MonChamp !
Voici une autre solution testée avec la bdd DbDemos livrée avec Delphi et effectuant une recher sur le contenu de trois champs de type chaîne :
SELECT * FROM Biolife WHERELOWER(category||common_name||"species name") LIKE "%fish%"
Explications :
1/- Pour faciliter la recherche sans tenir compte de la casse des caractères, on force le contenu des champs concaténés en minuscules.
2/- On utilise l'opérateur de concaténation "||" (2 fois le caractères pipe, [ALT gr][6]) et on utilise l'opérateur LIKE du SQL.
Comme l'a fait remarquer Guillemouze, il faut peut-être remplacer le caractère % par un astérisque avec une base Access.
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 20151 9 nov. 2006 à 10:23
Bonjour,
merci pour vos réponses. En fait je dois chercher un mot clé dans tous les champs de toutes les tables, aussi je ne pense pas que le select convienne c'est pour ça que je ne l'ai pas utilisé, mais je me trompe peut être, je vais réécrire le code pour voir:
Hier soir en recherchant dans l'aide de Delphi la fonction copy j'ai écrit ce code qui semble fonctionner
A partir d'un bouton j'appelle chaque table avec:
//=====================================
../..
if R5.Checked then begin
AfficheRecherche(DM.tblClients);
AfficheRecherche(DM.tblPRO);
AfficheRecherche(DM.tblChantiers);
AfficheRecherche(DM.tblDetailChantier);
end;
If ListView1.Items.Count = 0 Then
Application.MessageBox('Chaîne recherchée non trouvée', 'Information',mb_Ok);
.../...
//=============================================================
procedure TfrmRecherche.AfficheRecherche(MaTable:TADOTable);
var
i: Integer;
y:integer;
pos:integer;
Info: String;
Critere:variant;
PrevValue:variant;
ListAjout : TListItem;
begin
critere:=Edit1.Text; // Le mot clé
MaTable.Open;
MaTable.First;
While Not MaTable.EOF do
begin
for i := 1 to MaTable.FieldCount - 1 do begin
pos:=0;
Info := MaTable.Fields[i].FieldName ;
if not VarIsNull(MaTable.Fields[i].Value) then
PrevValue:= MaTable.Fields[i].Value;
for y := 1 to length(PrevValue) do begin
pos:=pos+1; //On incrémente la position dans la chaîne
if UpperCase(Copy(PrevValue,pos,Length(Critere))) = Uppercase(Critere) then
begin
//On ajoute les champs dans la listbox
ListAjout := ListView1.Items.Add;
ListAjout.Caption := MaTable.Name; // La table où a été trouvée le mot clé
ListAjout.SubItems.Add(Info); // Le nom du champ
ListAjout.SubItems.Add(PrevValue); // La valeur du champ
listajout.SubItemImages[0] := 1;
Break; end;
end;
end;
PrevValue:=null;
MaTable.Next;
end;
end;