Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/09/2007, 14h30   #1
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
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
Citation:
Le projet Test.exe a provoqué une classe d'exception avec le message Zquery: champs '' non trouvé'
Voici la fonction :
Code :
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.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 15h40   #2
Membre habitué
 
Avatar de abdelghani_k
 
Inscription : octobre 2002
Messages : 183
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : octobre 2002
Messages : 183
Points : 113
Points : 113
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 :
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 :
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 :
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é.
abdelghani_k est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 15h45   #3
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
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 :
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
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 16h04   #4
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Citation:
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.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 16h12   #5
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
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.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 16h21   #6
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Par rapport à ta source, j'ai du ajouter
a l'entrée dans la fonction.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 16h24   #7
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
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 !
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 16h32   #8
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
En principe oui et pourtant, j'avais une erreur sans cela.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 16h34   #9
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Bon je ne vois pas trop pourquoi, mais bon si ça marche !

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h07.


 
 
 
 
Partenaires

Hébergement Web