GENEREREQUÊTE

tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009 - 3 mars 2008 à 10:26
tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009 - 4 mars 2008 à 09:00
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45928-genererequete

tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009
4 mars 2008 à 09:00
Bonjour,
Je fais celà pour plusieurs raisons la première serait qu'on ne mélange pas tous les objets en un seul, la paramétrisation d'un objet deviendrait trop compliqué et on perdrait en rapidité de développement; sans parler qu'il faudrait retenir "comment faire pour".
La seconde est une question d'héritage. Lorsque tu passe en paramètre, plusieurs clauses where (de façon indéfini), tu es obligé de passer par des héritages (new where(paramètres)), qui te permette de définir un objet, et tu traite ainsi chaque objet indépendant de celui précédemment créer.
C'est une question de souplesse de programmation, mais aussi de rapidité d'exécution. Il y a différentes façon d'attaquer le problème, mais tu reviendra toujours à la source... les classes + propriétés.
Pour ce qui est de la sérialisation de l'objet "commandselect", j'y été occupé au moment où j'ai arreté, le but était de mettre le tout dans un fichier xml, permettant le transport de l'information, ainsi que la modification par "l'utilisateur". Le système réagit ainsi plus souplement, mais toujours au détriment des performances.

Amicalement,
Tmcuh
donald42 Messages postés 6 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 3 mars 2008
3 mars 2008 à 21:13
Merci pour ton code.
J'ai cependant une petite question.
Je remarque que tu cré une classe pour chaque partie de la requête (from, join,...)
Ca me paraît une très bonne idée. Je me demande seulement l'intérêt de la serialisation de ces objet. Ton code est nettement supérieur à mon niveau donc je pense qu'il y a une très bonne raison mais j'ai du mal a saisir laquelle peut tu me l'expliqué?
donald42 Messages postés 6 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 3 mars 2008
3 mars 2008 à 14:04
Je suis très interessé par ton idée. Tu peux m'envoyer ton code sur scoubidou_61@hotmail.com.
tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009
3 mars 2008 à 14:00
Je peux t'avancer en te fournissant le code que j'ai déjà fait... c'est très très long comme process car il y a tellement de cas de figures qu'il faut créer une multitude de class.
donald42 Messages postés 6 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 3 mars 2008
3 mars 2008 à 13:56
Merci pour ce commentaire, je vais essayer ton idée.
Si j'arrive à mes fins je modifierai ce post et mettrai à jour mon code.

Amicalement
Donald42
tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009
3 mars 2008 à 10:26
Idée forte intéressante. Il faudrait prévoir un système de génération de code par objet. J'ai déjà commencé le codage de ça, mais jamais terminé :)

CommandSelect cmd = new CommandSelect();

From frm = new From("bonjour", "test");
cmd.Distinct = true;
cmd.Top = new Top(true, 5);
cmd.Fields.Add("","sum(id1)", "SumId1");
cmd.Fields.Add("Table1", "id1", string.Empty);
cmd.Fields.Add("Table1", "id2", "Key");
cmd.Fields.Add("Table1", "Name", string.Empty);
cmd.Fields.Add("Table1", "Name", "TheName");
cmd.AddFrom("Table1");
cmd.AddFrom("Table2");
cmd.AddJoin(JoinType.LeftOuterJoin, "TableExt", new Where("Table1.id1", "TableExt.id1"), new Where("Table1", "id2", "TableExt", "Id2"), new Where("Table1.Id1", "SysColumns", OperatorType.Different));
cmd.AddWhereClause(new Where(new Member("Table1","Name"), "32,43", OperatorType.NotIn));
MessageBox.Show(cmd.ToString());

Grâce à ce système tu code de façon totalement universelle, un peu comme tu le fais, et ensuite il te reste à adapter la méthode ToString() aux différents Provider : Oracle, MySQL, Ms Sql, Postgres, etc.

Amicalement,
Tmcuh
Rejoignez-nous