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

Firebird Discussion :

Erreur aléatoire sur une fonction


Sujet :

Firebird

  1. #1
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Erreur aléatoire sur une fonction
    Bonjour

    J'ai une fonction qui fonctionnait parfaitement depuis des lustres et depuis aujourd'hui, il arrive qu'elle me donne le message d'erreur
    Le projet Test.exe a provoqué une classe d'exception avec le message Zquery: champs '' non trouvé'
    Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function TableExist(TableName : String): Boolean;
    Begin
     Zquery.SQL.Clear;
     ZQuery.SQL.Add('SELECT COUNT(*) AS COMBIEN FROM RDB$RELATIONS  WHERE RDB$RELATION_NAME = '+
                    QuotedStr(TableName));
     Zquery.ExecSQL  ;
     Zquery.Active:=true;
    if DataSourceZQuery.DataSet.FieldByName ('COMBIEN').asinteger > 0 then
                        Result := True
                                                                      else
                        Result := False;
    End;
    Cette fonction est appelée plusieurs fois sans problème dans le programme.
    Elle plante quand le composant a été utilisé précédemment avec une autre requête.

    Je serai reconnaissant envers celui qui m'apprendrais ce que je dois faire pour résoudre ce problème.

  2. #2
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut
    Bonjour,

    Apparement dans ton IBQuery tu as ajouté les champs et par la suite tu as changé carrement ta requête ce qui te donne champ inexistant.

    exemple :
    si un IBQuery contient dans son SQL le texte suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(*) FROM FACTURE
    En rajoutant les champs à IBQuery me donne COUNT comme champ.
    et si veux utiliser IBQuery pour une autre requette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IBQuery.close;
    IBQuery.sql.text:='SELECT SUM(TTC) FROM FACTURE';
    IBQuery.Open; // à ce moment le programme génére IBQuery:champ COUNT non trouvé.
    le programme ne génère pas une erreur si on maintient le même nom de champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IBQuery.close;
    IBQuery.sql.text:='SELECT COUNT(*) FROM LIVRAIS';
    IBQuery.Open; // à ce moment le programme génére IBQuery:champ COUNT non trouvé.

  3. #3
    Expert éminent sénior
    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 : 61
    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
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Un ExecSQL et un Active := True en même temps cela me parait bizarre !
    Je ferais plutot ceci, un Open sur une instruction Select suffit:
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function TableExists(TableName : String): Boolean;
    begin
      with ZQuery do
      begin
        SQL.Clear;
        SQL.Add('SELECT COUNT(*) AS COMBIEN');
        SQL.Add('FROM RDB$RELATIONS');
        SQL.Add('WHERE RDB$RELATION_NAME = ' + QuotedStr(TableName));
        Open;
        result := FieldByName('COMBIEN').AsInteger > 0;
        Close;
      end;
    end;

    Perso j'aurais posé cette question dans le forum Delphi - Bases de données.
    Pas grand chose à voir avec IB/FB.

    @+ Claudius

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Perso j'aurais posé cette question dans le forum Delphi - Bases de données.
    tu as raison mais j'ai cru un moment que c'était une faille de la requête.
    Pour le reste, j'avais résolu le problème en fermant la requête qui précédait l'utilisation de ma fonction.

    Merci quand même pour ta source plus propre et élégante que la mienne.

  5. #5
    Expert éminent sénior
    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 : 61
    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
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par defluc Voir le message
    Merci quand même pour ta source plus propre et élégante que la mienne.
    Avec plaisir

    Dans ce type de fonction, je veille toujours à ce que la requête soit immédiatement refermée une fois que j'ai récupéré l'info, voir en plus un p'tit Commit pour conclure.

    @+ Claudius.

  6. #6
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Par rapport à ta source, j'ai du ajouter
    a l'entrée dans la fonction.

  7. #7
    Expert éminent sénior
    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 : 61
    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
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par defluc Voir le message
    Par rapport à ta source, j'ai du ajouter
    a l'entrée dans la fonction.
    Et pourquoi ?
    La valeur de result sera forcément renseignée avec mon code !

  8. #8
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    En principe oui et pourtant, j'avais une erreur sans cela.

  9. #9
    Expert éminent sénior
    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 : 61
    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
    Points : 10 008
    Points
    10 008
    Par défaut
    Bon je ne vois pas trop pourquoi, mais bon si ça marche !

    @+ Claudius

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

Discussions similaires

  1. Erreur #VALEUR! sur une fonction perso de recherche
    Par Missouflo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/07/2013, 11h32
  2. Réponses: 5
    Dernier message: 08/12/2012, 16h50
  3. erreur syntaxe sur une fonction pow
    Par superyoury dans le forum C
    Réponses: 3
    Dernier message: 10/06/2007, 18h16
  4. erreur sur une fonction
    Par rimbaut dans le forum C
    Réponses: 3
    Dernier message: 01/04/2006, 17h28
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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