Je me demande pourquoi la discussion est marquée comme résolue alors que je n'ai pas encore résolu mon problème. J'ai toujours un problème avec mon code. Voici ce que j'ai utilisé comme code :
Dans le Edit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 procedure TFMAJ_Sit_Cl5.Edit9Change(Sender: TObject); Var CountR : Integer; Begin if Edit9.Text = '' then AT_Prv.Filtered := False Else Begin AT_Prv.Filter := Format('Produit %s %s', ['LIKE', QuotedStr(Edit9.Text + '%')]); AT_Prv.Filtered := True; CountR := AT_Prv.RecordCount; LabelX.Caption := IntToStr(CountR); if CountR = 0 then Begin LabelX.Visible := True; LabelX.Caption := 'Enregistrement " ' + Edit9.Text + ' " Non Existe'; End Else LabelX.Visible := False; End; end;
Dans le ADOTABLE !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TFMAJ_Sit_Cl5.AT_PrvFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept := Copy(LowerCase(DataSet['Produit'].AsString),1,Length(edit9.text))=LowerCase(edit9.text) end;
erreur :
Bonjour,
@sergio_is_back ce n'est pas tant un déterrage que un lien que je garde sous le coude, j'ai ou plutôt j'avais, du D3 en maintenance et comme windows n'aime pas les anciens formats hlp et fait sauter l'installation de l'ancien lecteur d'aide presque à chaue mise à jour, je gagne du temps P.S. je ne comprends pas le
parce que ce n'est aps vous qui avez initier la discussion.
vous avez oublier que j'avais stipuler "en remplacement de"J'ai toujours un problème avec mon code.
Dans la discussion que j'avais pointé avec ferhart, OnDev indiquait comment utiliser OnfilterRecord qui vous avait déjà suggéré l'utilisation de OnFilterRecord.
Bref c'est l'un ou l'autre pas les deux.
Pourquoi faut-il que j'ai l'impression d'écrire à votre place ? Bien sûr il faudra peut-être adapté à D7, ceci est écrit à la volée sans test sur Delphi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TFMAJ_Sit_Cl5.Edit9Change(Sender: TObject); Var CountR : Integer; begin AT_Prv.Filtered:=Trim(Edit9.Text)<>'' AT_Prv.Refresh; if AT_Prv.RecordCount=0 then LabelX.Caption := 'Enregistrement " ' + Edit9.Text + ' " Non Existe' else LabelX.Caption := IntToStr(AT_Prv.RecordCount); end;
Dans le ADOTABLE !
Dommage j'aurai bien aimé un test avec StartsWith
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TFMAJ_Sit_Cl5.AT_PrvFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept := Copy(LowerCase(DataSet['Produit'].AsString),1,Length(edit9.text))=LowerCase(edit9.text) end;
Cependant, j'aimerais vous faire remarquer que le message d'erreur est loin d'être le même qu'un problème de syntaxe.
Un filtre ne peux pas être utiliser sur une table détail
Vous avez oublié de nous indiquer, en ne nous indiquant pas que cette table était déjà filtrée, du fait qu'il s'agissait d'une table "détail". voilà ce que c'est que de se brancher sur une discussion dont vous n'êtes pas l'auteur, ommettant ainsi des explications CAPITALES
Si vous voulez garder la recherche, il va falloir revoir l'utilisation de la Table, passer à une Query (Select <liste des colonnes> from Tabledetail where codemaitre=:code)
ce qui, de mon point de vue sera beaucoup plus "économique" ne terme de temps d'accès sur la partie filtre
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Tu utilises les deux codes pour la même opération alors il y a une petite interférenceJ'ai toujours un problème avec mon code. Voici ce que j'ai utilisé comme code :
Soit le premier cas via le OnChange du TEdit:
Ou via l’événement OnFilterRecord du AdoTable qui utilise également OnChange du TEdit pour activer et désactiver le filtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TForm1.SearchEditChange(Sender: TObject); var S:string; begin S := Trim(SearchEdit.Text); if S = '' then begin TagsTable.Filtered := False; end else begin TagsTable.Filter := 'ManagedTxt LIKE '+QuotedStr(S+'%'); TagsTable.Filtered := True; end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure TForm1.TagsTableFilterRecord(DataSet: TDataSet; var Accept: Boolean); var s:string; begin S := Trim( SearchEdit.Text ); Accept := StrLIComp(PChar(DataSet.FieldByName('ManagedTxt').AsString), PChar(S),Length(S)) = 0; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TForm1.SearchEditChange(Sender: TObject); begin TagsTable.Filtered := Trim(SearchEdit.Text) <> ''; TagsTable.Refresh end;
plutot StartText et semble que cela a été loupé totalement :
Un code issu dans outil que j'ai codé avec la possiblité de fitrer sur le champ de son choix FFormula := Format('%s LIKE :pFilterValue', [LFieldName]); qui génère le SQL à la volée puis utilise les paramètres.
And ADO, on peut utiliser aussi un paramètre pour le LIKE, en tout cas SQL Server le supporte, je n'ai pas vu quelle était la base de données.
Et si c'est une relation maitre-detail , faudrait plutôt utiliser une Query SQL, les paramètres permettant de chainer les dépendances, on peut ainsi ajouter directement dans le WHERE le filtre sans tout les ajouts mentionnés dans ce sujet
Peut-être qu'il faudrait songer ) arrêter le développement logiciel, si déjà, pour vous, comprendre un forum est hors de votre portée, déjà autant de temps pour un problème aussi simple qui se résout en 5 minutes, c'est choquant !
D'ailleurs en créant une nouvelle discussion, penser à fournir un lien vers les sujets déjà existants sur le même projet pour mettre un peu le contexte et ainsi que les sujets comme celui-ci qui sert de base de réflexion, cela évite que l'on propose des pistes déjà explorées qui n'ont pas abouti issu du forum ou de stackoverflow par exemple
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
Bonjour,
J'aurais accepté avec amour ta critique si tu étais l'un des membres les plus actifs que je salue :
sergio_is_back
SergioMaster
Volid
ShaiLeTroll
Ce sont des gens qui aident vraiment les autres. Mais toi, c'est la première fois que je te vois intervenir. Je me demande si tu es arbitre ou modérateur ? Au moins, tu aurais dû ajouter une réponse concernant le problème que je rencontre ; ça aurait rendu ta critique (ou ton attaque) plus jolie.
Merci de laisser les modérateurs officiels faire leur travail.
Bonjour,
Tu posais une question dont je connaissais la réponse j'y ai donc répondu tout simplement, c'est dommage de considérer cela comme une critique ou une attaque.
Je ne suis ni modérateur, ni arbitre, je suis juste un vieil ( et vieux ) utilisateur de ce site, d'ailleurs j'y suis membre bien avant 2005 ( comme c'est précisé sur mon profil ) à l'époque ce n'était qu'un forum de discussion, il n'y avait pas les actualités et j'y étais plus + actif que maintenant.
Maintenant, je n'ai plus trop le temps.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager