12 | |||||
Auteur | Messages | ||||
---|---|---|---|---|---|
Zyfriala | #16 Posté le 6/3/2017 à 10:41:47 | ||||
agricola felem videt | Bonjour à tous, j'ai du m'absenter quelques jours et j'ai découvert vos nombreuses réponses ce matin et je vous en remercie. Comme je le soulignais, le "but ultime" n'était pas de passer des variables dans le SQL (quoique ce soit fort utile) mais de variabiliser le nom de colonne par rapport au Result de façon à récupérer n'importe quelle colonnne incluse dans le SQL et... j'ai en fin trouvé la solution J'espérais que ce soit une question de "syntaxe" et...c'était exactement ça! Je ne sais pas à quoi sert exactement le ! après Result mais dès que je l'ai enlevé tout a fonctionné... Mon but c'était, dans ce cas, (mais le 'modèle' est bien sur modifiable et extensible) de récupérer les valeurs de 3 colonnes : 2 "fixes" (déjà déterminées) et 1 colonne variable. - Les valeurs 's_TableChoisie_h' et 's_ColonneChoisie_h' sont les variables ayant récupéré les valeurs des choix 'Table' et 'Colonne' dans 2 combobox - Suivant l'idée de Gambix je créé 2 variables (s_Col1, s_Col2) pour mes colonnes "fixes" - j'inclus mes variables 'colonnes' et 'schéma/table' dans mon SQL - j'exécute mon Result - je récupère mes colonnes d'après leur nom de variable et j'écris les valeurs récupérées dans une gridView
L'intérêt évident de pouvoir faire cela c'est qu'on peut lire "à volonté" n'importe quelle colonne du Result sans avoir à la nommer..."nommément" Si j'ai (par exemple) 20 tables (Combobox 1) avec 20 colonnes (Combobox 2) chacune je peux récupérer les 400 valeurs possibles au travers d'une seule procédure. Si on ajoute à ça la possiblité de passer des paramètres à la fonction les possibilités sont infinies. Ce sont des procèdures que j'emploie "classiquement" avec les autres langages que j'ai cité (VB, C#, Java) ça m'étonnait qu'on ne puisse pas le faire avec Gambas J'espère être clair pour tous, sinon n'hésitez pas à poser d'autres questions. Merci à tous. | ||||
Zyfriala | #17 Posté le 6/3/2017 à 10:54:00 | ||||
agricola felem videt | encore plus simple même, en ce qui concerne l'écriture dans la GridView
| ||||
gambix | #18 Posté le 7/3/2017 à 08:51:02 | ||||
Faire simple ! | Je me dois de réagir car ton code ressemble a tout sauf a du Gambas. Primo évite les underscores (_) ils ont un fonction précise au niveau du langage et surtout pour l'ide. Sub Toto_change est un évènement Sub _Toto est une fonction masquée. Ensuite le fameux ! est un SUCRE (Sugar). C'est a dire que c'est une macro fonction traduite par gambas avant compilation. Donc Result!MonChamp devient Result["MonChamp"] avant d'être compilé. Ça fonctionne aussi avec les collections bien sur. Disons que c'est plus facile a saisir quand les champs appelés sont fixes. Il y a trois domaines a connaitre en Gambas enfin trois widgets Gridview (event Data), DrawingArea (event Draw), et les conteneurs avec l'arrangement automatique. Quand on a maîtrisé ces trois objets tout le reste est basé sur les même archétypes. Bien Voici un code semblable au tiens, il affiche tout le contenu d'un result dans une table quel que soit le nombre de champ ou de lignes. De plus tu peux avoir 1 million de resultats que l'affichage restera instantané même sur un rasp. Nécéssite un Formulaire, une gridview et un bouton
Moins de texte dans une signature c'est agrandir son espace. | ||||
Patrick | #19 Posté le 7/3/2017 à 16:49:29 | ||||
Bonjour, D'abord merci pour toutes ces astuces très intéressantes, j'aurais néanmoins une précision à demander : quand on écrit
| |||||
gambix | #20 Posté le 7/3/2017 à 17:23:49 | ||||
Faire simple ! | aurai-je loupé quelque chose ? Non tu n'a rien raté. Je met ça juste pour me rendre intéressant et aussi un peu pour rendre le code plus flexible car par ce biais une variable peu être utilisépour passer la table. Et sisi , le nom de table doit être quoté aussi. Mon but est de vous montrer le maximum de raccourci possible en gambas et dieu qu'il y en a ! Moins de texte dans une signature c'est agrandir son espace. | ||||
Zyfriala | #21 Posté le 7/3/2017 à 18:29:12 | ||||
agricola felem videt | Je me dois de réagir car ton code ressemble a tout sauf a du Gambas. Il n'y a en fait que quelques jours (en cumulé) que j'ai retrouvé Gambas mais je me dois d'intervenir à mon tour... La posture "gardien du temple" n'invite pas au dialogue... Malgré tout ce que j'ai pu faire je ne détiens aucune vérité, je me considère comme un "novice", ce que je suis peut être encore au bout de 15 années passées à développer et ça ne me viendrait jamais à l'idée de dire à quelqu'un que son code n'est pas "orthodoxe", au contraire je trouverais ça intéressant...
Je suppose que tu parles de "conventions d'écriture" et non de contraintes réelles au niveau de l'interpréteur (mon code date de 2011, Gambas est bien toujours interprété?) Si'il y avait un "souci" j'imagine que l'interpréteur (le compilateur?) lèverait une erreur, non? En conséquence de quoi mon/mes "erreur(s)" d'écriture ne pourrait exister... Si par exemple je considère ceci...
Ce genre d'écriture, même si tu m'affirmes que c'est la notation Gambas 'standard' est pour moi un cauchemar visuel, le '$' attire l'oeil bien plus qu'il ne le faudrait, on ne voit que lui ! Répété des dizaines ou des centaines de fois dans le codage d'un form je crois que ça me rendrait dingue... Au fil des années j'ai développé ma propre notation, qui me permet de lire et re-lire très rapidement même du code "oublié" depuis longtemps au fond d'une application (enfin...s'il n'est pas trop vieux). Elle n'est pas figée, elle s'adapte aux nécessités et contraintes que je peux rencontrer... Il est vrai que je n'ai pas la contrainte de devoir "partager" professionnellement mon code avec d'autres... Quand je "revisite" d'anciennes appplications il m'arrive bien souvent de sourire devant mon code d'alors, c'est rafraîchissant et ça remet souvent les choses en perspective...
C'était exactement l'explication ce que je cherchais. Enfin
Merci à toi mais...un peu plus de "souplesse"...? Bonne soirée à tous | ||||
gambix | #22 Posté le 7/3/2017 à 21:22:27 | ||||
Faire simple ! | Il n'y a en fait que quelques jours (en cumulé) que j'ai retrouvé Gambas mais je me dois d'intervenir à mon tour... Bien je m'excuse d'avoir utilisé des termes a l'emporte pièce... j'avoue que j'ai manqué de tact. Pour les underscores effectivement il s'agit bien d'une convention qui est a respecter pour que l'ide puisse bien repérer les events et les fonctions ou classe cachées. Ce genre d'écriture, même si tu m'affirmes que c'est la notation Gambas 'standard' est pour moi un cauchemar visuel, le $ est surtout la pour indiquer les variables globales privée c'est a dire déclarée via private. 'JE N'AI PAS BIEN COMPRIS COMMENT TU FAISAIS LE LIEN AVEC LE RESTE DU CODE... C'est un évènement de GridView levé par chacune des cases affichée (visible). Gambas a été surtout dévelloppé dans un esprit évènementiel. Beaucoup de chose s'effectue dans le code des évènements et c'est assez sympa au final a coder. Même si ça demande au début un peu de réapprentissage. http://gambaswiki.org/wiki/comp/gb.qt4/gridview/.data?l=fr Donc c'est dirctement l'objet GridView qui appelle cette fonction quand on lui a fournit le nombre de lignes et de colonnes. Dès que gridview a quelque chose a afficher il appelle la fonction data. Sauf si on a fait un assignation directe a une case. Dans ce cas l'évènement n'est plus généréet on est en mode conteneur de donnée. Grace au mode évènementiel on est dans une posture Donnée/Vue ou le gridview n'est qu'un afficheur des données contenues dans un result ou bien un au conteneur type tableau ou bien collection. GridView est bien plus encore c'est en faite un outil qui sert aussi de base a d'autre widget ayant un layout type table. Comme ListView, GridView, ColumnView, TableView. Dans leur cas on utilise l'event Draw http://gambaswiki.org/wiki/comp/gb.qt4/gridview/.draw?l=fr Il permet de dessiner le contenu de la case. Grace a la classe Paint on peut dessiner tout ce qu'on veut. Pour finir je ne suis pas Le gardien du temple... J'ai trouvé ton code intéressant et le problème n'était pas ta syntaxe mais le faite d'utiliser un code redondant qui est le contraire de ce qu'il faut faire pour bénéficier de la pleine puissance de Gb. Je connais certainement moins de languages que toi. Mais je connais Gambas plutot très bien. Mon but n'est pas de te vexer mais de te mettre sur le bon chemin. Gambas manque cruellement de documentation et de bon exemples. Et j'en suis en parti le responsable et aussi en partie parce que je manque de temps et le peu de temps que j'ai, je le passe a coder des widgets pour Gambas. Moins de texte dans une signature c'est agrandir son espace. | ||||
Zyfriala | #23 Posté le 8/3/2017 à 11:08:56 | ||||
agricola felem videt |
C'est ce que j'avais perçu, tu as certainement de grandes compétences au niveau de Gambas mais,ce serait dommage de gâcher ça parce que tes réponses sont un peu trop "rugueuses", ce qui tend immanquablement à faire fuir les gens... Quand je dis ça je ne pense pas qu'à moi mais aussi à tous ceux qui arpentent les forums "à la recherche de solutions que jamais ils ne trouveront" (clin d'oeil pour les + anciens ). Je sais à quel point il est parfois difficile de trouver des réponses claires même pour des langages aussi documentés que Java par exemple... Tu as absolument raison sur "la pleine puissance" d'un composant et dans tous les cas il vaudrait mieux s'en servir "de la bonne manière" mais j'ai tellement passé de temps à chercher des réponses que je sais que pour un "débutant", quelqu'un de moins expérimenté, et qui va peut être lire notre discussion, il sera sans doute plus facile de comprendre et de s'approprier un "vieux" code ("redondant") que d'appréhender le comportement d'un composant. Ici ce n'était pas fait à dessein, mon code est ce qu'il était en 2011 et je sais que Gambas a beaucoup évolué, mais je ne peux l'utiliser professionnellement et j'y reviens aujourd'hui pour acquérir (en dehors de Java) l'expérience d'un "modèle" "Open Source/Linux" d'application en relation avec une base PostgreSQL. On "avance", on s'améliore et puis on utilise les nouveaux outils qu'on comprend enfin, et c'est d'ailleurs parfois extrèmement couteux en terme de réécriture du code Ta signature est "Faire simple!", je suis le premier à en être convaincu : je n'ai jamais été aussi heureux que le jour (c'était il y a bien longtemps) où j'ai réduit le code d'un de mes formulaires Access de 6000 lignes à 2000 lignes rien qu'en utilisant des arrays... J'ai eu l'impression d'être un magicien Ne t'en fais pas personne ne peut t'en vouloir de "ne pas avoir le temps", j'ai passé plus de 10 heures hier au bureau et j'ai eu l'impression de n'avoir rien fait... Je vais soigneusement prendre le temps de lire la doc que tu as mise en liens. | ||||
Patrick | #24 Posté le 8/3/2017 à 11:14:37 | ||||
Et sisi , le nom de table doit être quoté aussi. Ne voulant pas mourir idiot, je me suis recherché une requête pas trop compliquée que j'ai transformé ainsi :
A l’exécution j'ai le message : Query failed : You have an error in your SQL syntax; | |||||
Zyfriala | #25 Posté le 8/3/2017 à 12:58:51 | ||||
agricola felem videt | Hum, en comparant ton code à celui de Gambix ça semble bon... Questions idiotes - ta connection est-elle ouverte ? - As-tu bien une colonne "code" dans ta table? Si tu peux metttre un peu plus de ton code ça peut éclairer un peu la situation | ||||
Patrick | #26 Posté le 8/3/2017 à 13:52:04 | ||||
Oui oui tout est ok, ça gère un petit formulaire qui fonctionne avec :
| |||||
Zyfriala | #27 Posté le 8/3/2017 à 15:06:30 | ||||
agricola felem videt | le chemin du composant (et de sa fonction) dans l'API est comp • gb.db • db • exec Essaie de supprimer "Utils"... | ||||
Patrick | #28 Posté le 15/3/2017 à 18:02:13 | ||||
Ça y est ... le site refonctionne Utils est un module Utils.db est la variable public de connexion. | |||||
12 |