IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

[Delphi] [Algorythmie] [case of] case of dynamique ?


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Delphi] [Algorythmie] [case of] case of dynamique ?
    J'ai une application Delphi 7 qui effectue un grand nombre de traitements sur une base MySQL.

    Ces traitements sont effectués une fois par mois avant de générer des états (Rave).

    Dans un premier temps, tous ces traitements étaient dans un fichier texte et exécutés en dehors de l'application. Le problème c est que les utilisateurs aimaient "améliorer" ce fichier, causant parfois des erreurs (en fait souvent).

    J'ai donc décidé de créer une unité dans laquelle j'ai mis toutes ces commandes sous forme de string et une petite fonction qui lance toutes ces commandes.

    Une description shématique de ce qui se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For compteur := 1 to max do
       begin
          Database.execute(fonction_donnant_SQL(compteur);
          Compteur := compteur +1;
       end;
    La fonction avec le case of est on ne peut plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    function fonction_donnant_SQL(compteur : integer) : widestring;
    begin
    case compteur of 
       1 : fonction_donnant_SQL := 'update table set colonne = colonne / 2';
       2 : etc.
    end;
    J'ai trouvé quelques intérêts au case of : le principal est que je peux m'en servir pour afficher une progression du traitement dans l'application et lorsque je lève une exception, je peux donner le N° du case à l'utilisateur pour que je puisse l'aider par téléphonne (mes utilisateurs sont dispatchés un peu partout en France).

    Par contre, j'ai environ 170 cases (répartis entre divers cases par groupes de 50) et lorsque je rajoute une requette qui doit être exécutée entre la 5ème et la 6 eme, ben pour l'instant, je dois retaper tous les numéros qui suivent.

    Ma question est donc la suivante : auriez vous une idée pour gérer ca en Delphi, en gardant la gestion des requettes par N°, sans que ces requettes soient modifiables / visibles par les utilisateurs et me permettant de rajouter une requette au milieu sans modifier le reste (les numéros se mettent à jour tout seul).

    J'ai pensé me fabriquer une mini appli/BDD qui me génèrerait un fichier texte à copier coler sur le form, mais je ne le ferais qu'en dernier recours.

    Je préfère d'abord vous demander si vous n'avez pas une meilleure idée et ou s'il n'existe pas un objet (fournit avec delphi : mon chef ne veut pas que j'utilise des modules estérieurs) qui pourrait m'aider.

    J'espère ne pas avoir été trop confu.

    Je vais m'absenter durant 2 ou 3 jours pendant lesquels je vais continuer à chercher de mon côté. Si vous répondez et ne voyez pas de réponses d'ici mercredi, ce n'est pas que je vous ignore. Je répondrai à mon retour.

    Merci d'avance,

    Greg

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    6
    Par défaut
    si tu les stockais comme ResourceStrings ?
    ou, plus simple, dans un Memo invisible => éditable en DesignTime

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    si tu les stockais comme ResourceStrings ?
    ou, plus simple, dans un Memo invisible => éditable en DesignTime
    Merci pour ta proposition trés rapide.

    J'ai regardé dans l'aide de Delphi pour comprendre tes propositions.

    Concernant le ResourceString, l'aide les présente comme des constantes qui n'accèptent que du string. Si je comprends bien, celà reviendrait à remplacer le case of par une liste de constantes dont les nom resteraient des N°. Si celà est éventuellement plus rapide que le case of, c est déjà une avancée. Cependant, je ne résolve pas le problème de devoir renommer toutes mes requettes si je rajoute une requette au début.... ou alors j'ai raté quelque chose.

    Pour ce qui est du memo invisible, j'ai cherché 'DesignTime' dans l'aide mais pas de réponse, que ce soit dans l'index ou dans rechercher, donc je ne sais pas encore si ça va m'aider... Je vais chercher des infos la dessus dans le forum et sur le net.

    Merci pour ces deux pistes, je vous tiens au courant de mes avancées )

    Greg

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    6
    Par défaut
    un memo sert à afficher du texte (propriété Text) organisé en Lignes (propriété Lines).

    en phase de conception, l'interface de delphi te donne accès à un éditeur de texte pour la propriété Lines du Memo : dans l'inspecteur d'objets, en sélectionnant le Memo, tu as sa propriété Lines avec '...' : si tu cliques dessus, une fenêtre s'ouvre et tu peux taper ce que tu veux, comme dans le NotePad, pour initialiser le composant. Tu peux donc rajouter une ligne où tu veux, en phase de développement.

    en affectant Memo1.Visible à False, il restera invisible à l'exécution, et tu pourras faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:=0 to max-1 do Database.execute(Memo1.Lines[i]);
    l'inconvénient est bien sûr de devoir recompiler chaque fois que tu veux modifier l'ordre ou le nombre des requêtes.

    fournir un fichier texte est donc une bonne solution, à condition de le crypter (xor), de lui mettre une extension à toi, et de l'ouvrir dans un TStingList (c'est lui qui gère la propriété Lines du Memo)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    "Design Time" veut dire que c'est manipulable avec des données au moment de la conception.
    Donc, dans ton exemple, tu pourrais remplir chaque ligne de ton mémo par une requête SQL, puis utiliser le n° de ligne comme test de ton "case".

  6. #6
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    bonjour, pour 'DesignTime' :

    rechercher csDesigning dans Tcomponent.ComponentState

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut

    Un tstringlist simple avec un fichier texte
    la propriete loadfromfile permet de lire le fichier
    celui ci pouvant etre coder afin d'eviter une modification

    sinon tu peut utiliser un tableau de const
    nbmax = 2;

    Const Table : array[0..Nbmax-1] of string('test1',test2');

    pas besoin de case il te suffit d'indiquer l'index de la ligne que tu veut en retour

    @+ Phil

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Un grand merci à tous (et ou toutes) !

    Le memo invisible me semble être la solution la plus adaptée dans mon cas.

    Le fait de devoir recompiler l'application ne me dérange pas, cette dernière n'est pas trés grosse, les traitements SQL ne sont effectués qu'une fois par mois, ne devraient pas changer trop souvent une fois l'appli finalisée et si ils changent, le faitde recompiler me donnera l'occasion de changer de version et de garder une trace de l'évolution de l'appli ( même si je pourrais seulement garder des traces des fichiers textes). Par ailleurs j'ai de bon moyens de transferts avec les utilisateurs : conclusion ce qui semble être le plus gros inconvénient de cette méthode n'en est pas un en ce qui me concerne.

    Même codé avec un xsor, un fichier texte resterait éditable et je préfère ne pas prendre de risque. Je pourrais éventuellement jouer avec les droits des fichiers, mais ce sont les utilisateurs qui donnent ces droits qui sont le plus susceptibles de fouiner dans le fichier texte.

    J'ai par ailleurs changé l'incrément du compteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    compteur := compteur +3
    histoire d'insérer des commentaires pour pouvoir maintenir ces requettes.

    Merci pour les explications sur le DesignTime.

    Concernant le tableau de const, je le garde sous le coude )

    A part ca, je vire le case of et je le remplace par une boucle for.

    Merci encore à tou(te)s. Mon problème est résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Delphi 7] Déclaration d'un composant dynamique
    Par alainvh dans le forum Débuter
    Réponses: 5
    Dernier message: 06/02/2010, 09h25
  2. un bouton sur plusieurs cases dans un tableau dynamique
    Par dododawn dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/12/2009, 12h51
  3. Cases à cocher dans tableau dynamique
    Par hartecel dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2008, 22h08
  4. [VB6] Petite question avec "select case ... end case"
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 22
    Dernier message: 04/05/2006, 10h24
  5. [VB.NET] DataReader: case par case
    Par prem's dans le forum Windows Forms
    Réponses: 22
    Dernier message: 08/04/2005, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo