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

Delphi Discussion :

Enregistrer un projet.


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut Enregistrer un projet.
    Bonjour à tous,

    Tout d'abord merci d'avoir passer du temps sur mon problème...
    Je suis toujours en train de réaliser un projet de simulatrion électrique, et j'en suis à la phase enregistrement-chargement.

    Ce projet comporte deux parties:
    * une partie base de donnée (SQL Server 2005) comportant tous les éléments éléctriques, dont un executable se sert pour les calculs.
    * une interface graphique (+ options-projets), étant une suite d'objet incluent dans tes tObjectList (chaque objet possède une position, une couleur,...et une procedure pour le relier à la base).

    Du coup je me pose la question de savoir comment enregistrer, en sachant que je dois annuler les opérations faites sur la base et sur le graphique lorque l'utilisateur quitte le projet sans sauvegarder...

    Je ne vois actuellement qu'une solution, mais toutes autres idées sont les bienvenues:
    Au moment d'enregistrer, je lit toutes ma base et je stock dans mes objets les données électriques dans des arrays...Puis j'enregistre mes objets. Au chargement j'efface ma base et je remet les valeurs électriques de mes objets. Mais là ça me parait vraiment lourd.

    Mes questions sont donc: existe-t-il un moyen plus simple de réaliser mon but (une astuce avec la base) ?
    Quelles méthodes sont les plus efficaces et les plus sûr:
    Par XML, par la méthode TFileStream+writecomponent,autre...??

    Encore merci,

    A+.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 104
    Par défaut
    Te devrais voir autour des Transactions ... tu ouvre la transaction, tu fais tes modifs, à la fermeture de l'appli, tu fais un RollBack et tout sera oublié ... entre temps, tu dois prévoir pour l'utilisateur un bouton qui lui permet d'enregistrer Totalement ses modifications pas un simple DataSet.post, mais un Transaction.Commit ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Te devrais voir autour des Transactions ... tu ouvre la transaction, tu fais tes modifs, à la fermeture de l'appli, tu fais un RollBack et tout sera oublié ... entre temps, tu dois prévoir pour l'utilisateur un bouton qui lui permet d'enregistrer Totalement ses modifications pas un simple DataSet.post, mais un Transaction.Commit ...
    Oula très mauvaise idée que cela. Quand une transaction est ouverte, il ne peux y avoir d'autres transaction tant que la première n'est pas fermée.
    Quand on gait un BeginTrans le Commit ou le RollBack doivent être dans la continuité directe sinon cela peut engendrer des problèmes.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Effectivement, je pense pas que le rollback soit une bonne idée, car comme on me l'a déjà fait remarqué on annule la possibilité de mettre la base en réseau (car on doit attendre la fin de la transaction pour pouvoir ouvrir une connexion).
    Et à terme c'est le but...(une base en réseau).

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 104
    Par défaut
    Ah bon, je n'ai jamais eu ce problème, sur un système de saisie, avec plusieurs utilisateurs, une transaction pouvait durer quelques minutes, et je n'ai pas souvenir de problème, mais on était en TClientDataSet avec un Provider spécifique, et les objet Transaction était eux aussi spécifiques, donc possible que cela été géré par notre application serveur puisqu'il pouvait tourner indépendemment de IB, MS ou Oracle, ... et donc les transactions étaient peut-être des fausses transactions via une mise en buffer sur le serveur sans passer par le mécanisme de transaction de la BD elle-même, je suis nul en BD, le SQL ça me gonfle ...

    Sinon, il reste de gérer du côté client, un mécanisme de persistance à retardement, en gros tes objets stockent les opérations SQL (ou des ordres spécifiques) et tu ne lance la procédure d'enregistrement qu'à la fin, cela est possible si tu n'utilise que le DataSet au moment de la lecture et si ton appli ensuite ne se base que sur les objets créés ...

    Sinon, tu peux engistrer un numéro unique de session (Date+Time+IP+IDSessionSQL+Random, par exemple sous la forme d'un GUID) et lorsque tu ferme l'appli, tu supprimes tous les lignes qui contiennent ce code de session ... après pour les modifs faudrait fonctionner sur le modèle de DataWare House qui empile les enregistrements pour chaque modification au lieu de les remplacer ...

    Sinon, tu peux aussi voir pour sérialiser tes objets (si ils héritent de TPersistent ou TComponet) pour facilement lire/écrire via le Flux à la Delphi (comme les DFM)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    Effectivement, je pense pas que le rollback soit une bonne idée, car comme on me l'a déjà fait remarqué on annule la possibilité de mettre la base en réseau (car on doit attendre la fin de la transaction pour pouvoir ouvrir une connexion).
    Et à terme c'est le but...(une base en réseau).
    Tu peux utiliser des transactions avec une base de données en réseaux, c'est d'ailleur recommandé.
    La seule chose c'est qu'une transaction doit se faire d'une seule traite et ne doit pas demander d'action à l'utilisateur avant qu'elle ait finit.

    Exemple bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    try
      BeginTrans;
     
      SQL....
      ExecSQL;
      ...
     
      SQL....
      ExecSQL;
      Commit; // ca c'est bien passé
    Except on E:Exception
      Rollback; // oups pas bon
    end;
    Exemple pas bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    try
      BeginTrans;
     
      SQL....
      ExecSQL;
      ...
      case Messagedlg('Etes vous sûr ?',mtconfirmation,[mbYes,MbNo],0) of
        mrYes : // action oui
        mrNo :  //Action non
      end;
     
      SQL....
      ExecSQL;
      Commit; // ca c'est bien passé
    Except on E:Exception
      Rollback; // oups pas bon
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Alors ma facon de faire est peut-etre incorrecte.
    Actuellement j'atoute au fur et à mesure mes objets électriques dans la base, locale à l'heure actuelle, aussi bien pour la création que la modification ou la destruction... En pensant que en cas de plantage du logiciel, les données seraient récupérables.

    Je peux toujours créé une transaction àchaque fois, mais il est alors évident suivant ton exemple que je ne pourrais pas utiliser de rollback.

    Je vais donc reprendre mon idée de rechargement de la base...

    Autre question, concernant toujours l'exportation et l'importation, est-il possible d'utiliser un dérivé de "writecomponent" pour sauvegarder une tobjectList ??
    Sinon il me reste le XML, mais je trouve ça lourd alors que j'ai déjà la base SQL...

    Ancore merci pour tout,

    A+.

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

Discussions similaires

  1. changer le chemin d'enregistrement du projet
    Par adel.87 dans le forum Visual Studio
    Réponses: 4
    Dernier message: 01/10/2008, 11h43
  2. Enregistrer un projet
    Par scoubi32006 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/06/2008, 16h06
  3. Réponses: 1
    Dernier message: 27/02/2008, 16h13
  4. enregistrer un projet
    Par ahmed2005 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2007, 23h39

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