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

Bases de données Delphi Discussion :

violation d'accès sur open de TQuery


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Points : 4
    Points
    4
    Par défaut violation d'accès sur open de TQuery
    Bonjour,

    J'ai un problème concernant le code qui suit... l'erreur se produit sur le open suivant : v_search_query.Open;
    J'ai une fenêtre CPU qui s'affiche au moment de l'ouverture de la requete, le programme s'arrête avec une violation d'accès et le try .. except ne remonte aucun message ...

    ce bout de code est appelé de nombreuses fois et ne plante qu'au bout d'une heure de traitement.. j'ai vérifier le contenu de la requete et des paramètres au moment du plantage et je ne vois rien d'anormal.

    La première requete est un simple select qui regarde si l'enregistrement existe dans la base.. et la deuxième l'insère si nécessaire.

    A savoir que j'ai déjà éxecuté ce code sur un autre PC en mode Debug avec D7 et meme OS (Windows 2000) et le problème n'est pas apparu. Le PC que j'utilise en ce moment est à priori dans la meme config.
    Voilà.. si vous avez des idées.. merci de votre aide..

    Letissya.






    procedure enregistrerLiens(v_type: string; v_variante,v_varianteM: integer);
    var
    v_i:integer;
    v_laVariante: TStringList;
    v_lesLiens: TLiensFltrow;
    v_leLien: TLienFltrow;
    v_leNumeroDeCle: integer;
    v_laCle: integer;
    v_query, v_search_query: TQuery;
    begin

    v_query:=dmSqlMsnTaskFault.queryInsereLienMessage;
    v_search_query := dmSqlMsnTaskFault.querySearchLinkMessage;

    v_search_query.Prepare;
    v_query.Prepare;
    for v_i:=0 to v_lesLiens.count-1 do
    begin

    try
    v_leLien:=TLienFltrow(v_lesLiens.items[v_i]);
    v_leNumeroDeCle:=strToInt(v_laVariante[v_i]);
    v_laCle:=strToInt(v_leLien.m_referenceTSM.m_cles[v_leNumeroDeCle]);

    v_search_query.close;


    v_search_query.paramByName('p_faultCase').asString:=v_variante;
    v_search_query.paramByName('p_cleDico').asInteger:=v_laCle ;
    => v_search_query.Open;


    if v_search_query.EOF then
    try

    v_query.paramByName('p_faultCase').asString:=v_variante;
    v_query.paramByName('p_cleDico').asInteger:=v_laCle ;
    v_query.paramByName('p_special').asString:=v_leLien.m_special;
    v_query.execSQL;
    v_query.Close;
    except
    on e:exception do
    WriteLn(v_log,'ERROR recording the link FC ' + v_variante
    + #10#13 + e.message + #10#13);
    end;
    except
    on e:exception do
    WriteLn(v_log,'ERROR searching for the link FC '+ v_variante
    + #10#13 + e.message + #10#13);
    end;
    end;
    v_search_query.Close;
    v_search_query.UnPrepare;
    v_query.UnPrepare;
    end;

  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
    Tu initialises ou "v_lesLiens" ?
    Car mis à part la création dans la partie var, tu ne l'initialises pas.

    De plus tes variables TQuery sont appelées en dynamiques mais ne sont pas créés. (genre V_Query := TQuery.create(L'endroit de creation); )

    Vérifie tes créations initialisations de variables, car le problème doit venir de la.


    PS: Les balises de code c'est bien ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je n'ai pas mis le code en entier.. mais v_lesLiens est bien initialisé.. et je ne pense pas que ce soit lui qui pose un problème.

    Les requetes sont dans un Datamodule, c'est pourquoi elles sont appelées en dynamique.. elles sont créées lors de la création du DataModule.

    ce qui m'ennuit c'est que la requête est exécutée plusieurs fois et je n'arrive pas à voir pourquoi à un moment précis elle ne fonctionne plus ..

  4. #4
    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
    Remplace tes v_query par queryInsereLienMessage directement (d'ailleur je vois pas pourquoi tu crées des objets en plus au lieu de passer par les originaux directement).

    Puis, est ce que tu es sûr que l'erreur est sur le open et pas avant ? Tu as fait un pas à pas où bien en mode débug il s'arrete sur cette ligne ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Voici le début du code de la procédure qui explique pourquoi j'utilise des objets en plus... suivant le cas, je n'utilise pas la meme requete...
    le code est déjà passer par tous les cas avec succès..


    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
     
    if v_type='panne' then
         begin
            v_query:=dmSqlMsnTaskFault.queryInsereLienMessage;
            v_search_query := dmSqlMsnTaskFault.querySearchLinkMessage;
            v_lesLiens:=m_messages;
         end
         else if v_type='alarme' then
         begin
            v_query:=dmSqlMsnTaskFault.queryInsereLienAlarme;
            v_search_query := dmSqlMsnTaskFault.querySearchLinkAlarme;
            v_lesLiens:=m_alarmes;
         end
         else if v_type='plainte' then
         begin
            v_query:=dmSqlMsnTaskFault.queryInsereLienPlainte;
            v_search_query := dmSqlMsnTaskFault.querySearchLinkPlainte;
            v_lesLiens:=m_plaintes;
         end

    pour trouver l'erreur j'ai effectivement executer le code en mode pas à pas, et ça plante vraiment sur le open.. j'ai meme essayer d'encapsuler uniquement le open dans un try.. except mais sans succès ...

    je viens d'ajouter un prepare juste avant le open.. pour voir s'il va planter avant.. mais bon faut attendre une heure avant qu'il arrive sur le cas ..

  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
    Essaie avec ce code 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    procedure enregistrerLiens(v_type: string; v_variante,v_varianteM: integer);
    var
    v_i:integer;
    v_laVariante: TStringList;
    v_lesLiens: TLiensFltrow;
    v_leLien: TLienFltrow;
    v_leNumeroDeCle: integer;
    v_laCle: integer;
    v_query, v_search_query: TQuery;
    begin
     
      v_Query := TQuery.Create(dmSqlMsnTaskFault);
      v_search_query := TQuery.Create(dmSqlMsnTaskFault);
      try
        if v_type='panne' then
        begin
          v_query.SQL.Text :=dmSqlMsnTaskFault.queryInsereLienMessage.SQL.Text;
          v_search_query.SQL.Text := dmSqlMsnTaskFault.querySearchLinkMessage.SQL.Text;
          v_lesLiens:=m_messages;
        end
        else if v_type='alarme' then
        begin
          v_query.SQL.Text := dmSqlMsnTaskFault.queryInsereLienAlarme.SQL.Text;
          v_search_query.SQL.Text := dmSqlMsnTaskFault.querySearchLinkAlarme.SQL.Text;
          v_lesLiens:=m_alarmes;
        end
        else if v_type='plainte' then
        begin
          v_query.SQL.Text := dmSqlMsnTaskFault.queryInsereLienPlainte.SQL.Text;
          v_search_query.SQL.Text := dmSqlMsnTaskFault.querySearchLinkPlainte.SQL.Text;
          v_lesLiens:=m_plaintes;
        end;
     
      //  v_search_query.Prepare; // inutile vu que tu la fermes juste apres
      //  v_query.Prepare; // est ce bien utile vu que tu refais la requete plusieurs fois
        for v_i:=0 to v_lesLiens.count-1 do
        begin
     
          try
            v_leLien:=TLienFltrow(v_lesLiens.items[v_i]);
            v_leNumeroDeCle:=strToInt(v_laVariante[v_i]);
            v_laCle:=strToInt(v_leLien.m_referenceTSM.m_cles[v_leNumeroDeCle]);
     
            With v_search_query do
            begin
              Close;
              paramcheck := true;
              paramByName('p_faultCase').asString:=v_variante;
              paramByName('p_cleDico').asInteger:=v_laCle ;
              Open;
            end;
            if v_search_query.EOF then
            try
              With vQuery do
              begin
                Close;
                Paramcheck := True;
                paramByName('p_faultCase').asString:=v_variante;
                paramByName('p_cleDico').asInteger:=v_laCle ;
                paramByName('p_special').asString:=v_leLien.m_special;
                execSQL;
              end;
            except on e:exception do
              WriteLn(v_log,'ERROR recording the link FC ' + v_variante
              + #10#13 + e.message + #10#13);
            end;
          except on e:exception do
            WriteLn(v_log,'ERROR searching for the link FC '+ v_variante
            + #10#13 + e.message + #10#13);
          end;
        end;
        v_search_query.Close;
        v_query.Close;
    //    v_search_query.UnPrepare;
    //    v_query.UnPrepare;
      finally
        v_query.free;
        v_search_query.free;
      end;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

Discussions similaires

  1. Violation d'accès sur une form
    Par medkyl dans le forum Débuter
    Réponses: 4
    Dernier message: 30/09/2008, 23h55
  2. Violation d'accès sur oleaut.dll
    Par colorid dans le forum Delphi
    Réponses: 6
    Dernier message: 20/01/2007, 11h32
  3. [BSD 2006] Erreur de violation d'accès sur un ShowModal
    Par doudoustephane dans le forum C++Builder
    Réponses: 36
    Dernier message: 14/10/2006, 12h10
  4. Violation d'accès sur un TIdFTP
    Par cfalcot dans le forum Web & réseau
    Réponses: 9
    Dernier message: 09/05/2006, 15h14
  5. Violation d'accès sur un TXMLDocument
    Par WebPac dans le forum Composants VCL
    Réponses: 14
    Dernier message: 15/03/2005, 15h10

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