begin process at 2012 02 11 14:21:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Base de données

 > 

Autre

 > 

Simple filtrage: "Têtutesse oblige!"


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Simple filtrage: "Têtutesse oblige!"

jeudi 15 mai 2008 à 16:16:38 | Simple filtrage: "Têtutesse oblige!"

leader2000

Salut!

Je me demande si c'est un oubli ou c'est juste une question d'ignorance.

J'ai une table contenant deux champs: CodeBar et Prix. Et sur mon Tform j'ai les composants suivants: Tedit1 et Tedit2.
Dans le OnChange de mon Tedit1, j'ai les codes suivants pour permettre le filtrage:

Adotable1.filter:='CodeBar=' +quotedstr(edit1.Text);
Adotable1.filtered:= True;
Edit2.Text:= Adotable1.FieldValues['prix']; // bloquage ICI

Ben, quand j'écris par exemple le nom d'un code bar dans mon Tedit1. Il fait parfaitement du filtrage en affichant dans le Tedit2, le prix juste à l'aide de la ligne de code colorée en rouge.

Mais quand j'utilise mon le lecteur Code bar... il tente de bien faire la lecture... soudainement le programme se bloque au niveau de la ligne colorée de rouge.

Tandis que lorsque je saisi manuellement au truchement du clavier le code bar dans le Tedit1, la donnée du prix s'affiche normalement dans le Tedit2. Mais alors, la même operation faite avec le dit lecteur. Il y a bloquage sur la dite ligne en rouge. Que faire?

Merci d'avance,
Developper est une dimension pour moi.
Leader2000

vendredi 16 mai 2008 à 08:21:27 | Re : Simple filtrage: "Têtutesse oblige!"

cantador

Membre Club Administrateur CodeS-SourceS
bonjour leader2000,
avec le lecteur, quelle est la valeur dans :

quotedstr(edit1.Text);
?

ajouter ceci en attendant :

Adotable1.filtered:= false;

Adotable1.filter:='CodeBar=' +quotedstr(edit1.Text);
Adotable1.filtered:= True;
Edit2.Text:= Adotable1.FieldValues['prix']; // bloquage ICI
vendredi 16 mai 2008 à 12:46:51 | Re : Simple filtrage: "Têtutesse oblige!"

leader2000


Salut!

J'ai essayé les codes donnés. Ça n'a malheuresement pas marché! Ça affiche le prix dans Edit2. Au fait, je ne devais pas mettre du "next" sinon il passerait chaque fois à la deuxième ligne. Le code en rouge m'a permis d'actualiser toujours ma table.
Ma préoccupation est de faire juste une boucle qui me permettra l'affichage du prix d'un produit à un autre, chaque fois qu'il sera scanner.


Adotable1.filter:='CodeBar=' +quotedstr(edit1.Text);
Adotable1.filtered:= True;
Adotable1.filtered:= False;
Adotable1.Next;
Edit2.Text:= Adotable1.FieldValues['prix'];
Adotable1.Refresh;

 

Developper est une dimension pour moi.
Leader2000

vendredi 16 mai 2008 à 20:53:40 | Re : Simple filtrage: "Têtutesse oblige!"

cantador

Membre Club Administrateur CodeS-SourceS
je ne pige pas grand chose à tes explications car 
Au fait, je ne devais pas mettre du "next"
dans le code fourni il n'y avait pas de next et par ailleurs tu ne réponds pas la question posée..
valeur dans :
quotedstr(edit1.Text);
et je ne vois vraiment pas ce que next vient faire ici..(car cette instruction sert à se déplacer sur l'enregistrement suivant..)
et enfin un filtre ne déplace pas le pointeur..
il faut faire un locate si tu tiens à te positionner sur l'enregistrement précis
sinon tu peux faire un lookup à condition de récupérer la clé du prix avec le lecteur.

cantador
samedi 17 mai 2008 à 15:25:36 | Re : Simple filtrage: "Têtutesse oblige!"

leader2000

Ok. J'ai été trop brut dans mon expression. Je crois que je veux resumer tout ça pour être plus explicite.
Pour repondre à ta question du Edit1, il reçoit la valeur du code Bar. C'est dire que, les codes lus par le lecteur seront affichés dans l'Edit1.

Au fait, j'ai compris qu'il s'agit d'une sorte de refus d'écrire manuellement le code. Je prends un exemple très concret:
ma Table contient deux champs: "CodeBar" et "Prix". C'est dire que Edit1 pour affichage "Code Bar" et edit2 pour affichage "Prix".
En runtime; si je vais dans mon Dbgrid pour copier un code à partir du champ "codeBar" et le coller dans l'Edit1. L'affiche dudit produit apparaît sans problème dans l'Edit2.
Mais alors, si j'écris manuellement le même code à partir de l'edit1. Oh lala lala, c'est là où s'pose le problème. Le programme s'plante TOTALEMENT et s'arrête sur la ligne que j'ai colorée en rouge.
Pour finir, je suis convaincu que c'est ce que le lecteur fait. Faisant la lecture du code bar avec le lecteur...le programme s'plante avant même d'entamer le deuxième chiffre du code bar. Voilá tout!
Comment pourrai-je resoudre ce problème.

Merci,


...OnChange...

Adotable1.filter:='CodeBar=' +quotedstr(edit1.Text);
Adotable1.filtered:= True;
Edit2.Text:= Adotable1.FieldValues['prix']; // bloquage ICI


Developper est une dimension pour moi.
Leader2000

samedi 17 mai 2008 à 18:05:05 | Re : Simple filtrage: "Têtutesse oblige!"

cantador

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Mais alors, si j'écris manuellement le même code à partir de l'edit1. Oh lala lala, c'est là où s'pose le problème. Le programme s'plante TOTALEMENT

C'est normal leader2000 puisque ton évènement OnChange est actif et donc dès que tu tapes le premier caractère paf ton OnChange se déclenche et crée un filtre avec ce premier caractère..
on imagine le résultat..

Si tu veux pouvoir taper ton code manuellement, il faut nécessairement déclencher quelque chose lorsque ta saisie est terminée..

Mais qui peut le savoir quand c'est fini ?
sauf bien sûr si tous tes codes ont la même longueur

auquel cas il suffit de tester la longueur de ta chaîne sur le OnKeyPress ou le OnkeyDown et dès qu'elle est atteinte tu exécutes ta procédure de filtre.
sinon tu poses un bouton et tu cliques lorsque la saisie est terminée.

Dans les deux cas, il faut encapsuler tes écritures par un traitement des erreurs

try
...
...
except
showmessage('code erroné');
exit;

end;

ce qui évitera les plantages du programme.

si ça te convient merci de cliquer sur réponse acceptée

cantador
samedi 17 mai 2008 à 19:48:27 | Re : Simple filtrage: "Têtutesse oblige!"

leader2000

Oui Cantador,
les dits codes marchent parfaitement bien que toujours maintenu dans le même évenement (OnChange). Plus de blocage et le filtrage se fait bien! Quand je dis qu'il se fait bien, c'est parce que je le vois à travers mon Dbgrid.
Seulement, l'affichage du contenu du champ "prix" ne s'affiche pas dans l'Edit2, après écrit le code dans l'Edit1.
Peux-tu jeter un coup d'oeil là où j'ai mis la fameuse ligne de code (colorée en vert).
Si tu peux bien apporter ton aide...Cela faciliterai le clique sur "reponse acceptée". Je suis convaincu que cette solution aiderai quelques uns.

...OnChange...
try
Adotable1.filter:='CodeBar=' +quotedstr(edit1.Text);
Adotable1.filtered:= True;
except
showmessage('code erroné');
Edit2.Text:= Adotable1.FieldValues['prix']; //  plus de bloquage, juste une question d'affichage!
exit;
end;


Merci d'avance,

Developper est une dimension pour moi.
Leader2000
samedi 17 mai 2008 à 21:55:12 | Re : Simple filtrage: "Têtutesse oblige!"

cantador

Membre Club Administrateur CodeS-SourceS
try
Adotable1.filtered:= false;
Adotable1.filter:='CodeBar=' +quotedstr(edit1.Text);
Adotable1.filtered:= True;
Edit2.Text:= Adotable1.FieldValues['prix'];

except                                       // ici on ne traite que l'erreur
showmessage('code erroné');
exit;
end;

nb :
il te manque le traitement de la chaîne saisie manuellement..
je ne peux pas faire plus car tu ne réponds aux questions posées..

cantador
dimanche 18 mai 2008 à 18:31:03 | Re : Simple filtrage: "Têtutesse oblige!"

leader2000

Cantador!

Avant toute chose, laisses-moi repondre très rapidement à ta question avant que tu ne te fâches . Le traitement de la dite chaîne est numérique.
J'ai omis tout ce temps de t'informer qu'à chaque plantage vient ce message:

Project Project1.exe raixed exeception class EvariantTypeCastError with message'Could not convert variant' of type (Null) into type (String)'. Process stopped. Use Step or Run to continue.

Tes codes de traitement d'erreur marchent très bien. Je rappel que le filtrage  s'passe bien. Parce que j'arrive d'ailleurs à voir les données filtrées dans mon Dbgrid. C'est juste la donnée "prix" qui ne s'affichage pas dans le fameux Edit2.

Cool,

Developper est une dimension pour moi.
Leader2000

lundi 19 mai 2008 à 10:45:04 | Re : Simple filtrage: "Têtutesse oblige!"

cantador

Membre Club Administrateur CodeS-SourceS

Je ne me fache presque jamais !  (mdr)
C'est un plaisir de répondre aux questions..
J'aime bien aussi appeler un chat un chat.

'Could not convert variant' of type (Null) into type (String)'

Ce message est la traduction en anglais de mes explications fournies..

Il apparaît dans l'EDI mais en lançant l'exécutable c'est l'autre('code erroné') qui doit sortir.

une solution consiste à supprimer le OnChange et mettre :
Ex:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
LongeurDeMaChaine : integer;
begin
  if Key < ' ' then exit;
  if Length(Edit1.Text) = LongueurDeMaChaine then
  MaProcedureDeFiltre;
end;

Ainsi la procédure MaProcedureDeFiltre ne se déclenchera que lorsque la chaîne sera complète et le cas Null ne se produira pas, ne restera que les codes erronés..

Mais il y a encore beaucoup d'autres possiblités.

Mais chaque jour suffit à sa peine !

cantador



1 2

Cette discussion est classée dans : code, prix, filtrage, tedit1, tedit2


Répondre à ce message

Sujets en rapport avec ce message

Comment faire repeter des données Tedit1 vers Tedit2 [ par leader2000 ] Salut! J'aimerai bien vous posez une simple question pratique que je n'arrive pas à resoudre. J'ai deux Tedits (Tedit1 et Tedit2). J'aimerai faire r Toujours le problème de filtrage [ par youhibadelphi ] Salut J’ai posé un problème concernant le filtrage des enregistrements mais malheureusement la discussion a été clôturée par l'administration pour des filtrage BD Access avec Delphi [ par nassim25 ] procedure TfrmFamille.codeKeyUp(Sender: TObject; var Key: Word;  Shift: TShiftState);Var   Erreur : Integer;beginErreur:=0;TableFamille.Filtered:=Fals calcul valeur champs de toute la table [ par siahmedaek ] j'ai une table produit qui contient un champ prix_achat_pro ce que je veut obtenir a traver un query c'est la somme de ce champ c a d desi prix_ach fermeture du projet [ par youhibadelphi ] Salut Dans un bouton j'ai écris le code suivant pour fermer mon projet: var rep:word; Begin rep:=messagedlg('etes vous sur de vouloir quitter'),mtinf Ce que signifie $ dans le code delphi ? [ par khaliloenit ] Bonjour, je suis en train de convertir un programme en Delphi à C + + et jusqu'à ce faisant que je trouve une constante qui a des valeurs différentes algo d'arrangement ( type quicksort) [ par dj_noway ] Bonjour tout le monde, Je dois considérer l'idée suivante pour réaliser un arrangement*: 1)On choisit une clé de référence compatible avec l'interva Filtre Sur Deux DbGrid [ par siahmedaek ] salut... j'ai Vu le sujet posté (Filtre sur l'evenement OncellClic) et j'ai cru que c peut etre ca ressemble a ma quetion mais.... ------> dabord j'ai touche clavier [ par loveyara ] bjr a tous le monde, j'ai une db grid dans lequel je veux désactiver la touche bas du clavier s'il y a un condition précise voila le code [color=gree Delphi 2009, nouvelle façon de quitter l'IDE avec du code!!! GENIAL! [ par f0xi ] avec l'introduction des classes generique, nous avons egalement un nouveau moyen de quitter trés rapidement l'IDE de Delphi 2009! GENIAL![^^happy10]


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,866 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales