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 :

[TQuery][ParamByName]Aucune exception n'est déclenchée


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut [TQuery][ParamByName]Aucune exception n'est déclenchée
    J'utilise un TQuery avec paramètre pour insérer des enregistrements dans une BDD (MS SQL 2000, via BDE + ODBC).
    L'insertion fonctionne parfaitement.

    Dans certain cas des exceptions peuvent êtres déclenchées (type de données, violation d'index...). En cas d'exception l'applic. ne passe pas dans le gestionnaire d'exception ! L'insertion n'a bien sur pas été faite.
    Si je supprime le paramètre et exécute l'insertion qui doit échouer alors je passe bien dans le gestionnaire d'exception !

    Une idée ?

    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
     
    With TQuery.Create(application) do
    try
      DatabaseName := ...
      SQL.Add(...)
      MemStream := TMemoryStream.create;
      try
        MemStream.write(...);
        ParamByName('BlbValue').LoadFromStream(MemStream,ftBlob); 
      finally
        MemStream.free;
      end;
     
      try
        ExecSQL;
      except
        on e: exception do 
          begin
            // Je n'arrive jamais ici !!!
          end;
      end;
    finally
      free;
    end;
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 062
    Points : 41 023
    Points
    41 023
    Billets dans le blog
    62
    Par défaut
    TQuery.ParamCheck est égal à ?
    Cela pourrait peut-être faire la différence ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    J'avais laissé paramCheck à sa valeur par défaut (true). Est affecté false mais ca ne change rien.

    merci

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    Juste un test si tu fais (suppression d'un try):
    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
     
    With TQuery.Create(application) do
    try
      DatabaseName := ...
      SQL.Add(...)
      MemStream := TMemoryStream.create;
      try
        MemStream.write(...);
        ParamByName('BlbValue').LoadFromStream(MemStream,ftBlob); 
      finally
        MemStream.free;
      end;
     
        ExecSQL;
    except
        on e: exception do 
        begin
             instructions
        end;
    finally
      free;
    end;
     Merci

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    teach : tu veux dire complement supprimer le try ... except ... end ? Sinon la syntaxe que tu donnes ne me semble pas correct.

    Donc j'ai supprimé toute la gestion try/except. Aucune exception n'est déclenchée quand l'instruction SQL doit échouer (et elle échoue bien car aucun enregistrement n'est ajouté à la base de données) !

    merci

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    Ce n'est pas ce je voulais mais j'ai eu en tête la syntaxe des exceptions d'un autre langage, elle n'est pas la même pour Delphi donc autant pour moi.
    Ce que je veux et que tu rattaches le ExecSql au premier try et dans ce cas delphi impose de supprimer ton dernier finally
    (mais ce qui me pose souci est que: est ce Exception capte ce genre d'erreur ou ceci nécessite un type exception spécial ? bon courage )
    ceci donnera
    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
     
    With TQuery.Create(application) do
    try
      DatabaseName := ...
      SQL.Add(...)
      MemStream := TMemoryStream.create;
      try
        MemStream.write(...);
        ParamByName('BlbValue').LoadFromStream(MemStream,ftBlob); 
      finally
        MemStream.free;
      end;
       ExecSQL;
     
    except
        on e: exception do 
        begin
             instructions
        end;
    end;

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    Je ne trouve aucune explication à ce problème.
    J'ai ressorti le code d'insertion dans un projet qui ne fait que ça pour vérifier que le problème n'est pas lié à mon application.
    J'ai supprimé tous les try/finally et try/except... toujours aucune exception n'est déclenchée.

    Je vais me passer de l'exception en testant la propriété TQuery.RowsAffected après l'exécution de la requête.
    Et si RowAffected <= 0 j'afficherai un message "L'insertion a échoué mais ne demandes pas pourquoi !"


    merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/09/2006, 11h02
  2. Quel événement est déclenché quand on passe d'un enregist...
    Par pyxosledisciple dans le forum Access
    Réponses: 1
    Dernier message: 21/01/2006, 10h40
  3. error 80020009 une exception s'est produite
    Par Riouxe21 dans le forum ASP
    Réponses: 6
    Dernier message: 21/12/2004, 11h01
  4. erreur Une exception s'est produite
    Par unix27 dans le forum ASP
    Réponses: 5
    Dernier message: 23/11/2004, 02h38
  5. erreur :"une exception s'est produite"
    Par leborg dans le forum ASP
    Réponses: 11
    Dernier message: 02/03/2004, 15h09

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