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 :

Passage entre formes et executable.


Sujet :

Delphi

  1. #1
    Membre éclairé 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 : 42
    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
    Points : 717
    Points
    717
    Par défaut Passage entre formes et executable.
    Bonjour,

    Voilà, j'ai un problème avec mes passages d'une unité (ou fiche) à une autre...
    Je tiens à préciser que je débute en POO, et que j'ai appris sur le tas.
    Voici un exemple de code où ça plante:
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    //form principale
    ...
    intreface
    uses EcecutionMeca;
    ...
    implementation
    procedure TFormPrincipale.CalculElectrique1Click(Sender: TObject);
    begin
      Form20.FormHide(Form20);
    end;
    end.
     
    //form Appelée
    unit ExecutionMeca;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,ShellAPI,
      ConnectionBD, EditDate;
     
    type
      TForm20 = class(TForm)
      procedure FormHide(Sender: TObject);
     private
        { Déclarations privées }
        pas : integer;
        const pFileElec:pchar = ('C:\Simalim\Simalim IHM\Elec\calculElec.exe');
        procedure TimeToSteptime;
      public
        { Déclarations publiques }
       Constructor Create(AOwner:TComponent); Override;
       Destructor Destroy; Override;
      end;
     
     
    var
      Form20: TForm20;
     
    implementation
     
    {$R *.dfm}
     
    {{--------------------------------------------------------------
    ----------------------------------------------------------------}
    Constructor TForm20.Create(AOwner:TComponent);
    Begin
    Inherited Create(AOwner);
    end;
    {{--------------------------------------------------------------
    ----------------------------------------------------------------}
    Destructor TForm20.Destroy;
    Begin
    Inherited Destroy;
    end;
    {{---------------------------------------------------------------
    ----------------------------------------------------------------}
    procedure TForm20.TimeToStepTime;
    var temps:double;
    begin
      With DataModule1.Source_SIM_ARRET.DataSet do
      begin
        Open;
        First;
          temps := FieldByName('temps').AsInteger;
          temps := temps / pas;
          DataModule1.QueryGenerale.SQL.Clear;
          DataModule1.QueryGenerale.SQL.Add('UPDATE Sim_Arret set temps='+FloatToStr(temps)+'');
          DataModule1.QueryGenerale.ExecSQL;
      end;
    end;
    {{--------------------------------------------------------------
    ----------------------------------------------------------------}
    procedure TForm20.FormHide(Sender: TObject);
    begin
      TimeToSteptime;
      ShellExecute(Application.handle,'Open',pFileElec,'','',SW_SHOWNORMAL);
     end;
     
    end.
    Ce qui est bizzarre c'est que tout fonctionne sur le PC qui dispose de Delphi. Mais dès que je crée un executable et que je le lance sur un autre PC, il n'y a pas moyen de lancer l'executable CalculElec(pour l'exemple ci-dessus)...

    Merci d'avance.

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Vérifie les options des paquets de ton projet. Il faut décocher la case Construire avec les paquets d'exécution. Il y a de fortes chances pour que ça vienne de là

  3. #3
    Membre éclairé 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 : 42
    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
    Points : 717
    Points
    717
    Par défaut
    Merci pour ton aide sjrd, mais la case "Construire avec les paquets d'exécution" était décochée...

    Je vois vraiment pas ce qui cloche...Parce que l'executable fonctionne nickel sous la machine avec Delphi.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 95
    Points : 105
    Points
    105
    Par défaut
    As-tu installé le BDE sur l'autre PC ?

  5. #5
    Membre éclairé 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 : 42
    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
    Points : 717
    Points
    717
    Par défaut
    Merci,

    Non, je ne crois pas avoir installé le BDE sur l'autre PC.
    Mais on utilise une Base de Donnée SQL (qui est installée sur l'autre PC)...Est-ce qu'il faut quand même installée le BDE?

    @+.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 95
    Points : 105
    Points
    105
    Par défaut
    Quel est ton message d'erreur , au lancement ?

    le query que tu utilises , c'est quoi comme object ?

  7. #7
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const pFileElec:pchar = ('C:\Simalim\Simalim IHM\Elec\calculElec.exe');
    Ce chemin complet existe-il sur les autres PC ?

  8. #8
    Membre éclairé 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 : 42
    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
    Points : 717
    Points
    717
    Par défaut
    Tout d'abord merci pour votre aide.

    Ce qui est le plus étrange, c'est qu'il n'y a aucun messages d'erreurs, mais l'executable ne se lance pas.
    En revanche si j'écris le code d'execution directement dans un "ONCLICK" d'une forme, alors là tout fonctionne.
    Je suis complètement perdu...

  9. #9
    Membre éclairé 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 : 42
    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
    Points : 717
    Points
    717
    Par défaut
    Bonjour,

    J'ai utilisé un ApplicationEvents pour intercepter les messages d'erreur.
    Je recois : "Synthaxe incorrect à la ligne 1", qui est le message typique d'une requête SQL incorrect. Voici ma requête totale, sachant que MR_id, pk et temps sont des int ( j'ai vérifié, j'ai bien les deux même tables) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    temps := FieldByName('temps').AsInteger;
          MR := FieldByName('MR_id').AsString;
          pk := FieldByName('pk').AsString;
          temps := temps * pas;
          DataModule1.QueryGenerale.SQL.Clear;
          DataModule1.QueryGenerale.SQL.Add('UPDATE Sim_Arret set temps='''+FloatToStr(temps)+'''');
          DataModule1.QueryGenerale.SQL.Add('WHERE MR_id='+MR+' AND pk='+pk+'');
          DataModule1.QueryGenerale.ExecSQL;
    Si quelqu'un a une idée de ce qui cloche...Merci.

  10. #10
    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
    si le champ temps est un numérique dans ta table alors la ligne suivante est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataModule1.QueryGenerale.SQL.Add('UPDATE Sim_Arret set temps='''+FloatToStr(temps)+'''');
    il faut que tu ecrives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataModule1.QueryGenerale.SQL.Add('UPDATE Sim_Arret set temps='+FloatToStr(temps));

  11. #11
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    Ce qui est le plus étrange, c'est qu'il n'y a aucun messages d'erreurs
    Bonjour,

    C'est un fait qu'il est surprenant que la position de ton code détermine son exécution, mais je vais rebondir sur ton manque d'information.

    Si delphi est installé sur un poste alors au cours de son installation il déloge le débogueur par défaut de windows pour implanter le sien.
    En conséquence de quoi je suppose que ce n'est pas ton exécutable qui ne se lance pas mais le débogueur de windows qui décide que cet exé fait une opération non conforme; il empêche donc cet exe de se lancer et stock les informations de non-conformité dans un fichier .Dat; puis fonction de son paramétrage de sécurité il propose d'envoyer ce fichier .dat à Microsoft ou il reste silencieux.

    En clair il faut enlever le débogueur windows sur l'autre PC pour voir ton message d'erreur.

    tu ouvres la clef

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

    et tu mets la valeur auto à 0.

    a+

  12. #12
    Membre éclairé 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 : 42
    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
    Points : 717
    Points
    717
    Par défaut
    Bonjour,

    Tout fonctionne maintenant, je crois que tu avait raison Malatar. Et tes explications Yurck me serviront grandement par la suite.

    En tout cas merci à tous pour votre aide.

    @+.

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

Discussions similaires

  1. [vb net]passage de variable entre form !
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/09/2006, 13h06
  2. [C#] passage d'objet entre forms
    Par kooljy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/04/2006, 06h45
  3. [Forms 6i] Passage de paramètres entre forms
    Par tmcgrady dans le forum Forms
    Réponses: 8
    Dernier message: 18/03/2006, 03h04
  4. [C#] Passage de paramètre entre forms
    Par farfadet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/02/2006, 14h36
  5. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58

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