12 | |||||||
Auteur | Messages | ||||||
---|---|---|---|---|---|---|---|
Zyfriala | #1 Posté le 23/2/2017 à 17:05:13 | ||||||
agricola felem videt | Bonjour, je récupère un (des) nom(s) de colonne(s) dans une variable, est-il ensuite possible de l'utiliser avec Result? s_Item = Result!s_ColonneChoisie J'ai essayé différentes syntaxes mais à chaque fois j'ai une erreur, "L'opérateur '!' doit être suivi d'un identificateur" merci d'avance. | ||||||
spheris | #2 Posté le 25/2/2017 à 13:14:34 | ||||||
Bonjour, Je ne comprends pas trop la question posée, mais j'en déduis que : s_Item est ta variable qui récupère la chaine de la colonne. de quelle colonne parles-tu? une gridview, une columnview, ou une base de données. Quant à Result, il est comme son nom l'indique le résultat d'une bdd sous forme String pour ce cas là. Si c'est pour la colonne d'une bdd, j'écrirais :
| |||||||
Zyfriala | #3 Posté le 27/2/2017 à 11:52:34 | ||||||
agricola felem videt | Bonjour et merci, ce que tu me donnes c'est ce qui existe déjà Je réexplique : - je choisis une table dans une 1ere combobox, exemple t_arbresfruitiers - ce choix va (par procédure) lister les colonnes de la table dans une 2eme combobox ou une liste, peu importe - je choisis une colonne, par exemple 'fruit', et récupère son nom dans une variable, s_ColonneChoisie - j'écris mon sql avec cette variable : Query = "SELECT lignes," & s_ColonneChoisie_h & " FROM schema.t_arbresfruitiers " (base PostgreSQL) (apparemment on ne peut pas non plus variabiliser le nom de la table...) - connection à ma base, lancement du Result --> je récupère bien mes données dans le Result, il s'agit maintenant d'extraire les données correspondant à ma colonne Je peux donc tout à fait écrire s_Item = r_Result!fruit et récupérer ensuite mes données (la liste des fruits) dans une boucle mais imaginons que j'ai 20 tables avec 20 colonnes chacune (et ma base sera certainement + grande), si je dois écrire le code if macolonne = sonNom s_Item = r_Result!sonNom end if correspondant à chaque colonne il faut déjà que j'écrive 1200 lignes de code ! Le problème est donc, dans la lecture du Result, de substituer au nom 'réel' le nom 'variabilisé' mais je ne pense pas que la procédure Gambas qui lit le Result puisse le faire...telle est ma question. Ceci dit je me trompe peut être... Ceci dit il existe peut être (sans doute) des solutions que je ne vois pas | ||||||
Zyfriala | #4 Posté le 27/2/2017 à 11:54:24 | ||||||
agricola felem videt | il s'agit bien de s_ColonneChoisie (oubliez le '_h'), en fait peu importe le nom de lavariable | ||||||
Patrick | #5 Posté le 27/2/2017 à 14:09:03 | ||||||
Bonjour, Peut-être une piste, qui fonctionne avec mysql, dans la requête :
AS nom_standard renomme la colonne en "nom_standard", si ce n'est pas la bonne syntaxe en PostgreSQL, il doit bien y avoir une équivalence. Mettre en variable la partie droite d'un result doit être possible, il me semble l'avoir vu dans un exemple mais je n'ai jamais pu le retrouver. Ça m'aurait bien intéressé aussi. | |||||||
Zyfriala | #6 Posté le 27/2/2017 à 16:01:42 | ||||||
agricola felem videt | Merci Patrick, le fait de définir la partie après le 'FROM', avec le nom de la table, AVANT de l'inclure dans la requête c'est tout bon.
puis
Même si je n'ai pour l'instant qu'un seul schéma actif j'imagine que le schéma lui-même peut être intégré en tant que variable... Il me semble bien avoir remarqué ce "problème" d'intégration avec une autre partie de mon code... je ne me rappelle plus où Ca permet déjà de 'variabiliser' le nom de la table pour peu qu'il soit écrit dans la liste de choix tel qu'il figure dans la base...et c'est déjà beaucoup Par contre le fait d'utiliser un ALIAS pour la colonne n'a pas fonctionné, je reçois l'erreur "Objet attendu..." Je continue à chercher... | ||||||
Zyfriala | #7 Posté le 27/2/2017 à 16:31:50 | ||||||
agricola felem videt |
Je viens de retrouver cette partie, c'est pour l'utilisation d'une recherche SQL avec joker... En effet le joker ne passe pas dans une concaténation directe au niveau de la requête.On ne pourra pas avoir...
mais on peut l'écrire préalablement à son intégration dans le SQL. Si par exemple je choisis une lettre dans une combobox, j'y ajoute (pour rechercher ici des noms de colonnes dans une table de "description" de la table principale) un préfixe et un suffixe 'joker',
ce qui va me donner par exemple, recherche de toutes les colonnes commençant par "c_f%"
| ||||||
spheris | #8 Posté le 27/2/2017 à 16:55:51 | ||||||
...correspondant à chaque colonne il faut déjà que j'écrive 1200 lignes de code ! je ne comprends pas pourquoi tu dois écrire 1200 lignes de code. si tu stockes dans ta boucle l'ensemble des monresultat!fruit dans une combobox par la commande Add, tu as 'variabilisé' tes données sous forme de string et tu accèdes tout simplement avec l'index du combobox. exemple pour accéder à la 220eme item du combobox:
Je ne vois pas trop où est la difficulté. Je pense que tu as probablement des petits soucis avec sql. | |||||||
Zyfriala | #9 Posté le 27/2/2017 à 17:21:20 | ||||||
agricola felem videt | spheris, il ne s'agit pas de récupérer les valeurs de Result mais de variabiliser le nom de la colonne, relis bien ce que je dis, particulièrement dans le 3eme post. Pour ce qui est du SQL j'en écris depuis 2006, je l'utilise en VBA, en C#, en Java et avec Gambas,no souci | ||||||
Patrick | #10 Posté le 27/2/2017 à 17:25:55 | ||||||
Après un rapide coup d’œil sur interne, les allias ont l'aire de fonctionner de la même façon. J'ai trouvé 2 exemples :
Donc tous se mets en allias. Après le faire comme ça ou en combobox tout dépend ... des données du problème et de ton imagination ... | |||||||
Flachy Joe | #11 Posté le 27/2/2017 à 21:06:45 | ||||||
Iguane : Il Gambas Uniquement pour Activer ses NEurones | Salut, avec la syntaxe classique d’accès aux tableaux il n'y a pas de souci, ou alors j'ai rien compris... (J'ai utilisé la base de donnée de DataBaseExemple de Keywild que l'on trouve sur la logithèque)
L’accès aux données avec le point d'exclamation n'est qu'un raccourci. Les Result sont hérités des collections. On peut aussi utiliser le point d'exclamation sur les collections :
Flachy Joe | ||||||
spheris | #12 Posté le 27/2/2017 à 22:45:07 | ||||||
Zyfriala, Je viens de comprendre ce que tu dis dans ton post 3, et je te dis que je ne vois pas de difficultés particulières. pour exemple : clic premiere combobox liste les tables fruits, legume, feculents.... si je selectionne les fruits, la deuxieme combo affichera pomme, banane, tomate, peche, poires.... par un
et si tu cliques sur la pomme, tu pourras ecrire ceci :
ou plutot :
en résumé pour variabiliser une donnée dans une requete sql, il suffit de la mettre entre les deux symboles apostrophe 'toto' | |||||||
Flachy Joe | #13 Posté le 28/2/2017 à 11:01:56 | ||||||
Iguane : Il Gambas Uniquement pour Activer ses NEurones | Salut spherisWHERE id LIKE '%'"c'est l'equivalent de
Autant faire directement
Par ailleurs, ATTENTION AUX INJECTIONS SQL en utilisant des variables qui peuvent être modifiées par l'utilisateur. Flachy Joe | ||||||
Patrick | #14 Posté le 28/2/2017 à 18:37:55 | ||||||
Et que la lumière fut ... Une collection !!! Merci Flachy Joe. | |||||||
gambix | #15 Posté le 28/2/2017 à 19:11:16 | ||||||
Faire simple ! |
je préfère
Comme ça ça limite les risques d'injections car toute les inclusions sont quotée Moins de texte dans une signature c'est agrandir son espace. | ||||||
12 |