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 :

Problème avec un type record


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut Problème avec un type record
    bonjour a Tous

    Voila, je débute en Delphi et ce petit bout de code me pose problème
    Lorsque je clique sur le bouton, j'obtiens un débordement de pile. Pourquoi?

    Merci d'avance


    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
      Type Location = record
          Ville     : string[255];
          Annee     : string[4];
          Latitude  : real;
          Longitude : real;
      end;
     
      Type Releve = record
          Heure     : string[2];
          Minute    : string[2];
          Tps       : integer;
          Tpr_Min   : real;
          Tpr_Max   : real;
          Press_Min : real;
          Press_Max : real;
          Precip    : integer;
          Humidite  : integer;
          Neige     : integer;
          Dir_Vent  : integer;
          Force_Vent: integer;
          Comments  : string[255];
      end;
     
      Type Fichier = record
          Locdata   : Location;
          NumReleve : array[1..365] of integer;
          Donnees   : array[1..365,1..24] of Releve;
      end;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure CreateSheet(Struct: Fichier);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      Classeur: Fichier;
     
    implementation
     
    {$R *.dfm}
    Procedure TForm1.CreateSheet(Struct: Fichier);
    begin
      Struct.Locdata.Ville:='test';
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      createSheet(Classeur);
    end;
     
    end.

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    j'ai repris le code que tu as posté, j'ai cliqué sur le bouton (plusieurs fois) sans aucun débordement de pile. est tu sur que ce soit ce code qui pose problème ?

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Ta structure est assez grosse !

    Va dans Projet | Options
    Onglet "Lieur", Groupe "Taille de la Mémoire"
    Combien as tu dans Pile Maximum en général c'est $00100000 = 1Mo

    As vu de nez, ta strucutre prend dans les 2,5 Mo "365 * 24 * (255 + ~50)", donc soit agrandi la pile (mauvais idée)

    soit passez par de l'allocation dynamique voir "Taille d' un tableau de tableau"
    tu as la méthode, via GetMem très intéressant si tu souhaite gérer ta mémoire et surtout tricher pour certaines opérations ...
    tu as la méthode du SetLength, facile et efficace qui est pour toi la bonne méthode ...
    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

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    en fait, je ne peux pas modifier la dimension du tableau malheureusement.
    Je pense que le pb viens que je passe tout le tableau en argument.

    en effet, si je fais Struct.LocData.Ville:='test', j'ai le debordement, alors que Classeur.LocData.Ville:='test' marche.

    Passer un pointeur vers le tableau plutot que le tableau lui meme ne resoudrait-il pas le probléme? Et si oui comment faire (suis un vrai bille en ce qui concerne les pointeurs )

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Vu la taille de la structure, mieux vaut la passer par adresse au lieu de la passer par valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure TForm1.CreateSheet(var Struct: Fichier);
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Merci Graffito, ca marche (en fait, mon code était evidement un petit peu plus compliqué que l'exemple )

    Pour info, que change le fait de mettre "var" en ce qui concerne la gestion de la memoire??

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par iznogoud_23 Voir le message
    Pour info, que change le fait de mettre "var" en ce qui concerne la gestion de la memoire??
    sans le var, c'est la copie du paramètre qui est utilisée dans la procédure (on travaille avec une copie, les modifications n'ont d'effet que dans la procédure); avec le var c'est l'adresse du paramètre qui est passé (les modifications sont donc persistantes).
    ainsi, on peut dire que le fait de mettre "var" permet "d'économiser" un peu de mémoire lors de l'exécution de l'application.

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par iznogoud_23 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      Type Fichier = record
          Locdata   : Location;
          NumReleve : array[1..365] of integer;
          Donnees   : array[1..365,1..24] of Releve;
      end;
    si je comprend bien tu utilise ces record pour lire et ecrire dans un fichier, et aussi des données relever pour une année ,
    pourquoi ne pas utlisé une base de données?? , comme access,IB ou FB??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    si tu peux changer le format du fichier, moi je ferais ceci (au minimum)
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Type 
     Location = packed record
       Ville     : string[255];
       Annee  : word;
       Latitude  : single;
       Longitude : single;
      end;
     
      Releve = packed record
        Heure     : byte;
        Minute    : byte;
        Tps       : integer;
        Tpr_Min   : single;
        Tpr_Max   : single;
          Press_Min : single;
          Press_Max : single;
          Precip    : integer; // byte si c'est un %
          Humidite  : integer;
          Neige     : integer;
          Dir_Vent  : integer;
          Force_Vent: integer;
          Comments  : string[255];
      end;
     
      Type Fichier = packed record
          Locdata   : Location;
          NumReleve : array[1..365] of integer; // 1..24 ? alors byte
          Donnees   : array[1..365,1..24] of Releve;
      end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Merci pour toutes ces infos

    Edam, si je n'utilise pas de base de données, c'est uniquement pour une raison toute simple : je sais pas encore faire ca
    Pour etre plus precis, c'est surtout pou le deploiement de l'application : il faut fournir le moteur de la base de bonnées non? (donc installer Access, ou FB, ou IB sur la machine cible)?

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour ma part, vu la taille des tableaux et des structures, il serait préférable de passer par une base de données ou par un système en xml.

    Citation Envoyé par iznogoud_23 Voir le message
    Merci pour toutes ces infos

    Edam, si je n'utilise pas de base de données, c'est uniquement pour une raison toute simple : je sais pas encore faire ca
    Pour etre plus precis, c'est surtout pou le deploiement de l'application : il faut fournir le moteur de la base de bonnées non? (donc installer Access, ou FB, ou IB sur la machine cible)?
    Non, avec access pas besoin, si les postes sont minimum en Win2k.

    http://delphi.developpez.com/faq/?pa...nstallerAccess
    Modérateur Delphi

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

  12. #12
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par iznogoud_23 Voir le message
    (donc installer Access, ou FB, ou IB sur la machine cible)?
    non, pour FB voir ici et ici
    mais aussi il y a Midas si tu préfères les fichier
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    bon, j'ai jeté un œil (mais je l'ai récupéré, rassurez-vous ) sur firebird et ça pourrais le faire. (mybase semble plus limitée, pas de requêtes possible a ce que j'ai vu)

    Cependant, étant une bille en ce qui concerne les bases de données (et oui, la nature m'a pas gâté...), je vois pas trop comment structurer les tables sachant que je souhaite avoir un fichier par ville et par année. Dans ce fichier, je dois pouvoir sauvegarder les données propres au lieu de mesure (nom de la ville, année, longitude, latitude, code id de la vile) ainsi que les relevés proprement dit (de 1 à 24 relevés (nombre variable d'un jour à l'autre) contenant différents paramètres, et ce sur 365 jours).

    Si les pro de la BDD ont une idée, j'en leur en serai grandement reconnaissant.

    De plus, je voudrais sauver les fichiers au format XML, is it possible??

  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Table Ville
    • IdVille : Auto Incrément
    • NomVille : String


    Table Releves
    • IdReleve : Auto incrément
    • IdVille : Integer
    • DateReleve : DateTime
    • Tps : integer;
    • Tpr_Min : single;
    • Tpr_Max : single;
    • Press_Min : single;
    • Press_Max : single;
    • Precip : integer;
    • Humidite : integer;
    • Neige : integer;
    • Dir_Vent : integer;
    • Force_Vent: integer;


    Table RelevesCommentaires
    • IdReleve : integer
    • Comments : Memo;


    Les champs soulignés sont les clefs/index de tes tables.
    Modérateur Delphi

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

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    bon bien, ca avance doucement

    Je commence a bien cerner comment creer une base de donnée. Finalement, pour debuter, et contrairement a ce que j'ai dit, je vais utiliser mybase. Cependant, dns le tutoriel que j'ai vu, il semble qu'il faille creer un fichier xml par table. Or moi je souhaiterai enregistrer toutes les tables dans un seul fichier XML
    Comment faire??

    Merci d'avance

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Probablement que ce sujet t'intérressera.
    De retour parmis vous après 10 ans!!

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Intéressant sujet Sub0, merci, mais ca correspond pas encore tout a fait a ce que je pensais faire

    En gros, pour reprendre à 0, voici le problème.
    Je souhaite programmer un appli permettant de stocker et modifier des relevés météo dans une BDD (Firebird ou mybase)
    J'aurai 3 Tables (cf post de rayek) possédant des relations maitre-detail entre elles.
    Je souhaite que ces 3 tables soient sauvegardées dans un seul et meme fichier (en XML si possible).
    Je cherche un tuto ou un programme exemple

    Merci

  18. #18
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Dans ton cas il faut que tu créé toi-même ta fonction d'export XML en utilisant un composant gérant l'XML ou encore l'API MsXml. Voir ce tuto ou celui-ci.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    en fait, j'ai deja un fonction d'export en XML, basée sur JvSimpleXML de la JVCL pour sauver et lire mes records.
    J'ai cependant un pb avec la propriété "properties.value" qui me retourne systématiquement un chaine string vide (une idées?)
    Que plus les lectures/écritures sont relativement longue, c'est pour cela que je voulais m'orienter vers une BDD Firebird

  20. #20
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Arf pardon j'ai mal lu votre post sur la page précédente, je croyais que vous vouliez un export XML en plus du stockage en BDD. Sinon vu l'ampleur des différentes données stockées moi aussi je serais d'avis d'utiliser plutôt une base de donnée, c'est fait pour ça

    Après pour le moteur, à vous de voir ce qu'il vous convient le mieux.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/11/2005, 20h40
  2. Problème avec le type BLOB dans oracle
    Par pguedia dans le forum Oracle
    Réponses: 1
    Dernier message: 10/11/2005, 17h33
  3. problème avec le type timestamp
    Par aline dans le forum Oracle
    Réponses: 6
    Dernier message: 21/02/2005, 10h05
  4. [Débutant][Phppgadmin] problème avec les types
    Par PoY dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/08/2004, 17h06
  5. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48

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