Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Simple filtrage: "Têtutesse oblige!" [ Base de données / Autre ] (leader2000)

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
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
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
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
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

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é 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 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 envoyé des code ESCAPE à une imprimante sur port série ? [ par rebelor91 ] Bonjour à tousje suis en D5, j'aimerais faire un tout petit programme exe contenant une sequence de code Escape à envoyer à une imprimante brancher su syntaxe d'une requete sql [ par kam81 ] bonsoir,j'ai une requête sql qui renvoie un nom suivant le code correspondant, le code est structuré sous la forme : dzxyabc où z,x,y,a,b,c sont des c Creation d'une base de données par code [ par richarddum ] Bonjour, Je cherche la solution pour créer une base de données Firebird directement par mon application Delphi, qui utilise les composant DBEXPRESS. Quel prix demander pour un logiciel qu'on me demande? [ par ericdivx ] Bonjour, je suis étudiant, et l'on me demande un logiciel pour une équipe de foot.Je ne sais pas encore exactement de quoi il s'agit, mais je pense qu [Composant] créé dans le code [ par ffomnislash ] Bonjour , Je me heurte à un petit probleme en Delphi et mes recherches ne donne rien de bien concluant. J'ai besoin d'avoir un nombre variable de T Racisme en l'air [ par hurrycane ] salam pourquoi ce code a été désactivé : http://www.delphifr.com/code.aspx?ID=34863 par les admins est ce juste parceque c'est un musulman qui la fait Parametres bdp [ par kapoue2000 ] Bonjour, Lorsque j utilise le génrérateur de code pour ajouter un paramètre à la SelectCommand de mon bdpDataAdapter tout fonctionne correctement mais demande un code source delphi [ par inll077 ] salut, je demmandes des codes sources delphi sur l'identification des personnes par la rétine (la biométrie rétinniène)par la methode des k plus proch


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 8,268 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.