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 :

Recupérer le résultat d'une requête sur une table Firebird


Sujet :

Bases de données Delphi

  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 : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Recupérer le résultat d'une requête sur une table Firebird
    Je voudrais affecter à une variable d'un programme Delphi, le résultat d'une requête.
    J'utilise un composant Query et la requête suivante se fait sans message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       CadaDataModule.Zquery.Sql.Clear;
       SqlStr := 'Select Distinct REVENU As REVENU FROM "SelectTable" ';
       SqlStr := SqlStr + 'WHERE Div = :Divis And Sect = :Section And Radical = :Radic ';
       SqlStr := SqlStr + 'And ExposLet = :ExpLet And ExposDigit = :ExpDigit And Indice = :Ind ';
       SqlStr := SqlStr + 'And NOM = :Nom ';
       CadaDataModule.Zquery.SQL.Add(SqlStr);
       CadaDataModule.Zquery.Params[0].AsInteger := Divis ;
       CadaDataModule.Zquery.Params[1].AsString := Section ;
       CadaDataModule.Zquery.Params[2].AsInteger := Radic ;
       CadaDataModule.Zquery.Params[3].AsString := ExpLet ;
       CadaDataModule.Zquery.Params[4].AsString := ExpDigit ;
       CadaDataModule.Zquery.Params[5].AsString := Ind ;
       CadaDataModule.Zquery.Params[6].AsString := Nom ;
       CadaDataModule.Zquery.ExecSQL;
    Par contre, l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Revenu := CadaDataModule.Zquery.FieldByName ('Revenu').asinteger ;
    qui suit directement le code précédent donne l'erreur
    Le projet MonProjet a provoqué une classe d'exception EDatabaseError avec le message 'Zquery: Champ 'Revenu' non trouvé
    J'ai forcément oublié quelque chose.
    Une idée sur l'erreur ?

  2. #2
    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

    Citation Envoyé par defluc
    J'ai forcément oublié quelque chose.
    ou peut-être l'inserve, quelque chose en trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      SqlStr := 'Select Distinct REVENU As REVENU FROM "SelectTable" ';
    Pourquoi mettre un alias alors que le champ porte le même nom ? Je ne sais si c'est la source de l'erreur, mais je supprimerais l'alias.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SqlStr := 'Select Distinct REVENU FROM "SelectTable" ';
    @+ Claudius

  3. #3
    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 : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    L'erreur persiste sans alias.

  4. #4
    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 ce n'était pas ca, mais cela reste bizarre !
    Ce sont des compos Zeos que tu utilises ?

    As-tu essayé avec Fields[0] ?

  5. #5
    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 : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Revenu := CadaDataModule.Zquery.Fields[0].asinteger ;
    j'ai le message
    Index de liste hors limites (0)
    Pourtant quand je fais un «Insert Into TableTest» avec la même sélection, la valeur du champs est bien insérée.
    C'est un peu idiot de passer par une table temporaire pour extraires une valeur unique.

    Je travaille avec les composants Zeos qui me donnent toute satisfaction et je ne crois pas que cette erreur leur soit imputable.

  6. #6
    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
    Je travaille avec les composants Zeos qui me donnent toute satisfaction et je ne crois pas que cette erreur leur soit imputable.
    Non je ne le crois pas non plus, les compos Zeos ont très bonne réputation.

    Bon ben là je suis à court d'idée !

    le message:
    Index de liste hors limites (0)
    laisserais entendre que la requête ne renvoie aucun champ !! J'y perds mon latin, désolé

    @+

  7. #7
    Membre habitué Avatar de giltonic
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 109
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par defluc
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Revenu := CadaDataModule.Zquery.Fields[0].asinteger ;
    j'ai le message
    Pourtant quand je fais un «Insert Into TableTest» avec la même sélection, la valeur du champs est bien insérée.
    C'est un peu idiot de passer par une table temporaire pour extraires une valeur unique.

    Je travaille avec les composants Zeos qui me donnent toute satisfaction et je ne crois pas que cette erreur leur soit imputable.
    Si c un peu un requete a tout faire il faut faire assez gaffe
    Essaye plutot un
    Query.open au lieu d'un Query.ExecSQL

    De plus au debut il faudrait passer en RequestLive:=false pour une requete de Selection c mieux.

    Salutations
    Musique : Oasis | Photos : Panoramio

  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 : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Cela marche avec Query.Open plutôt que Query.ExecSql que j'ai toujours utilisé comme une «bonne à tout faire».

    Va falloir la nuance qui différencie ces deux commandes.

    Grand merci pour ton aide rapide et fructueuse et à charge de revanche.

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

Discussions similaires

  1. Remplacer une requête sur une class par une valeur constante ?
    Par Lillie CHARLOTTE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2015, 09h59
  2. [Toutes versions] Faire en VBA une requête sur une requête paramétrée
    Par guidav dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/02/2012, 17h10
  3. Réponses: 1
    Dernier message: 30/08/2011, 09h53
  4. Tri d'une requête sur une valeur ou une autre
    Par mims1664 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/08/2009, 17h40
  5. Résultat de 2 requêtes sur une même ligne
    Par cgone dans le forum SQL
    Réponses: 1
    Dernier message: 20/04/2007, 17h17

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