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

Lazarus Pascal Discussion :

[PostgreSQL] Erreur : champ non trouvé [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut [PostgreSQL] Erreur : champ non trouvé
    Bonjour à toutes et à tous. Encore et toujours besoin de vous.
    Sur une fiche j'ai déposé :
    • un TZQuery (Requete_Actions),
    • un TDataSource (Source_Actions),
    • un TDBLookupComboBox (DBLCB_Actions),
    • un TEdit (Edition_Nombre).

    L'évènement OnDropDown du DBLCB_Actions contient le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TFiche_Modifier_Compte.DBLCB_ActionsDropDown(Sender: TObject);
    begin
      Requete_Actions.Close;
      Requete_Actions.SQL.Text := 'SELECT act_id, act_valeur FROM s_ent.t_e_action_act ';
      Requete_Actions.SQL.Add('ORDER BY act_valeur;');
      Requete_Actions.Open;
      end;
    Le DBLCB_Actions se peuple correctement à l'activation de cet évènement.
    L'évènement OnSelect de ce même DBLCB_Actions contient le code suivant :
    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
    procedure TFiche_Modifier_Compte.DBLCB_ActionsSelect(Sender: TObject);
    var
      V_Action : variant;
      I_Action : integer;
    begin
      V_Action := DBLCB_Actions.KeyValue;
      I_Action := V_Action;
      LNombre.Enabled := true;
      Edition_Nombre.Enabled := true;
      Requete_Actions.Close;
      Requete_Actions.SQL.Text := 'SELECT cma_id FROM s_ent.t_j_compte_action_cma ';
      Requete_Actions.SQL.Add('WHERE act_id = :ACTION AND cpt_id = :COMPTE;');
      Requete_Actions.Params.ParamByName('ACTION').AsInteger := I_Action;
      Requete_Actions.Params.ParamByName('COMPTE').AsInteger := Fiche_Accueil.Compte;
      Requete_Actions.Open;
      //CmaId := Requete_Actions.FieldByName('cma_id').AsInteger;
      CmaId := Requete_Actions.Fields[0].AsInteger;
      Requete_Actions.Close;
    end;
    À l'exécution surgit l'erreur suivante :
    Nom : 2023-08-24 18 14 16.jpg
Affichages : 108
Taille : 33,1 Ko
    J'ai déposé un point d'arrêt en début du code de TFiche_Modifier_Compte.DBLCB_ActionsSelect(Sender: TObject). Tout se déroule correctement jusqu'à l'affectation de CmaId par l'une des deux méthodes, celle commentée ou l'autre. Je ne vois pas pourquoi le champ act_valeur n'est pas trouvé.
    Merci d'avance à celles ou ceux qui me dépanneront.
    Michel.

  2. #2
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 316
    Points : 453
    Points
    453
    Par défaut
    la colonne en question ne doit pas exister dans s_ent.t_e_action_act, quelles sont les colonnes de cette table?

  3. #3
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    À licardentaistor, merci pour ta réponse.
    La table s_ent.t_e_action_act possède les champs suivants :
    • act_id (PK)
    • tax_id (FK)
    • ...
    • elg_id (FK)
    • act_valeur
    • act_isin

    D'ailleurs ce champ, act_valeur, s'affiche correctement dans DBLCB_Actions.

  4. #4
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 316
    Points : 453
    Points
    453
    Par défaut
    je ne vois de connexion à la base....

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    Citation Envoyé par Miflon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TFiche_Modifier_Compte.DBLCB_ActionsDropDown(Sender: TObject);
    ...
      Requete_Actions.SQL.Text := 'SELECT act_id, act_valeur FROM s_ent.t_e_action_act ';
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFiche_Modifier_Compte.DBLCB_ActionsSelect(Sender: TObject);
    ...
      Requete_Actions.SQL.Text := 'SELECT cma_id {????????, cma_valeur}   FROM s_ent.t_j_compte_action_cma ';
    ...
    ...
    Dans ta deuxième requête il te manque l'indication du champ.
    Les query doivent avoir les mêmes champs si ceux-ci sont prédéfinis visuellement.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    À licardentaistor : la connexion à la base de données est faite par l'intermédiaire d'un module de données. Cela fonctionne puisque DBLCB_Actions est peuplé correctement.

    À anapurna : Le table s_ent.t_j_compte_actions_cma est une table de jointure dont voici les champs :
    • cma_id (PK),
    • act_id (FK) provenat de s_ent.t_e_action_act
    • cpt_id (FK) provenant de s_ent_t_e_compte_cpt,
    • cma_nombre qui correspond au nombre d'actions (act_id) détenu par le compte cpt_id.

    Dans la seconde requête je n'ai besoin que de act_id et cpt_id afin de récupérer cma_id puis modifier le nombre d'actions détenu par cpt_id à partir de la valeur du TEdit. Je vais m'orienter vers la réécriture du code de cette fiche dans un nouveau projet test.

    Merci à tous les deux, Michel.

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    Salut

    Je ne parle pas de la table, mais de ton TQuery : si celui-ci a défini les champs à l'avance, tu ne peux pas modifier la définition des champs (requête SQL).
    Pour bien faire, il nous faudrait la déclaration de ta requête dans l'en-tête de ta form / Datamodule.

    A priori il cherche à remplir un champ persistant qu'il ne retrouve pas dans la requête sous-jacente.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Pour le TDataModule :
    Juste un TZConnection (Connexion_Postgresql) avec les créances pour la base de données et un évènement OnFormCreate.
    Pour Requete_Actions, rien dans SQL et dans évènement Fiche_Module_Donnees.Connexion_Postgresql. Tout est défini par le code fourni dans mes messages précédents.
    Je croyais que les commandes Close et Open vidaient et remplissaient les requêtes à base de SELECT.
    J'espère que c'est cela que tu attendais comme réponse.

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 699
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 699
    Points : 13 138
    Points
    13 138
    Par défaut
    Ton truc ne peut pas marcher.

    Le TDBLookupComboBox est lié à un champ spécifique retourné par le TZQuery (act_valeur) et au rafraichissement (ou à l'ouverture), il se met automatiquement à jour.

    A la sélection d'un élément tu modifies la requête du même composant TZQuery et act_valeur n'y figure pas, c'est le Combobox qui râle puisqu'il ne retrouve pas son champ. L'erreur se produit sur Open et n'a rien à voir avec CmaId (l'erreur est sur la ligne précédent celle en inverse vidéo puisque le pointeur de programme a déjà avancé d'une instruction).

    Mais ça ne sert à rien d'ajouter act_valeur à la deuxième requête puisque Open te fera pointer systématiquement sur le premier enregistrement. Tu dois dédier un TZQuery au Combobox et en utiliser un deuxième pour la suite des opérations.

  10. #10
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Oh là là. Alors algorithme simpliste. Je le retravaille.

    Merci à tous pour vos remarques et conseils, Michel.

  11. #11
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Je suis victime de l'ambiance générale. Économie d'essence, d'eau, d'électricité, de tout. J'ai voulu économiser sur le nombre de composants présents sur la fiche! En ajoutant un TZQuery et un TDataSource dédiés à la seconde requête je récupère bien toutes les données dont j'ai besoin pour la suite.
    Il faudra que j'éclaircisse la fonction Close appliquée à une requête et sa source de données et ses effets.
    Merci à tous et à toutes pour votre précieuse aide, Michel.

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

Discussions similaires

  1. Erreur accordionItem non trouve
    Par marquisvincent dans le forum Silverlight
    Réponses: 7
    Dernier message: 02/07/2011, 18h37
  2. Réponses: 1
    Dernier message: 25/08/2010, 12h07
  3. Réponses: 3
    Dernier message: 11/12/2009, 20h55
  4. Erreur ressource non trouvée avec WindowBlinds
    Par jbrg dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2009, 00h09
  5. [MS-SQL] Champ non trouvé
    Par rdoudou dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/08/2007, 18h05

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