(1) 2 »


frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Salut à tous ^^

Alors, je vous expose mon problème : je suis en train de développer un frontal MySQL dans le cadre d'une AP pour mon BTS. J'ai un souci pour l'ajout/modification de lignes dans une table MySQL. J'ai un peu réfléchi au problème, et deux solutions s'offrent à moi :

-Soit je crée dynamiquement des champs dans une fenêtre (autant de champs que de colonnes dans la table) avec la fonction ChampClone.

-Soit je crée une table mémoire reprenant le gabarit de la table MySQL que je met en saisie.

J'ai commencé par opter pour la 2e solution (la 1ere me plaît plus, mais c'est un peu compliqué à mettre en oeuvre, et les examinateurs ne m'interrogeront pas là-dessus, alors je ne vais pas me prendre la tête tout de suite, je verrai plus tard au cas où je voudrais distribuer l'appli). Pour l'instant, ça marche mais j'ai un petit souci.

Je m'explique. Il existe en MySQL deux types de champs assez particuliers : le SET et le ENUM. Pour ceux qui ne connaitraient pas, ceux-ci permettent de définir une liste de valeurs possibles pour le champ, à la manière d'une combo sans saisie (ne me demandez pas la différence entre les deux, je ne la connait pas ^^). Pour un souci d'ergonomie, je souhaîte afficher les valeurs sélectionnables dans colonne de type combo. Ceci est très facile à réaliser à l'aide de l'éditeur, mais le problème est que je récupère la structure de la table de façon dynamique. Il faudrait donc que je puisse créer cette combo par programmation. J'ai essayé avec la propritété type, mais à l'exécution, j'ai une erreur me disant qu'on ne peut pas utiliser cette propriété sur une colonne de table.

Ma question est-donc la suivante : savez-vous si il est possible de modifier le type d'une colonne de table par programmation ?

Une autre petite question. Il y a une propriété "NULL si vide" dans l'éditeur pour les colonnes. Est-il possible de définir cette propriété par programmation ? J'ai cherché dans l'aide mais je n'ai rien trouvé. Ca me serait pourtant fort utile pour les numériques (0 et NULL étant différents, c'est d'ailleurs dommage que Windev attribue 0 par défaut...)

Je vous remercie d'avance pour vos réponses ^^ (désolé pour la longueur du post, mais j'aime bien être clair, histoire qu'on ne me pose pas 20 questions sur le pourquoi du comment du problème ^^ )

Contribution le : 28/10/2005 03:00
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
22/03/2005 14:40
De Lyon Rhône France
Post(s): 51
Bonjour,
...
Citation :
Pour un souci d'ergonomie, je souhaîte afficher les valeurs sélectionnables dans colonne de type combo

...

Je ne sais pas si cela va répondre à votre question, mais attention, dans une table, les valeurs d'une combo sont identiques pour toutes les lignes.
En tout état de cause, la propriété "type" d'un champ n'est pas à ma connaissance accessible en écriture.

--
Cordialement
Christophe Charron

Contribution le : 28/10/2005 08:22
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Merci pour ta réponse, mais non, en effet, ceci ne répond pas à ma question :)

Je veux effectivement que la combo contienne les valeurs du SET ou du ENUM sur chaque ligne.

Voilà un screen de mon application, je vais vous expliquer :

http://beaufkiller.chez.tiscali.fr/frontal.jpg

On commence par se connecter au serveur MySQL. L'arbre à gauche est rempli avec le nom des bases et des tables disponibles sur le serveur. Quand on clique sur une base, ça affiche des informations sur les tables de cette base. Quand on clique sur une table, le contenu de cette table est affiché. La table affichant le contenu de la table MySQL est en saisie.

Imaginons que dans la table groupe, que l'on peut voir sur le screen, le champ g_title soit de type SET. Je voudrais que l'on puisse sélectionner la valeur dans une combo. Pour l'instant, la table est affichée gràce à la fonction SQLTable(requete2, tab_tables).
Il faudrait donc que je puisse définir le type de champ de la table par programmation, puis définir les valeurs du set à l'aide de la définition de la table. La 2e partie est prête, il ne me manque plus qu'à définir le type combo pour la colonne. Est-ce possible ?

Contribution le : 28/10/2005 13:02
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bonjour BofKill,

Voila qui commence à être plus clair.
S'il s'agit donc d'affecter les valeurs d'une combo de table, lesquelles seront alors les mêmes pour toutes les lignes (logique pour fixer le contenu d'une rubrique), Alors j'ai une solution.

je t'invite à nalyse le contenu de la défintion MySQL de ton SET et d'en récupérer la liste.

Il faut ensuite alimenter une combo (cachée) :
ListeSupprimeTout(MaCombo)
ListeAjoute(Macombo,ContenuDuSETSéparéParDesRC)


Ensuite, une fois que tu as clonné la colonne en colonne combo et avant de remplir la table, tu est en mesure de fixer son contenu :
i,j sont des entier
j=ListeOccurrence(MaCombo)
POUR i=1 A j
   ListeAjoute(MaColonneCombo,MaCombo[i])
FIN


A partir de cet instant les valeurs (numériques) affectées à ta colonne afficheront le contenu su SET.

Cette technique est disponible sur les forums depuis longtemps mais nous avons un chantier de rédaction qui devrait la mettre en évidence...

J'espère que cela satisfaira à tes attentes.


Contribution le : 28/10/2005 14:47
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Merci R&B, la situation commence à se débloquer.

En fait, le problème ne se situait pas à l'alimentation de la combo, ça je maîtrise ^^.

En fait, le souci était pour la création d'une colonne combo par programmation. Ma table est pour l'instant constituée de 50 colonnes invisibles, que j'affichais suivant le nombre de champs dans la table MySQL. En fait, je n'avais pas du tout pensé au clonage (je ne savais pas que c'était possible avec des colonnes de table).

Je vais avoir besoin de plusieurs types de colonnes :
- texte
- numérique
- date
- heure
- dateheure
- combo

Si j'ai bien compris, l'astuce serait de créer un champ de chaque type, et d'ensuite le cloner suivant mes besoins, c'est ça? La fonction ChampClone sera suffisante ?

Enfin merci encore, tu m'as ouvert de nouvelles perspectives ^^

Une dernière question. Le masque de saisie est-il modifiable par programmation ? Ca me serait utile pour adapter le masque de saisie en fonction de la longueur spécifiée dans le champ de la table MySQL.

Contribution le : 28/10/2005 15:21
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
J'ai trouvé la réponse concernant les masques dans l'aide de Windev. Vive les Regex ^^

Je vais m'amuser pour créer dynamiquement les regex :)

Contribution le : 28/10/2005 15:34
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Il y aura sans doutes des variantes mais voici comment je procèderais, sachant que tu part de données MySQL et non HyperFile (ouvlier ConstruitTableFichier).

Tu veux adapter des colonnes en fontions de différents critères. Pour cela le mieux et donc effectivement de réserver quelques colonnes invisibles pour le clonnage : un colonne de type Chaine, une de type monétaire pour les numériques de tout bord, une 'Date' (et autant que nécessaire pour les types annexes (heures et durées))... et evidement une de type combo.

La suite de vient alors simple et demande de la méthode.
Construire une liste des colonnes à créer (=analyse de tes structures MySQL) et leur faire correspondre un type de colonne (tu peux utiliser une table de correspondance et les clauses SELON).
Utiliser la liste décrite ci-dessus pour faire le clonage.

Concernant les masques de saisie, c'est simple : voir du coté de la propriété ..MasqueSaisie (et oui j'ai dis simple) qui te permettra non seulmeent d'affecter un masque parmis ceux par défaut (les constantes MaskXXX mais aussi d'en définir un de toute pièce en envoyant cette fois une chaine formattée.

Je pense qu'avec ces éléments, tu es en mesure d'arriver à tes fins.

Enfin, puisque tu es avec MySQL, consacre un peu de temps aux travaux de notre partenaire.

Bon courage.

Contribution le : 28/10/2005 15:40
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Bonne nouvelle, le système de clonage marche parfaitement.

J'ai juste un petit souci à l'affichage : l'affichage (je sais, je me répète ^^) de la flèche de la combo ne se fait pas, malgré que la combo soit bien là. à la place, j'ai un rectangle gris tout pas beau. Mais lorsque je déroule la combo, la flèche apparaît.

Concernant votre cher partenaire, j'ai déjà essayé la classe Mysql4WD. C'est bien mais elle était buggée. En fait, mon appli plantait lorsque j'essayais de lire les données dans une certaine table. Ce problème a disparu quand j'ai installé l'accès natif MySQL.

Quels sont les avantages de cette calsse comparé à l'accès natif, d'ailleurs ? Personnellement, je trouve que l'acces natif est plus simple à utiliser, mais j'attend votre argumentation ^^

Merci encore pour votre aide :)

Contribution le : 28/10/2005 17:31
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Au fait, j'utilise bien une table de correspondance pour les types de colonnes, et pas uniquement, d'ailleurs. Celle-ci recense des informations nécessaires à la création de table, et à de futures possibilités, je pense. Celle-ci est une table HF (j'en utilise plusieurs pour la gestionn interne de l'appli) Enfin, si tu es intéressé par le projet, je peux mettre les sources à disposition sur mon espace web.

J'ai beaucoup d'idées concernant ce projet, mais je vais commencer par faire au plus simple, pour le présenter à mon BTS. Plus tard, je compte essayer d'y implémenter un éditeur de requêtes (un peu comme celui de windev), et peut-être même l'intégrer dans un bundle à la easyPhp.

Enfin, tout ceci va me demander une énorme dose de travail, et je suis pas prêt d'avoir fini ^^

Contribution le : 28/10/2005 18:00
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Animateur WDF
Inscrit:
29/07/2002 12:31
De 59000, Lille
Post(s): 239
Citation :
Concernant votre cher partenaire, j'ai déjà essayé la classe Mysql4WD. C'est bien mais elle était buggée. En fait, mon appli plantait lorsque j'essayais de lire les données dans une certaine table. Ce problème a disparu quand j'ai installé l'accès natif MySQL.


Vu le nombre de personnes qui utilisent MySQL4D en environnement de production depuis plus de deux ans merci de nous éclairer sur le problème de "lire des données dans une certaine table".

Citation :
Quels sont les avantages de cette calsse comparé à l'accès natif, d'ailleurs ?


A votre niveau aucun.

Citation :
Personnellement, je trouve que l'acces natif est plus simple à utiliser, mais j'attend votre argumentation ^^


C'est normal c'est intégré dans WD.

--
Emmanuel Lecoester

Contribution le : 28/10/2005 18:16
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Erf, je m'en doutais... Il ne fallait pas prendre ça comme une attaque.

Je n'ai jamais voulu dénigrer, en aucune manière, le travail des développeurs de SQLManagerX. Peut-être me suis-je mal exprimé. Si je vous ai blessé, c'était totalement involontaire, et vous m'en voyez sincèrement désolé.

Citation :

Citation :

Quels sont les avantages de cette calsse comparé à l'accès natif, d'ailleurs ?

A votre niveau aucun.


Et à un autre niveau ? Je suis actuellement étudiant, mais je serai sur le marché du travail sous peu. Il m'intéresse donc de connaître les outils avec lesquels je serai amené à développer. SQLManagerX à l'air d'être un outil intéressant à exploiter, et j'aimerais donc en savoir plus, ce qui me semble tout à fait louable.

Citation :

Vu le nombre de personnes qui utilisent MySQL4D en environnement de production depuis plus de deux ans merci de nous éclairer sur le problème de "lire des données dans une certaine table".


Comme vous l'avez vu plus haut, quand on sélectionne une table, celle-ci est affichée dans une table de mon application. Quand j'utilisais MySQL4WD, le fait de vouloir afficher une certaine table (dont le dump est disponible ici : http://beaufkiller.chez.tiscali.fr/config.sql ), l'application plantait irrémédiablement. Ceci ne venait pas de mon code étant donné que le simple fait de passer en acces natif WD a résolu le problème (je n'ai fait que remplacer le code MySQL4WD par le code SQL de windev).

Enfin voilà, sachez que je n'ai jamais voulu dénigrer SQLManagerX, et que je serai vraiment heureux de travailler avec si celui-ci apporte des avantages.

Cordialement, Pierre-Jean

Contribution le : 28/10/2005 20:21
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Bonjour,

Citation :

Quels sont les avantages de cette classe comparé à l'accès natif, d'ailleurs ?


Tout dépend de ce que vous voulez faire et savez faire.
La gestion des blobs est un bon exemple, le changement de version de mysql et de windev. MySQL4WD n'a pas changer de version depuis 3 ans et fonctionne depuis sa version d'origine sur wd7.5, wd8 wd9 et peut etre wd10 (comme on ne l'a pas on peut pas le dire mais à moins que ce soit une révolution comme wd5.5 et wd7.5 il ne devrait pas y avoir de problème)

Autre cas : vous pouvez faire un test simple avec un frontal comme mySQLFront et votre programme.
1)lancer votre programme, afficher une table.
2)passez sous le frontal et faites un kill de votre cession.
3)revener sous votre programme et réafficher la table.

avec SQLManagerX votre table se réaffiche et avec votre programme ? (voila quelque uns des avantages qui me viennent à l'esprit)

Pour votre frontal si vous aviez lu la doc de SQLManagerX, vous auriez vu des méthodes très interréssantes SQLchargeCombo ou SQLEnumtoCombo et tableConstruit vous auriez vu que 80 % de votre code n'aurait pas à être écrit , vous auriez gagner ce temps sur d'autres soucis ou d'autre fonctions plus interréssantes à rajouter dans votre soft.

SQLManagerX a été créé pour ca, pour que le développeur ne perde plus de temps sur les actions simples : à savoir construire une table, afficher une fiche, faire des insert et autre update. Dans sa Version 5 vous n'aurez meme plus ne ligne a code pour ces actions. Le code devient sur, fiable, et le developpeur passe son temps dans la vraie recherche de fonctionnalités.

Je reste quant meme étonné que l'accès ait planté sur la lecture d'une table : ca m'étonne, j'ai des tables en production a 200 Millions de lignes et 150 tables et tous marche sans souci depuis 2 ans.

Il serait interressant de nous montrer le code.

De plus c'est la premiere fois que je vous lit. Il aurait été sage aussi de nous remonter l'info. Nous aurions pu intervenir rapidement. Tous ceux qui l'on fait ont tous été pleinement satisfait de la réponse et surtout de la réactivité des auteurs. Alors pourquoi ne pas l'avoir fait ?

Enfin n'oubliez pas que MySQL évolue plus vite que windev et la version 5 n'est par exemple pas accessible par la version de l'acces livré avec la version 7.5. et 8 voir meme 9 comment va réagir votre programme avec la prochaine version de mySQL ?

Je vous dis ca parce que j'ai aussi developper un frontal mais compatible toutes bases (du moins la 15 qu'on a en acces) pour l'instant la version que j'ai faite il y a un an fonctionne meme avec la version 5.0.15 de mySQL. Sans recompiler ou refaire un exe juste en me connectant a une base.

Allez comme je suis gentil je vais vous donne un conseil pour éviter un probleme.

Comment allez vous gérer l'edition de la requetes que l'utilisateur a saisie ? (SQLManagerX sait le faire en standard sans développement)

Contribution le : 28/10/2005 21:29
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Animateur WDF
Inscrit:
29/07/2002 12:31
De 59000, Lille
Post(s): 239
Ne t'inquiètres pas Pierre Jean je ne t'attaquais pas ;)

Je n'arrive pas à télécharger ton dump :( : invalid page. Si tu avais un source qui reproduit le pb on regardera celà de très près je peux te l'assurer.

Concernant ton projet de frontal MySQL et si tu programmes tout en hxxx on pourrait te demander de nous présenter amicalement ton travail de BTS (en gros voir si tu serais ouvert à la mise à disposition gratuite de tes sources) car là on ouvre des portes que tu n'oserais même pas imaginer ^^.



Contribution le : 28/10/2005 21:34
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Impossible de récupérer le dump.

Sinon tu n'aurais pas fait un mysqllitcol sur une colonne de plus de 255 caractères?

Sinon Pierre Jean, c'est un peu désagréable lorsqu'il n'y a aucun retour d'info et de lire que il y a un bug dans l'accès mais sans donner plus d'info.

Tu aurais pu contacter l'équipe de SQMX ou le concepteur de l'accès ne serait ce pour confirmer ou pas le problème.

Contribution le : 28/10/2005 22:23
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
En effet, j'admet mon erreur, je viens de m'attaquer à la doc de SQLManagerX, et donc, de me rendre compte que l'outil offrait des possibilités très intéressantes. En fait, je m'étais limité à utiliser la classe d'acces natif, sans avoir conscience de la classe SQLManagerX... Je n'utilisait donc que des fonctions similaires aux fonctions SQL de windev.

Désolé manu, mais je ne développe pas en hxxx mais avec les fonctions SQL, ce qui implique création dynamique de requêtes et tout le tralala. J'ai un peu galéré avec la création de la requête CREATE TABLE d'ailleurs. Néamoins, je ne me servirai pas de SQLManagerX maintenant, car, étant étudiant, j'ai du temps pour développer (je ne suis pas encore soumis à des contraintes de productivité) et je préfère me prendre la tête sur des choses assez complexes afin d'accroître mes compétences en développement. De plus, il vaut mieux éviter d'utiliser des classes que je n'ai pas développées dans une AP de BTS, car ils risqueraient de me poser des questions dessus, et je ne suis pas sûr d'être en mesure de tout expliquer ^^

Pour ce qui est de la diffusion de mes sources, j'en ai déjà parlé plus haut, il n'y a pas de soucis, je suis en fervent défenseur de l'open source.

Désolé de ne pas avoir parlé du souci que j'ai eu avec la classe plus tôt, mais je n'ai pas réalisé au début que le problème pouvait venir de celle-ci. C'est mon prof de dev qui m'a mis la puce à l'oreille en début d'année. Je suis donc passé à l'acces natif WD, et, dans l'euphorie, je n'ai pas pensé à vous écrire. J'en suis désolé. Pour ce qui est de la reproduction de l'erreur, je vais voir si j'ai une sauvegarde du projet, mais je ne me rappelle pas en avoir fait une.. Sinon, je ferai une appli vite fait reproduisant cette erreur, mais je ne suis pas sûr d'y arriver...

Enfin, je suis débutant en développement (ça fait à peine plus d'un an que j'ai découvert le monde mystérieux de l'algorithmie), et j'ai encore énormément de choses à apprendre. J'ai d'ores et déjà décidé de m'orienter principalement vers Windev et le développement Web (Je commence pas mal à tater du PHP, j'ai encore un peu de mal avec CSS, les incompatibilités entre navigateurs étant tout bonnement hallucinantes).

M'enfin, j'adore Windev, et je ne demande qu'à apprendre, et je vous remercie pour toutes les aides et conseils que vous nous fournissez.

EDIT :
pour le dump, c'est là :
http://beaufkiller.chez.tiscali.fr/config.sql

Contribution le : 28/10/2005 22:24
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Nouvelles informations nouveau post.

Je suis vraiment désolé pour le coup de flip que j'ai créé chez vous, mais là, c'est à n'y plus rien comprndre...

En effet, j'avais fait une sauvegarde du projet avant de passer en acces natif wd... Je le décompresse, un petit go, et là stupeur.. Le bug avait disparu !! Je vous assure pourtant que j'ai eu un problème à l'époque, je suis vraiment confus.

Malheureusement, je n'arrive pas à uploader mon projet sur mon compte tiscali, le transfert s'arrete à 4Mo (alors que le fichier en fait 7..). Quelqu'un est-il disposé à me prêter un peu d'espace pour partager ma source ?

Contribution le : 28/10/2005 22:43
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
J'ai uploadé mes sources sur le compte d'un ami. Elles sont disponibles à l'adresse suivante :

http://lyris2.free.fr/ultramysql.zip

Ce sont les sources du programme tel qu'il est à présent, avec l'acces natif WD. Il est loin d'être terminé, donc tout ne marche pas encore.

J'attends vos suggestions/commentaires/remarques/conseils avec impatience ^^

Contribution le : 28/10/2005 22:58
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Animateur WDF
Inscrit:
29/07/2002 12:31
De 59000, Lille
Post(s): 239
le zip est corrompu :(

Contribution le : 29/10/2005 10:08
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
[CUT]

Manu

Contribution le : 29/10/2005 11:49
Créer un fichier PDF de la contribution Imprimer


Re: frontal MySQL
Utilisateur WDF
Inscrit:
28/06/2005 15:02
De Aurillac Cantal Auvergne
Post(s): 91
Je suis en train de réfléchir au fait d'écrire mon programme à l'aide des fonctions hxxx. Et je me dit que c'est faisable. Ca me permettrait d'alléger grandement le code en fait. Je commence à y travailler, je vous tiens au courant.

Contribution le : 29/10/2005 12:11
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 »




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2