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

Connexion aux bases de données Firebird Discussion :

Violation d'acces apres Execute


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut Violation d'acces apres Execute
    Bonjour,

    j'ai un prob depuis un bon moment que je n'arrive pas à expliquer:

    J'affiche dans une Grid par exemple le resultat d'un querySelect : select...
    et j'ai un bouton qui lance une Update.

    dans l'evenement du bouton je met:
    ClientDataSet.CommandText := 'update...';
    ClientDataSet.Execute;

    Jusqu'au la tout va bien et si je clique sur un bouton tout deroule tres bien, et la base est bien mise a jour.

    Mais si je met une ligne de code apres l'execute, elle declenche automatiquement une violation d'acces. Meme si c juste un changement d'onglet.

    est ce quelqu'un comprend quelque chose? Merci d'avance

  2. #2
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut Re: Violation d'acces apres Execute
    Citation Envoyé par SegmentationFault
    est ce quelqu'un comprend quelque chose
    Oh oui

    Par contre l'origine du problème n'est pas forcément très simple. Elle n'est d'ailleurs très probablement pas liée à Interbase.

    Est-ce une violation en lecture ou en écriture :

    Le problème provient souvent d'un objet utilisé alors qu'il a été précédemment désalloué.
    Rien de tel que FreeAndNil au lieu de Free pour les mettre en évidence

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Si tu peux nous faire voir la portion de code ou ça foire, la je pense qu'on pourra t'aider plus.

    A+

  4. #4
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    procedure TfrmFDNC.Rinitialiserenattente1Click(Sender: TObject);
    var
    li: integer;
    begin
    Screen.Cursor := crHourGlass;
    try
    li := qryListFDNCW1_C1.AsInteger;

    DM.cdsqryTemp.Close;
    DM.cdsqryTemp.CommandText := 'update W1 set ' +
    'W1_C9=1, W1_C10=NULL, W1_C11=NULL, W1_C12=NULL, W1_C13=NULL, ' + 'W1_C14=NULL, W1_C15=NULL, W1_C16=NULL, W1_C17=NULL, W1_C18=NULL, ' + 'W1_C20=NULL, W1_C21=NULL where W1_C1=:vFDNC';
    DM.checkParam(DM.cdsqryTemp, 'vFDNC').AsInteger := li;
    DM.cdsqryTemp.Execute;

    //Refresh
    qryListFDNC.Close;
    qryListFDNC.Open;
    qryListFDNC.Locate('W1_C1', li, []);
    finally
    Screen.Cursor := crDefault;
    end;
    end;

    bein pour le checkParam, c un truc simple:

    function TDM.checkParam(qry: TClientDataSet; nomParam: string): TParam;
    begin
    Result := qry.Params.FindParam(nomParam);
    if Result = nil then
    Result := qry.Params.CreateParam(ftUnknown, nomParam, ptUnknown);
    end;

    et c'est la ligne : qryListFDNC.Close qui déclenche l'exception!!!

  5. #5
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    Laissez moi vous dire un truc plus surprennant encore! sur d'autres exemples similaire où j'avais le meme probleme, je prend tout le code avant "Execute" et je le transforme a une procedure.
    Dans ma fonctionne principale, j'appelle cette procedure! Et bein, ca marche et ca ne declenche plus d'erreurs. ne me demandez pas pq car je ne sais pas!

    pour l'exemple que je vous ai envoyé, ca ne fonctionne pas

  6. #6
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Citation Envoyé par SegmentationFault
    procedure
    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
     
    TfrmFDNC.Rinitialiserenattente1Click(Sender: TObject);
    var
      li: integer;
    begin
      Screen.Cursor := crHourGlass;
      try
        li := qryListFDNCW1_C1.AsInteger;
     
        DM.cdsqryTemp.Close;
        DM.cdsqryTemp.CommandText := 'update W1 set ' +
        'W1_C9=1, W1_C10=NULL, W1_C11=NULL, W1_C12=NULL, W1_C13=NULL, ' + 'W1_C14=NULL, W1_C15=NULL, W1_C16=NULL, W1_C17=NULL, W1_C18=NULL, ' + 'W1_C20=NULL, W1_C21=NULL where W1_C1=:vFDNC'; 
      DM.checkParam(DM.cdsqryTemp, 'vFDNC').AsInteger := li;
      DM.cdsqryTemp.Execute;
     
        //Refresh
        qryListFDNC.Close;
        qryListFDNC.Open;
        qryListFDNC.Locate('W1_C1', li, []);
      finally
        Screen.Cursor := crDefault;
      end;
    end;
    bein pour le checkParam, c un truc simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function TDM.checkParam(qry: TClientDataSet; nomParam: string): TParam;
    begin
      Result := qry.Params.FindParam(nomParam);
      if Result = nil then
        Result := qry.Params.CreateParam(ftUnknown, nomParam, ptUnknown);
    end;
    et c'est la ligne : qryListFDNC.Close qui déclenche l'exception!!!
    Comme ça c'est bien plus clair à voir
    SI j'ai bien compris, tu utilise QryListFDNC pour avoir l'identifiant pour l'update (avec cdsqryTemp).

    Tu utilise quoi comme composant d'accès au données : ADO, IBS, etc ?

    A+

  7. #7
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    cdsqryTemp et qryListFDNC sont des ClientDataSet qui sont liés à leur tour à des TIBQuery.

Discussions similaires

  1. Violation d'accès après appel d'une fonction DLL
    Par colorid dans le forum Langage
    Réponses: 9
    Dernier message: 12/06/2013, 12h15
  2. Réponses: 4
    Dernier message: 16/10/2008, 18h55
  3. BCB 6 / Violation d'accès après utilisation d'une DLL
    Par a_lincoln54 dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/04/2008, 14h15
  4. Réponses: 7
    Dernier message: 10/01/2007, 09h02
  5. Violation d'accès apres Close
    Par SegmentationFault dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/07/2004, 16h46

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