Problème avec ComboBoxGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

Bonsoir à toute l'équipe
@Ollivier
Je n'ai pas très bien compris ce que tu voulais me faire comprendre, j'ai testé ton code mais je ne vois pas la relation avec mon problème, peut être que tu voulais me montrer la méthode à utiliser sur les combos, oui, effectivement, ta méthode est plus souple mais ce n'est pas exactement ce que je souhaite voir. Je rappelle qu'il s'agit d'une affectation de texte dans un combo éditable et aussi la récupération d'un texte à partir d'un combo (texte affiché visible et non pas le texte sélectionné sur la liste), le texte affiché sur le combo est saisi manuellement par l'utilisateur (il se pourrait que ce texte n'existe pas sur la liste déroulante). Je ne sais pas si je me suis fait bien comprendre.... Savoir ce qui a été sélectionné sur la combo ne pose pas problème, connaître son indice ne pose pas problème, savoir ce que l'utilisateur a fait sur la combo aussi ne pose pas problème, le seul problème que j'ai, c'est de récupérer le texte qui est affiché sur le combo, et la seule solution en Pb (d'après mes connaissances) est d'utiliser GetGadgetText() c'est fait pour ça. Le setGadgetText() également présente problème toujours sur combo éditable. Encore une fois, je répète que ces deux fonctions fonctionnent très bien sur l'ensemble des cas sauf sur un cas bien précis (au niveau du bon de livraison) par contre au niveau du bon de réception, ça fonctionne et pourtant c'est le même principe (presque le même traitement), bizarre n'est ce pas? Oui, vous allez tous me dire que l'erreur provient de mon code (possible), on verra car je suis en train de décortiquer avec un microscope ligne par ligne mot à mot .... en faisant des débug un peu partout... pas à pas... pas de résultat jusqu'à présent, j'ai constaté une seule chose nouvelle: c'est que l'affectation (setGadgetText()) ne marche pas la première fois, mais à partir de la 2ème fois, ça marche.... C'est déjà un indice...

@G-Rom
Ma solution de supprimer ton ClearItems() ne suffit pas ?

