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 :

Violation - je n'en trouve pas la cause


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 76

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Par défaut Violation - je n'en trouve pas la cause
    Bonjour

    j ai de temps en temps une violation, et ca m ouvre IBUpdateSQL.pas, a la ligne 73

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    destructor TIBUpdateSQL.Destroy;
    var
     UpdateKind: TUpdateKind;
    begin
     if Assigned(FDataSet) and (FDataSet.UpdateObject = Self) then
       FDataSet.UpdateObject := nil;
     for UpdateKind := Low(TUpdateKind) to High(TUpdateKind) do
       FSQLText[UpdateKind].Free;
     inherited Destroy;
    end;
    le pb c est que si j essai de suivre au debugger, y a pas violations

    quand il arrive la, y a t il moyen de savoir qui a appellé ca ?

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Citation Envoyé par Cazaux-Moutou-Philippe Voir le message
    quand il arrive la, y a t il moyen de savoir qui a appellé ca ?
    Tu peux commencer par examiner la pile d'appel (Ctrl-Alt-S), ce qui te permettra de suivre le déroulement des évènements.

    @+ Claudius

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut


    il y a un truc qui m'interpelle dans ton code
    si l'objet ce retire automatiquement de FSQLText tu risque
    de faire un depasement d'indice
    c'est un peu comme si tu coupe la branche sur lequel tu te trouve
    pour palier a ceci il faut inverser ta boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     ... 
     for UpdateKind := High(TUpdateKind) downto  Low(TUpdateKind)  do
       FSQLText[UpdateKind].Free;
    
     inherited Destroy;
    end;

    @+ Phil

  4. #4
    Membre éclairé Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 76

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Par défaut
    Bonjour Anapurna

    ce n'est pas mon code, mais quand ça viole ça ouvre cette unité Delphi
    IBUpdateSQL.pas

    Je suis en D7

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    j'ai regarder le code de l'unitée
    bon c'est un tableau donc le probleme ne vient pas de la

    a qu'elle moment tu appelle de destroy de ibsql
    ne ferait tu pas appel de l'objet alors que celui-ci est déjà supprimer ?


    @+ Phil

  6. #6
    Membre éclairé Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 76

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Par défaut
    Quand je le suis au debugger, il arrive la

    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
    procedure TFIndividuIdentite.SuperFormDestroy(Sender: TObject);
    begin
      if assigned(aFIndividuEditEventLife) then
        FreeAndNil(aFIndividuEditEventLife);
     
      IBConjoints.close;
      IBQDetailConjoint.close;
      IBQEve.close;
      IBEnfants.close;
      IBQAjoutEnfant.close;
      IBQPatronymes.close;
      IBQPrenoms.close;
     
      application.ProcessMessages;
    end;
    puis passe la

    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
    procedure TFIndividuEditEventLife.SuperFormDestroy(Sender: TObject);
    begin
      if Assigned(l_CP) then
        FreeAndNil(l_CP);
      if Assigned(l_Dept) then
        FreeAndNil(l_Dept);
      if Assigned(l_Pays) then
        FreeAndNil(l_Pays);
      if Assigned(l_Villes) then
        FreeAndNil(l_Villes);
      if Assigned(l_Region) then
        FreeAndNil(l_Region);
      if Assigned(l_Insee) then
        FreeAndNil(l_Insee);
      if Assigned(l_lat) then
        FreeAndNil(l_lat);
      if Assigned(l_long) then
        FreeAndNil(l_long);
      if Assigned(fCodesRefTemoins) then
        FreeAndNil(fCodesRefTemoins);
      if Assigned(fLibellesRefTemoins) then
        FreeAndNil(fLibellesRefTemoins);
     
      IBQPhoto.close;
      ibqProfession.close;
      IBMultimedia.close;
      IBTemoins.close;
      IBQDetailTemoins.Close;
     
      application.ProcessMessages;
    end;
    et a la fin il part en AV

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    Citation Envoyé par Cazaux-Moutou-Philippe Voir le message
    Quand je le suis au debugger, il arrive la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TFIndividuIdentite.SuperFormDestroy(Sender: TObject);
    begin
      if assigned(aFIndividuEditEventLife) then
        FreeAndNil(aFIndividuEditEventLife); //<-- c'est ici que tu rentre dans TFIndividuEditEventLife.SuperFormDestroy
     
    // donc le probleme ce passe avant ça
    ...
    puis passe la

    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
    procedure TFIndividuEditEventLife.SuperFormDestroy(Sender: TObject);
    begin
    // maintenant il faut mettre un point d'arret afin de voir sur quelle variable ca plante 
      if Assigned(l_CP) then
        FreeAndNil(l_CP);
      if Assigned(l_Dept) then
        FreeAndNil(l_Dept);
      if Assigned(l_Pays) then
        FreeAndNil(l_Pays);
      if Assigned(l_Villes) then
        FreeAndNil(l_Villes);
      if Assigned(l_Region) then
        FreeAndNil(l_Region);
      if Assigned(l_Insee) then
        FreeAndNil(l_Insee);
      if Assigned(l_lat) then
        FreeAndNil(l_lat);
      if Assigned(l_long) then
        FreeAndNil(l_long);
      if Assigned(fCodesRefTemoins) then
        FreeAndNil(fCodesRefTemoins);
      if Assigned(fLibellesRefTemoins) then
        FreeAndNil(fLibellesRefTemoins);
     
     
       IBQPhoto.close;
       ibqProfession.close;
       IBMultimedia.close;
       IBTemoins.close;
       IBQDetailTemoins.Close;
      application.ProcessMessages;
    // est ce que jusqu'ici tous va bien ?
     
    end;

    je ne suis pas un partisant du freeandnil pour une forme
    il faut normalement faire un release afin que la forme traite tout les evenements avant de ce detruire

    @+ Phil

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

Discussions similaires

  1. [jonas]eclipse ne trouve pas le plugin
    Par Stessy dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 17/07/2007, 11h43
  2. Le compilateur ne trouve pas glut32.dll
    Par Vathal dans le forum GLUT
    Réponses: 3
    Dernier message: 26/01/2004, 12h34
  3. je ne trouve pas la bonne syntaxe
    Par poelvo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2003, 01h30
  4. [TP]trouve pas le graph.tpu
    Par kaygee dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 13/06/2003, 12h49
  5. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15

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