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 :

Erreur violation d'accès


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de James64
    Profil pro
    Inscrit en
    Février 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 99
    Points : 49
    Points
    49
    Par défaut Erreur violation d'accès
    Bonjour,

    Voilà, g une appli qui utilise des query et des tables paradox .DB afin de sortir des stats sous Qreport et sous Excel. Je fais des fitres, des calculs en fonction d'une période de dates. Lorsque je test mon appli en enchainant les requetes diverses plus ou moins rapidement, j'ai de temps en temps un message d'erreur qui apparait. C assez enervant puisque je n'arrive pas à localiser la source. ca cganhe tt le temps....

    Le message est le suivant :

    "Le projet zzz.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse xxx dans le module 'zzz.exe''. Lecture de l'adresse xxx. Processus stoppé."

    Pouvez vous m'eclairer...
    Merci

  2. #2
    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
    Est ce que tu crées les composants dynamiquements ?

  3. #3
    Membre du Club Avatar de James64
    Profil pro
    Inscrit en
    Février 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 99
    Points : 49
    Points
    49
    Par défaut
    oui, 2 ! Ca vient de là?

    Quelles sont les règles a respecter pour ce qui est de la création, de la libération et de la fermeture?

  4. #4
    Membre du Club Avatar de James64
    Profil pro
    Inscrit en
    Février 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 99
    Points : 49
    Points
    49
    Par défaut
    en gros, g 2 unités relative au composant de transfert vers Excel (ExportPdoxExcelDlg1). Avec,

    dans unit ExportPdoxExcelDlg :
    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
    Destructor TExportPdoxExcelDlg.Destroy;
    Begin
        FlisteDefaut.Free; // Libère la liste des champs par défaut
        InHerited Destroy;
    End;
     
    Constructor TExportPdoxExcelDlg.Create(AOwner: TComponent);
    Begin
        Inherited Create(AOwner);
        FListeDefaut := TStringList.Create; // Crée la liste des champs par défaut
    End;
     
    Procedure TExportPdoxExcelDlg.SetListeDefaut(Value: TStringList);
    Begin
        FListeDefaut.Assign(Value);  // Renseigne la liste des champs par défaut
    End;
     
    Function TExportPdoxExcelDlg.Execute: Boolean;
    var
        erreur: boolean;
    Begin
      try
        erreur := false;
        ExportExcelDlg := TExportExcelDlg.Create(Application);  // Initialise la boite de dialogue
        Try
          With ExportExcelDlg do
          Begin
              LaTable := FTableDonnees;  // Renseigne la table à afficher
              LaSource := FSourceDonnees; // Renseigne le DataSource
              ListeDefaut.Assign(FListeDefaut); // Renseigne la liste des champs par défaut
          End;
          If Not Erreur then // Fait apparaitre la boite de dialogue s'il n'y a aucune erreur
          begin
              if ExportExcelDlg.LaTable.RecordCount >0 then
                  Result := (ExportExcelDlg.ShowModal = MrOK)
              else
                  Result := (form13.showModal=MrOK);
          end
          else
              Result := false; // Sinon renvoie Faux
        Finally
            ExportExcelDlg.Free; // Libère la boite de dialogue
        End;
      Except
          Showmessage('    Une erreur est survenue à l''ouverture du transfert Excel !');
      End;
    end;
    et dans unit FExportPdoxExcelDlg :

    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
     
    procedure TExportExcelDlg.FormShow(Sender: TObject);
    begin
        Try
          MemRecNo := LaTable.Recno; // Mémorise le numéro d'enregistrement en cours
          NbEnr := LaTable.RecordCount;  // Récupère le nombre d'enregistrements actifs de la table
          LaGrille.DataSource := LaSource;  // Lie la grille d'affichage et le DataSource
          // Vérifie si la grille excel contient des enregistrements. Si non, exportation impossible
          if NbEnr=0 then SpeedButton8.Enabled:=False;
        Except
            showmessage('Erreur Data Source à l''affichage transfert Excel !');
        end;
    end;
     
    procedure TExportExcelDlg.FormCreate(Sender: TObject);
    begin
        KeyPreview := True;
        ListeDefaut := TStringList.Create; // Créé le stringlist pour la liste par défaut
    end;
     
    procedure TExportExcelDlg.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Try
        ListeDefaut.Free;  // Libère la liste des champs par défaut
      Except
          Showmessage('    Une erreur est survenue à la fermeture !');
      End;
    end;
     
    //Bouton "ABANDON" pendant ou avant le transfert
    procedure TExportExcelDlg.BitBtn1Click(Sender: TObject);
    begin
      try
        BitBtn1.Tag:=1;
        ExportExcelDlg.Close;
      Except
          Showmessage('    Une erreur est survenue à l''abandon du transfert !');
      End;
    end;
     
    //Transfert vers EXCEL
    procedure TExportExcelDlg.ExportExcelExecute(Sender: TObject);
    begin
       AppExcel:= CreateOleObject('Excel.Application');
       classeur:=AppExcel.Workbooks.open(Form1.AppPath+'\StatPark_Excel.xls')
       ...
       ...
       AppExcel.visible:=true; //Affiche la feuille EXCEL
       ExportExcelDlg.Close;
    end;
    et j'appelle la fiche avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ExportPdoxExcelDlg1.SourceDonnees:=DataSource2;
    ExportPdoxExcelDlg1.TableDonnees:=Table2;
    ExportPdoxExcelDlg1.CheminExcel:=Form1.chemin0;
    ExportPdoxExcelDlg1.Execute;

  5. #5
    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
    Citation Envoyé par James64
    oui, 2 ! Ca vient de là?

    Quelles sont les règles a respecter pour ce qui est de la création, de la libération et de la fermeture?
    Le problème doit venir du fait que tu appels un composant non créer.
    sinon moi je fait toujours un try ... finally pour les composants crées dynamiquement.

  6. #6
    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
    Normal pour l'erreur (au vu du code) dans la Fonction TExportPdoxExcelDlg.Execute, tu crée et tu détruis dynamiquement le composant ExportExcelDlg.

    Et dans la procedure TExportExcelDlg.ExportExcelExecute, tu close ce meme composant sans l'avoir créé ^^

Discussions similaires

  1. erreur violation d'acces
    Par lise9 dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 08/04/2011, 11h25
  2. DLL pour postgreSQL : erreur violation d'accès
    Par valda dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/02/2011, 13h27
  3. strToIntDef et erreur "Violation d'acces.."
    Par villerose_ws dans le forum Langage
    Réponses: 10
    Dernier message: 06/08/2010, 11h51
  4. Réponses: 2
    Dernier message: 28/04/2010, 18h59
  5. Réponses: 2
    Dernier message: 18/11/2007, 09h11

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