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 : 313
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 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Accès à un objet libéré ou non encore créé ? (apparemment, lecture d'un pointeur nul)
    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 à 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 858
    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 858
    Points : 11 301
    Points
    11 301
    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 ?
    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 à 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 : 341
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 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
    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;
    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

  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 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    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...
    Philippe.

  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