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

Langage Delphi Discussion :

Utilisation d'un TDbLookUpCombobox


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut Utilisation d'un TDbLookUpCombobox
    Bonjour,

    Je n'avais encore jamais utilisé un TDbLookUpCombobox, c'est apparemment très intéressant (MAJ auto si nouvelle saisie etc...)
    Je voudrais récupérer la Valeur d'un champ d'une table (BaseSqlite) pour la reporter dans un TDbLookUpCombobox
    je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBLookupCBSousCat.Text := DataModule2.FDQueryEcheancier.FieldByName('ESousCategories').AsString;
    voici l'erreur produite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [dcc64 Erreur] ModifierEcheance.pas(120): E2129 Affectation impossible à une propriété en lecture seule
    Je ne trouve pas la propriété 'Lecture seule' ?

    Merci pour le coup de pouce

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Il faut passer le DataField la valeur de cette clé
    Eventuellement utiliser le ListSource et un locate pour être certains
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Réponse courte : il faut utiliser DBLookupCBSousCat.Keyvalue pas DBLookupCBSousCat.Text

    TDBLookupCombobox est, en effet, un composant intéressant. Il y a deux manières de l'utiliser :
    - comme simple aide à la saisie sans liaison avec les données à éditer, on a affaire alors à un simple remplissage de combo
    - en liaison avec une colonne

    Dans le premier cas seules les propriétés ListSource,ListField et KeyField. Importante cette dernière propriété, puisque c'est la colonne liaison (foreign key) entre, dans ton cas, Echeancier et souscategorie.
    Dans le second, y remplir en sus, les propriétés Datasource et DataField (le fait de de faire ça évite le code "malheureux"
    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

  4. #4
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Merci pour vos réponses

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBLookupCBCategories.KeyValue:=DataModule2.FDQueryCptDetails.FieldByName('Categories').AsString;
    Comme me le propose Serge j'obtiens cette erreur

    Nom : Message.jpg
Affichages : 168
Taille : 28,7 Ko

    Si je passe un DataField qui est lié au DataSource j'obtiens une référence circulaire!!!

    Je creuse encore le problème et vous en informe !

    Merci

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Ah, je croyais que les sous catégories faisait partie d'une table à part et non pas une requête faite sur la table CptDetails
    Ce qui expliquerait cette référence circulaire.
    Ma boule de cristal n'est pas bonne au jeu des devinettes structure de tables (pour moi il y avait une table Detail et une table catégories)
    Il faut donc des détails plus "croustillants" pour comprendre (il en va de même pour cette histoire de KeyValue:=) , une image écran de l'inspecteur d'objets pour voir les propriétés du combobox, une structure de table ... bref de la mâche
    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

  6. #6
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Excuse Serge

    Voici la structure des mes tables

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE Categories (
      Id_Categories INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      Categorie_Libelle VARCHAR(80) NULL
    );
     
    CREATE TABLE SousCategories (
      Id_SousCat INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      Id_Categories INTEGER NULL,
      SousCat_Libelle VARCHAR(80) NULL,
      CONSTRAINT Categories_SousCategories FOREIGN KEY (Id_Categories) REFERENCES Categories (Id_Categories) ON DELETE RESTRICT ON UPDATE RESTRICT
    );

    Voici l'inspecteur d'objet

    Nom : Panneau.PNG
Affichages : 136
Taille : 56,0 Ko


    Table Details Comptes
    Code SQL : 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
    CREATE TABLE DetailsCpt (
      IdDetails INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      IdCpt INTEGER NULL,
      DateEnregistre DATE NOT NULL,
      Types VARCHAR(50) NOT NULL,
      NumChq VARCHAR(7) NULL,
      Tiers VARCHAR(80) NOT NULL,
      Categories VARCHAR(50) NOT NULL,
      SousCategories VARCHAR(50) NOT NULL,
      Debit NUMERIC(7,2) NULL DEFAULT 0,
      Credit NUMERIC(7,2) NULL DEFAULT 0,
      Pointeur VARCHAR(3) NULL,
      IdBudget INTEGER NULL,
      CONSTRAINT Comptes_DetailsCpt FOREIGN KEY (IdCpt) REFERENCES Comptes (IdCpt) ON DELETE RESTRICT ON UPDATE RESTRICT,
      CONSTRAINT Budgets_DetailsCpt FOREIGN KEY (IdBudget) REFERENCES Budgets (IdBudget) ON DELETE RESTRICT ON UPDATE RESTRICT
    );

    Pour La Gestion du DbLookUpCombobox

    Nom : Ecran-2.PNG
Affichages : 143
Taille : 48,6 Ko

    En résumé, lors de l'enregistrement des données, aucun problème tout est OK
    C'est lors du réaffichage pour l'opération de Modification que l'on trouve les problèmes !!!
    Avec un ComboBox normal cela ne me pose aucun problème, je ne m'attendez pas galérer ainsi avec DbLookUpCombobox

    Merci

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par gegila Voir le message
    Excuse Serge
    Il n'y a pas de quoi, c'est juste qu'il me fallait comprendre à quoi j'avais à faire et je ne me souvenais plus de l'ancienne discussion sur le remplissage des combobox

    Je détecte, mais c'est mon avis, quelques incohérences au niveau structure de DetailsCPT

    Categories VARCHAR(50) NOT NULL, // je mettrai id_categories FOREIGN KEY (Id_Categories) REFERENCES Categories et encore est-elle utile ??
    SousCategories VARCHAR(50) NOT NULL, //je mettrai id_souscat FOREIGN KEY (Id_souscat) REFERENCES SousCategories

    et du coup je pense que le problème est là
    si tu continues sur ta voie, AMHA KeyField devrait être égal à Categorie_Libelle
    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

  8. #8
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Merci Serge

    Je teste et je fais retour

  9. #9
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Si j'ai bien compris c'est au niveau de ma table DetailsCpt qu'il y aurait le Pb

    J'ai donc modifié comme cela

    Code SQL : 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
    CREATE TABLE DetailsCpt (
      IdDetails INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      IdCpt INTEGER NULL,
      DateEnregistre DATE NOT NULL,
      Types VARCHAR(50) NOT NULL,
      NumChq VARCHAR(7) NULL,
      Tiers VARCHAR(80) NOT NULL,
      Categories VARCHAR(50) NOT NULL CHECK (id_Categories FOREIGN KEY (Id_Categories) REFERENCES Categories),
      SousCategories VARCHAR(50) NOT NULL CHECK (id_SousCat FOREIGN KEY (Id_souscat) REFERENCES SousCategories),
      Debit NUMERIC(7,2) NULL DEFAULT 0,
      Credit NUMERIC(7,2) NULL DEFAULT 0,
      Pointeur VARCHAR(3) NULL,
      IdBudget INTEGER NOT NULL,
      CONSTRAINT Comptes_DetailsCpt FOREIGN KEY (IdCpt) REFERENCES Comptes (IdCpt) ON DELETE RESTRICT ON UPDATE RESTRICT,
      CONSTRAINT Budgets_DetailsCpt FOREIGN KEY (IdBudget) REFERENCES Budgets (IdBudget) ON DELETE RESTRICT ON UPDATE RESTRICT
    );

    Si c'est ce que tu me propose de faire !
    Je crée une nouvelle base de test avec la modif ci dessus
    et je vois

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je n'aurais pas vu ça comme ça, mais plutôt

    Code SQL : 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
    CREATE TABLE DetailsCpt (
      IdDetails INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      IdCpt INTEGER NULL,
      DateEnregistre DATE NOT NULL,
      Types VARCHAR(50) NOT NULL,
      NumChq VARCHAR(7) NULL,
      Tiers VARCHAR(80) NOT NULL,
    --  Categories VARCHAR(50) NOT NULL CHECK (id_Categories FOREIGN KEY (Id_Categories) REFERENCES Categories),
      id_SousCat INTEGER NOT NULL,
      Debit NUMERIC(7,2) NULL DEFAULT 0,
      Credit NUMERIC(7,2) NULL DEFAULT 0,
      Pointeur VARCHAR(3) NULL,
      IdBudget INTEGER NOT NULL,
      CONSTRAINT Comptes_DetailsCpt FOREIGN KEY (IdCpt) REFERENCES Comptes (IdCpt) ON DELETE RESTRICT ON UPDATE RESTRICT,
      CONSTRAINT Budgets_DetailsCpt FOREIGN KEY (IdBudget) REFERENCES Budgets (IdBudget) ON DELETE RESTRICT ON UPDATE RESTRICT,
      CONSTRAINT Details_Categorie FOREIGN KEY(id_SousCat) REFERENCES Souscategories(id_SousCat)  ON DELETE RESTRICT ON UPDATE RESTRICT
     );
    Pourquoi pas de catégories ? parce qu'une sous catégories fait partie d'une catégorie.

    Je pense que si tu as indiqué les libellé des catégories c'est parce que tu utilises un FDtable pour éditer les détails. Enfait il faudrait utiliser un FDQuery du genre
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT   D.IdDetails, D. IdCpt,D.DateEnregistre,D.Types,D.NumChq,D.Tiers,
                 C.ID_CAT,C.Categorie_Libelle,D.Id_SousCat,SC.SousCat_Libelle,D.Debit,D.Credit,D.Pointeur,D.IdBudget
    FROM  DetailsCpt D LEFT JOIN  SousCategories SC ON SC.Id_SousCat=D.Id_SousCat 
                              LEFT JOIN Categories C ON C.Id_Categories=SC.Id_Categories
    Evidemment, cette tournure nécessite ensuite (du moins est-ce ce que je fais toujours) l'ajout d'un FDUpdateSQL à associer avec le FDQuery ce qui permet de peaufiner les SQL pour les différentes opérations.

    En P.S., Bien sur il y a quand même une inconnue de ma part, un ligne de détail a-t-elle toujours une sous catégorie ?

    En PPS sans avoir jamais tester, il faudra un jour, les clauses SQL au sein du FDUpdateSQL pourraient être multiples. Je doute toujours de cette utilisation qui serait pourtant pratique
    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

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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