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 :

[D7-ACCESS-ADO] Joindre deux tables


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut [D7-ACCESS-ADO] Joindre deux tables
    Bonjour,

    Je vous explique mon problème : je tente d'écrire un petit logiciel pour gérer ma bibliothèque. J'essaie de réaliser un lien entre deux tables access : la table LIVRES et la table NOUVELLES. Le champ commun est livreID (numérotation automatique dans la table Livres et numérique dans la table Nouvelles).

    Au niveau de l'ADOQuery (AQNouvelles),j'ai renseigné Connection à ADOConnection1, DataSorce à DSLivres (dont le dataset est AQLivres). Dans la propriété SQL j'ai mis "SELECT * FROM Nouvelles WHERE livreID=:LivreID", comme suggéré dans l'aide.

    Ma Form contient des DBEdit pour les renseignements du livre et un DBGrid pour la liste des nouvelles.

    Eh bien, ça ne marche pas: le DBGrid ne m'affiche rien.

    Pourriez-vous m'aider à corriger cela ? Merci.

    ɹəᴉpᴉp

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Ta requète introduit une condition (WHERE livreID=:LivreID), on y trouve une "host variable" ( :LivreID avec les 2 points!) qui doit être résolue.

    Ton code doit comporter quelque part quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maquery.fieldbyname('LivreId').AsInteger:= xxxxxx ;
    Est-ce le cas ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par qi130
    Ta requète introduit une condition (WHERE livreID=:LivreID), on y trouve une "host variable" ( :LivreID avec les 2 points!) qui doit être résolue.

    Ton code doit comporter quelque part quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maquery.fieldbyname('LivreId').AsInteger:= xxxxxx ;
    Est-ce le cas ?
    Non.

    Dans mon exemple, la requète sql est introduite, à la conception, dans les propriétés du composant. Me conseille-tu de la mettre dans le code par exemple à l'activation de ma Form ? Elle doit être précédée d'un AQLivres.fieldbyname('LivreId').AsInteger:= xxxxxx ou d'un AQNouvelles.fieldbyname('LivreId').AsInteger:= xxxxxx ?

    Merci de ton aide.

    Didier

    ɹəᴉpᴉp

  4. #4
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    Oui c'est exactement ca...

    AQNouvelles.parameters.parambyname('LivreId').value:= xxxxxx ;
    AQNouvelles.open;
    J'ai pas fait gaffe desole.

    Bon desole pour la comprehension de la discussion j'ai edite par erreur mon post alors que je voulais en rajouter un...

    Ce poste est la reponse a celui situe juste en dessous.

    Milles excuses

  5. #5
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    Citation Envoyé par qi130
    Ta requète introduit une condition (WHERE livreID=:LivreID), on y trouve une "host variable" ( :LivreID avec les 2 points!) qui doit être résolue.

    Ton code doit comporter quelque part quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maquery.fieldbyname('LivreId').AsInteger:= xxxxxx ;
    Est-ce le cas ?
    je suis d'accord avec le premier volet de ta réponse qi130. pour le second, notamment le code proposé, je me pose des questions:
    LivreId est un champ de la table non ? donc ton code aura pour effet d'assigner une valeur à ce champ pour un enregistrement précis, lors de son édition!
    Mais tel que je vois le code posté par okparanoid je me rends compte que l'édition de la valeur de ce champ se fait avant son ouverture!

    je ne suis pas un habitué des composants ADO, mais n'existe-t'il pas une propriété Params avec laquelle on pourra spécifier le paramètre demandé ?
    avec un composant IBQuery je ferais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IBQuery1.Params.ParamByName('LivreId').AsInteger := xxxxxx;
    IBQuery1.Open();

  6. #6
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Bon je récapitule :

    Mon AQNouvelles possède différentes propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Datasource:=DSLivres;
    Connection:=AdoConnection1;
    ParamCheck:=True;
    Prepares:=True;
    SQL:='SELECT * FROM Nouvelles WHERE LivreID=:LivreID'
    Mon paramètre a les propriétés suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataType:=ftInteger;
    Name:='LivreID';
    Value.Type:=integer;
    Value:=0
    Dans le code à l'activation de ma form je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with DataModule1.AQNouvelles do
    begin
      Parameters.ParamValues['LivreID']:=DataModule1.AQLivres.FieldByName('LivreID').AsInteger;
      Open;
    end;
    Pourtant ça ne marche pas. L'erreur est sans doute triviale mais je suis incapable de voir où elle se trouve.

    Merci de votre aide.

    ɹəᴉpᴉp

  7. #7
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Merci à vous tous, vous m'avez mis sur la voie et j'ai fini par trouver mon erreur.

    Dans l'activation de ma form, il falait mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with DataModule1.AQNouvelles do
    begin
      Parameters[0].Value:=DataModule1.AQLivres.FieldByName('LivreID').AsInteger;
      ExecSQL;
    end;
    Maintenant, ça marche impeccablement.

    Encore merci.

    ɹəᴉpᴉp

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

Discussions similaires

  1. Joindre deux tables avec max sur date
    Par Asdorve dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/11/2012, 12h04
  2. Problèmes pour joindre deux tables !
    Par glaine dans le forum DB2
    Réponses: 7
    Dernier message: 28/09/2010, 10h19
  3. Réponses: 1
    Dernier message: 16/09/2009, 13h30
  4. joindre deux tables créées par requêtes
    Par bernard6 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/04/2007, 11h27
  5. [Access] Update liant deux tables
    Par zapatta dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/09/2006, 16h17

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