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 :

message d'erreur dans la copy d'un fichier


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut message d'erreur dans la copy d'un fichier
    Bonjour tout le monde et meilleurs voeux pour 2014.

    Le bout de code ci dessus me permet de copier un fichier.

    Lorsqu’il est contenu dans un click de bouton, le programme se compile normalement.

    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
    procedure TForme.Button2Click(Sender: TObject);
    var nomTable : TTable;
    begin
     
    // Création des Repertoires (Sauvegarde et Archive) s'ils n'xistent pas.
          MCheminArch:=ExtractFilePath(Application.ExeName)+'Archive Specific Exercice'+FormBD.GInfoGeneAnExercice.AsString;
          if not DirectoryExists(MCheminArch) then  //Création repertoire d'Archivage Specific
            if not CreateDir(MCheminArch) then
              raise Exception.Create('Impossible de créer '+MCheminArch);
     
            MCheminArch:=MCheminArch+'\';
     
            nomTable := TTable.Create(self);
            nomTable.TableType :=ttParadox;                       
     
            nomTable.TableName :=MCheminArch+'Ab';
            BatchMove1.Source :=FormBD.Ab;     // Sauvegarder la BD  dans  MCheminSvgDepand+'Maitre'+IndiceMaj
            BatchMove1.Destination :=nomTable;
            BatchMove1.Mode :=batCopy;
            BatchMove1.Execute;
     
            nomTable.AddIndex('','NRCN',[IxPrimary]);
     
    end;

    Mais lorsque le même bout de code est intégré dans une procedure, je reçois le message d’erreur suivant :
    Identificateur non déclaré : ‘self’

    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
    Procedure ArchiverExercice();
    var nomTable : TTable;
    begin
      with Forme do
      begin
    
    // Création des Repertoires (Archive) s'ils n'xistent pas.
          MCheminArch:=ExtractFilePath(Application.ExeName)+'Archive Specific Exercice'+FormBD.GInfoGeneAnExercice.AsString;
          if not DirectoryExists(MCheminArch) then  //Création repertoire d'Archivage Specific
            if not CreateDir(MCheminArch) then
              raise Exception.Create('Impossible de créer '+MCheminArch);
    
            MCheminArch:=MCheminArch+'\';
    
            nomTable := TTable.Create(self);    // ligne du message d'erreur     
            nomTable.TableType :=ttParadox;
    Pouvez-vous m’indiquer ce qui me manque comme déclaration dans le second cas.
    Merci

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    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 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    self représente l'objet dont la procédure est une méthode.
    Dans le second code, qui n'est pas une procédure d'objet, self n'a pas d'existence.
    Dans le premier, il représente l'instance de TForme dans laquelle est déclenchée la méthode Button2Click.

    La référence que l'on passe au constructeur de TTable définit le propriétaire qui sera chargé de sa destruction : tu peux passer Application, ou une référence à l'objet de type TForme si elle est visible de ta procédure (style var Form1: TForm1; visible de toute la section implémentation), et même nil si tu gères sa libération.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    tourlourou
    self représente l'objet dont la procédure est une méthode.
    Dans le second code, qui n'est pas une procédure d'objet, self n'a pas d'existence.
    Dans le premier, il représente l'instance de TForme dans laquelle est déclenchée la méthode Button2Click.

    La référence que l'on passe au constructeur de TTable définit le propriétaire qui sera chargé de sa destruction : tu peux passer Application, ou une référence à l'objet de type TForme si elle est visible de ta procédure (style var Form1: TForm1; visible de toute la section implémentation), et même nil si tu gères sa libération.
    Merci pour votre réponse, mais étant débutant je ne comprend pas ce qu'il faut exactement faire pour utiliser le second code, merci.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    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 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomTable := TTable.Create(Application);
    L'objet Application, visible partout, donc dans cette procédure, sera le propriétaire de la table et sera donc chargé de la détruire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomTable := TTable.Create(nil);
    si dans ta procédure, tu détruis toi-même la table par un
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    citation tourlourou

    Code :Sélectionner tout - Visualiser dans une fenêtre à partnomTable := TTable.Create(Application);L'objet Application, visible partout, donc dans cette procédure, sera le propriétaire de la table et sera donc chargé de la détruire.

    Code :Sélectionner tout - Visualiser dans une fenêtre à partnomTable := TTable.Create(nil);si dans ta procédure, tu détruis toi-même la table par un

    Code :Sélectionner tout - Visualiser dans une fenêtre à partnomTable.Free;
    C'est très clair maintenant pour moi.
    merci tourlourou.

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

Discussions similaires

  1. Afficher un message d'erreur dans une fenêtre popup
    Par Quickeno dans le forum Langage
    Réponses: 7
    Dernier message: 08/10/2006, 01h56
  2. Réponses: 4
    Dernier message: 24/08/2006, 10h19
  3. message d'erreur dans sous formulaire
    Par tojiji dans le forum Access
    Réponses: 6
    Dernier message: 28/07/2006, 12h09
  4. Message d'erreur dans phpMyadmin
    Par riadh100 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 26/09/2005, 14h03
  5. [Tiles]message d'erreur dans un footer (form mal rempli)
    Par clement42 dans le forum Struts 1
    Réponses: 5
    Dernier message: 09/06/2005, 14h51

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