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 :

Message d'erreur EAccessViolation lors d'opérations avec une BD


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut Message d'erreur EAccessViolation lors d'opérations avec une BD
    Bonjour,

    Je travaille sur une application avec Delphi 7 et TurboDB comme SGBD, quand je compile tous vas bien, mais quand je fais les clicks (consécutif) Supprimer puis Ajouter je reçois le message d'erreur suivant:

    Nom : Capture.JPG
Affichages : 319
Taille : 33,9 Ko

    Je reçois ce message depuis que j'ai ajouté une autre table à ma base de données.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    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 875
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    Accès à un objet libéré ou non encore créé ? (apparemment, lecture d'un pointeur nul)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut
    Accès à un objet libéré ou non encore créé ? (apparemment, lecture d'un pointeur nul)
    merci

    Salut,

    Je vais essayer d'expliquer:

    Ma ancienne BDD est : TArchive, TDirection, TSalle_Archive, TType_Archive, TEtat_Archive, TLangue_Archive.
    TArchive c'est la table qui contient les clés étrangères des autres tables.

    Ma nouvelle BDD est : J'ai ajouté une autre table TEmploye qui contien aussi les clés étrangères des autre tables sauf TArchive bien sûr.

    Moi je pense que l'utilisation des autres tables par deux (02) autres table (TArchive et TEmploye ) dans une même application est l'origine de cette erreur!

    Est-ce possible??
    Et si oui, comment faire pour résoudre ce problème? Et merci.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    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 875
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    Qu'est-ce qui a changé dans le code chargé des suppressions et insertions, susceptible d'entraîner l'erreur actuelle que tu n'avais pas auparavant ?
    Il faudrait voir un peu de code, non ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut
    Qu'est-ce qui a changé dans le code chargé des suppressions et insertions, susceptible d'entraîner l'erreur actuelle que tu n'avais pas auparavant ?
    Il faudrait voir un peu de code, non ?
    J'ai rien changé, mais j'ai ajouté deux code (supprimer et ajouter) pour la nouvelle table TEmploye.

    Boutons Supp et Ajout pour TArchive:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFSupArchive.W7ToolButton1Click(Sender: TObject);
    begin
    Principale.TArchive.Delete;
    Principale.W7ToolButton15Click(Sender);//calcul le nombre d'enregistrement dans le DBGrid.
    Close;
    end;
     
    procedure TPrincipale.W7ToolButton6Click(Sender: TObject);
    begin
    TArchive.insert;
    AjouModif.PlannerDBMaskDatePicker1.Date:=(date());
    AjouModif.showmodal;
    end;
    Boutons Supp et Ajout pour TEmploye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFSupEmpl.W7ToolButton2Click(Sender: TObject);
    begin
    Principale.TEmploye.Delete;
    Principale.W7ToolButton26Click(Sender);//calcul le nombre d'enregistrement dans le DBGrid.
    Close;
    end;
     
    procedure TPrincipale.W7ToolButton21Click(Sender: TObject);
    begin
    TEmploye.insert;
    AjouModifEmp.PlannerDBMaskDatePicker1.Date:=(date());
    AjouModifEmp.showmodal;
    end;
    Apercu:
    Nom : Capture1.JPG
Affichages : 346
Taille : 259,9 Ko

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 262
    Points
    25 262
    Par défaut
    la variable "Principale" est-elle correctement affectée ? cela ne serait pas elle qui serait à nil ?
    Les variables globales, c'est le MAL !

    Il semble que tes objets Tables sont sur la fiche Principale !
    Un DataModule aurait été plus appoprié !

    Comment fait tu pour t'y retrouver avec ToolButton1, ToolButton15, ToolButton6, ToolButton2, ToolButton26, ToolButton21 ...
    C'est immaintenable !

    Qu'une fenêtre secondaire appel le gestionnaire du Click de la fenêtre principale,
    ce n'est pas très élégant, c'est un couplage fort qui rend ton code sensible à ce genre d'instabilité
    De plus tu passes au Click un Sender qui n'est pas le bon !

    As-tu bien instancié les fenêtres AjouModif et AjouModifEmp ?
    surement de vilains CreateForm dans le DPR !

    juste pour déboggueur modifie ton code ainsi



    Boutons Supp et Ajout pour TArchive:

    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
    procedure TFSupArchive.W7ToolButton1Click(Sender: TObject);
    begin
      if not Assigned(Principale) then
       ShowMessage('Principale est nil');
     
      if not Assigned(Principale.TArchive) then
       ShowMessage('Principale.TArchive est nil');
     
    Principale.TArchive.Delete;
    Principale.W7ToolButton15Click(Principale.W7ToolButton15);//calcul le nombre d'enregistrement dans le DBGrid.
    Close;
    end;
     
    procedure TPrincipale.W7ToolButton6Click(Sender: TObject);
    begin
      if not Assigned(TArchive) then
       ShowMessage('TArchive est nil');
     
      if not Assigned(AjouModif ) then
       ShowMessage('AjouModif est nil');
     
    TArchive.insert;
    AjouModif.PlannerDBMaskDatePicker1.Date:=(date());
    AjouModif.showmodal;
    end;
    Boutons Supp et Ajout pour TEmploye:
    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
    procedure TFSupEmpl.W7ToolButton2Click(Sender: TObject);
    begin
      if not Assigned(Principale) then
       ShowMessage('Principale est nil');
     
      if not Assigned(Principale.TEmploye) then
       ShowMessage('Principale.TEmploye est nil');
     
    Principale.TEmploye.Delete;
    Principale.W7ToolButton26Click(Principale.W7ToolButton26Click);//calcul le nombre d'enregistrement dans le DBGrid.
    Close;
    end;
     
    procedure TPrincipale.W7ToolButton21Click(Sender: TObject);
    begin
      if not Assigned(TEmploye) then
       ShowMessage('TEmploye est nil');
     
      if not Assigned(AjouModifEmp) then
       ShowMessage('AjouModifEmpest nil');
     
    TEmploye.insert;
    AjouModifEmp.PlannerDBMaskDatePicker1.Date:=(date());
    AjouModifEmp.showmodal;
    end;

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut
    salut,

    Je pense que la réponse est moins difficile, car je peux ajouter et modifier et même faire la recherche normalement, sauf quand je supprime un enregistrement après j'assai d'ajouter un autre, là je reçois le message d'erreur!

  8. #8
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 785
    Points : 5 916
    Points
    5 916
    Par défaut
    Citation Envoyé par samidz2014 Voir le message
    Je pense que la réponse est moins difficile, car je peux ajouter et modifier et même faire la recherche normalement, sauf quand je supprime un enregistrement après j'assai d'ajouter un autre, là je reçois le message d'erreur!
    Vous lancez l'application en mode Debug. Quand l'exception est déclenchée, vous regardez la pile d'appel des fonctions et procédures et en cliquant sur chacun d'entre elles, vous verrez par où "est passée" l'application et quelle variable/propriété/objet non initialisée a provoqué l'erreur.
    Vous pouvez aussi mettre un point d'arrêt dans la méthode d'insertion et que vous suivez pas à pas (F8/F7) pour voir quelle instruction précise déclenche l'exception...

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut
    Salut,

    J'ai remarqué que l'erreur se déclanche quand je click sur l'un des ligne de DBGRID avant de cliquer sur le bouton 'Ajouter', alors j'ai pensé à le désélectionner avant l'appelle de la fenêtre 'Ajouter', alors j'ai ajouté ce code dans le OnClick du Bouton 'Ajouter':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Principale.RzDBGrid2.SelectedRows.Clear;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TPrincipale.W7ToolButton21Click(Sender: TObject);
    begin
    Principale.RzDBGrid2.SelectedRows.Clear;
    TEmploye.insert;
    AjouModifEmp.tag := 1;
    AjouModifEmp.PlannerDBMaskDatePicker1.Date:=(date());
    AjouModifEmp.showmodal;
    end;
    Normalement c'est réglé

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

Discussions similaires

  1. [TSocket] Message d'erreur
    Par rgz dans le forum Web & réseau
    Réponses: 6
    Dernier message: 04/07/2003, 09h16
  2. Surcharger le message d'erreur après un OnException
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 2
    Dernier message: 24/04/2003, 11h42
  3. Réponses: 4
    Dernier message: 04/03/2003, 01h05
  4. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 14h54
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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