Non, malheureusement, ça n'a rien changé. Ce n'est pas ClearItems() l'erreur, c'était plus tôt le test (if countGadgetItems()<=0), c'est ce test qui était faux, mais ce n'est pas méchant car logiquement, s'il va trouver que le countGadgteItems <=0, il va l'initialiser (c'est à dire pas de changement pour le gadget), normalement le test corrigé est comme suit:

Code : Tout sélectionner

If CountGadgetItems()>0 ;(au lieu de <=0)
   ClearGadgetItems()
endif

Mais il n'y aucune incidence sur mon problème (aucune relation)
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

MAINTENANCE DU LOGICIEL DE GESTION COMMERCIALE
Vous savez tous que j'ai commencé à refaire mon code selon les nouvelles méthodes et conseils de l'équipe que je remercie beaucoup. Avant d'aller plus loin, je suis déjà bloqué bien au début du code.
1. Dois-je choisir STRUCTURE ou MODULE (je ne comprends pas la différence entre eux)?
2. Si je choisis STRUCTURE pour définir les champs du fichier client comme suit:

Code : Tout sélectionner

Structure Fclient
  Codeclient.s
  NomClient.s
  Adres.s
  Tel.s
  Obs.s
EndStructure

Quelle est l'utilité de cette structure quand je passe à la mise à jour du fichier client? L'utilisateur a renseigné les champs clients et il a appuyé sur le bouton (valider ou ajouter) ce qui va le pointer à la procédure ValiderClient(). Quelqu'un pourrait il me donner juste un aperçu ce que va contenir cette procédure? (notamment le rapport entre structure et fichier client) en abrégé s'il le faut.
Merci
Win7 (x64) 64 bits Pb 5.72
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec ComboBoxGadget

Message par G-Rom »

Utilise les structures, voit les structures comme une possibilité de créer une variable "avancée", qui "possède plusieurs champs", tu verras les modules plus tard...

Code : Tout sélectionner

procedure ValiderClient( *client.Fclient ) 


 if *client\CodeClient = ""
  ...erreur
  ...
 endif
 
 ...

endprocedure 


..
..
clientCourant.Fclient 
..

ValiderClient ( @clientCourant )
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

Bonsoir G-Rom
procedure ValiderClient( *client.Fclient )
Est ce que c'est nécessaire d'ajouter le paramètre (*client.Fclient) ? puisque la procédure ValiderClient() fera toujours le même traitement sans aucune condition (c'est de valider les champs de la table fclient)?

if *client\CodeClient = ""
...erreur
...
endif

Le fait de tester (*client\CodeClient) signifie que la saisie des champs est transférée directement dans la structure?
(*client\CodeClient=getgadgettext(#Client_CodeClient)) C'est bien ça ou je me trompe? Autre question: Est ce que seulement l'enregistrement en cours qui sera enregistré dans la structure ou l'ensemble de la table? Si tous les enregistrements de la table seront copiés dans la structure, cette opération sera faite à quel niveau et pourquoi?
*ClientCourant.Fclient
je n'ai pas compris d'où ça vient >> *ClientCourant.Fclient (est ce une 2ème structure?)
IDEM pour @clientCourant
Merci G-Rom et excuses moi si je t'embête avec toutes ces questions (mais elles sont vraiment nécessaires pour bien débuter)
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Problème avec ComboBoxGadget

Message par microdevweb »

Ben je penses que oui, puisque je suppose que ce ne sera pas toujours le même client qui sera validé.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

@Bonjour Microdevweb
Ben je penses que oui, puisque je suppose que ce ne sera pas toujours le même client qui sera validé.
Si je comprends bien, la structure contient donc tous les enregistrements de la table client? C'est bien ça? Si oui, à quel niveau faut il la remplir et pourquoi?
Merci
Win7 (x64) 64 bits Pb 5.72
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec ComboBoxGadget

Message par G-Rom »

Bonjour Omega, c'est exactement comme des variables normale , tu les remplis quand tu veut , exemple simple avec une liste de client bateau :

Code : Tout sélectionner


Structure Client
  Nom.s
  Prenom.s
  Telephone.s
EndStructure

NewList MesClients.Client()

Procedure DebugClient(*client.Client)
Debug *client\Nom  
Debug *client\Prenom  
Debug *client\Telephone
EndProcedure


; Nouveau client

AddElement( MesClients() )
MesClients()\Nom = "Pierre"
MesClients()\Prenom = "Durand"
MesClients()\Telephone = "0645064506"


; Nouveau client

AddElement( MesClients() )
MesClients()\Nom = "Jean"
MesClients()\Prenom = "Bon"
MesClients()\Telephone = "0744064506"


ForEach MesClients()
  Debug "-------------------------"
  DebugClient( @MesClients() )
Next 

Chaque nouveau client peut être rempli par le biais d'une base de donnée , d'un fichier texte , de donnée réseau , etc...
si cela peut t'aider , backup a fait un tuto la dessus ( les structures )

https://www.purebasic.fr/french/viewtopic.php?t=893
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème avec ComboBoxGadget

Message par falsam »

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

Bonjour G-Rom
...c'est exactement comme des variables normale , tu les remplis quand tu veut...
Dans ce cas, quelle est l'utilité des structures ? Je suis d'accord qu'une structure (simple) est utile dans le cas où on aura besoin de mémoriser plusieurs (enregistrements) à l'aide de AddElement() et ForEach...next pour les lire. Là ok, sa nécessité se comprend (je l'ai déjà utilisé sur mon fameux code que tu as téléchargé), donc ce n'est pas nouveau pour moi quand il s'agit de l'utiliser dans ce sens (plusieurs éléments), mais si c'est pour contenir uniquement un seul élément, pourquoi ne pas utiliser carrément des variables mémoires en global (exemple: client$, adres$, Tel$ )? Quelle est la différence entre ces deux déclarations en matière d'avantage?
Bonjour Falsam
et aussi l'aide en ligne https://www.purebasic.com/french/docume ... tures.html
J'ai déjà vu ça plusieurs dizaines de fois, mais sans grand intérêt car ce qui m'intéresse surtout, c'est la relation entre les enregistrements des tables sqlite et les structures, je n'ai pas trouvé un seul exemple sur ce cas précis...[/quote]
Sur mon ancien code, j'utilisais des variables mémoire pour mettre à jour mes tables

Code : Tout sélectionner

Nomclient$= getgadgettext(#Nomclient)
NumTel$= getgadgettext(#NumTel)
ValiderClient() 

Si j'utilise une structure, je suppose que je dois faire ceci:

Code : Tout sélectionner

Client/Nomclient= getgadgettext(#Nomclient)
Client/Tel= getgadgettext(#NumTel)
ValiderClient() 

Quel est donc la différence entre ces 2 codes? C'est ça ce que je veux comprendre

Merci
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Problème avec ComboBoxGadget

Message par microdevweb »

Je t'ai fais un petit tuto sur les structures et un sur module(en cours)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec ComboBoxGadget

Message par G-Rom »

Les structures on un unique but de simplifier ton code à la lecture.
Evidement du pourra toujours utilisé des variables globales a la place , mais moins pratique...
Regarde le meme code que j'ai posté sans structures :

Code : Tout sélectionner



Global NewList Nom.s()
Global NewList Prenom.s()
Global NewList Telephone.s()

Global NombreDeClient.l = 2


Procedure DebugClient(id)
  SelectElement( Nom(), id)
  Debug Nom()
  SelectElement( Prenom(), id)
  Debug Prenom()
  SelectElement( Telephone(), id)
  Debug Telephone()
EndProcedure



; Nouveau client
AddElement(Nom())
Nom() = "Dupont"
AddElement(Prenom())
Prenom() = "Jean"
AddElement(Telephone())
Telephone() = "00000000000"


; Nouveau client
AddElement(Nom())
Nom() = "Robert"
AddElement(Prenom())
Prenom() = "Pierre"
AddElement(Telephone())
Telephone() = "00000000000"


For i = 0 To NombreDeClient - 1
  Debug "------------------"
  DebugClient(i)
Next
Inconvénient , 3 listes à maintenir au lieu d'une seule.
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

On aurait pu faire comme ceci:

Code : Tout sélectionner

Structure Client
Nom.s
Prenom.s
Telephone.s
EndStructure
........
AddElement(Client())
Client()\Nom= "Durant"
Client()\Prenom= "Pierre"
Client()\Telephone="0645064506"
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Problème avec ComboBoxGadget

Message par microdevweb »

Ce qui est certain au moins, c'est que tu aura réussis à faire un des plus long post du forum :mrgreen:
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Problème avec ComboBoxGadget

Message par microdevweb »

Maintenant si tu veux et moyennant une somme raisonnable (selon le cahier des charges) je te refais le soft (en Pb, Java) aux choix.

ta Bd ne sera malheureusement pas réutilisable et il faudra faire un utilitaire pour recopier toutes tes tables dans une même base.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

@Microdevweb
Ce qui est certain au moins, c'est que tu aura réussis à faire un des plus long post du forum
ça prouve que personne jusqu'à présent n'a été capable de donner une explication logique à mon problème qui reste posé. C'est moi qui va trouver certainement le pourquoi... une question de temps...
Maintenant si tu veux et moyennant une somme raisonnable (selon le cahier des charges) je te refais le soft (en Pb, Java) aux choix.
Le soft existe et il est opérationnel. Mes clients l'utilisent sans problème depuis des années. Donc, je n'ai pas besoin de le refaire. Et puis s'il faut le refaire, c'est moi seul qui devrais le refaire et personne d'autre, en plus je ne pense pas que tu pourrais le faire car c'est un logiciel robuste et il est intégré, c'est à dire qu'il génère automatiquement les écritures comptables et produits instantanément le grand livre, la balance générale et le bilan comptable en plus de tous les états de stock et commerciaux...
Win7 (x64) 64 bits Pb 5.72
Verrouillé