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 :

insertion dans table maitre et détail


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2017
    Messages : 17
    Points : 2
    Points
    2
    Par défaut insertion dans table maitre et détail
    salut
    je m'explique donc j'ai deux tables en ma possession
    tblclient tblcommande
    clientID idcom
    nom date_com
    prenom nature_com
    age

    relier entre elle une a plusieurs un client plusieurs commandes,
    j'ai 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 TForm2.Button1Click(Sender: TObject);
    begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('insert into client,commande');
    ADOQuery1.SQL.Add('nom,prenom,age,date_com,nature_com');
    ADOQuery1.SQL.Add('values(aydin,petro,30,03/11/2019),trimibutine');
    ADOQuery1.SQL.Add('where clientID=idcom');
    ADOQuery1.ExecSQL;
     
    with ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select client,conmmande where clientID=idcom');
      Open;
    end;
    end;
    j'aimerais avoir votre avis.
    sincerly merci.

    one apple a day keeps doctors away

  2. #2
    Rédacteur/Modérateur

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

    Mon/Mes avis
    1- une évidence : vous ne maitrisez pas les bases de données
    2- votre structure pour la table commande est imparfaite et nécessiterait un numéro de commande unique ne serait-ce qu'un auto-incrément
    3- votre requête insert est incorrecte
    a) la syntaxe est incorrecte https://docs.microsoft.com/fr-fr/off...oft-access-sql, on ne fait un INSERT que sur une table
    b) le passage des valeurs est incorrect les chaines de caractères doivent être entre quotes, la date sous le format de la bdd et entre quotes, le mieux étant de passer par des requêtes paramétrées
    conclusion du point 3 , il faut deux requêtes SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        ADOQuery1.SQL.Text:='insert into client(id,nom,prenom,age) values(:id,:nom,:prenom,:age) ';
        ADOQuery1.Params.ParamByName('id').asInteger := ; // à remplir
        ADOQuery1.Params.ParamByName('nom').asString :='aydin' ; 
        ADOQuery1.Params.ParamByName('prenom').asString :='petro' ;
        ADOQuery1.Params.ParamByName('age').asInteger :=30; 
        ADOQuery1.ExecSQL;
        ADOQuery1.SQL.text:='Insert into commande(id_com,nature_com,date_com) values (:id,:nat,:dcom)';
        ADOQuery1.Params.ParamByName('id').asInteger := ; // à remplir
        ADOQuery1.Params.ParamByName('nat').asString :='trimibutine' ;
        ADOQuery1.Params.ParamByName('dcom').asDate :=StrToDate('03/11/2019'); 
        ADOQuery1.ExecSQL;
    * Note concernant les paramètres, comme il s'agit de ADO avec lequel je ne suis pas très à l'aise il sera peut-être nécessaire qu'ils soient déclarés avant

    enfin, pour vérifier le résultat (requête Select) votre requête , qui ne fonctionnera pas car il manque à minima '* FROM' , est loin d'être normalisée prenez l'habitude d'utiliser des jointures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with ADOQuery1 do
    begin
      Close;
      SQL.Text:='select * from client left join commande where client.ID=commande.idcom';
      Open;
    end;
    de même il est mieux d'indiquer les colonnes que vous voulez récupérer plutôt que *, dans le SQL du code au dessus vous aurez deux fois l'id du client, une fois en tant qu'id , une fois en tant que idcom, la rédaction devenant plus "longue" il est aussi de "bon ton" d'utiliser des alias de table pour rendre la lecture plus facile

    Liste de tout les clients qu'ils aient 0 à n commandes
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT C.ID,C.Nom,C.Prenom,C.age,M.Nature_com,M.date_com from client c left join commande m on m.idcom=c.id

    Liste de tout les clients ayant passé commande (on pourrait dire liste des commandes clients)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT C.ID,C.Nom,C.Prenom,C.age,M.Nature_com,M.date_com from client c join commande m on m.idcom=c.id

    Bien sûr un ORDER BY ne serait pas de trop


    Dernière chose, je vous avais déjà recommandé d'ouvrir une nouvelle discussion pour ce sujet , je déplace cette discussion mais j'aurai aimé ne pas avoir à le faire !
    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

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    je savais pas que Mr sergio avait besoin du café et du thé (Bases access)

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    @Miwan
    J'ai trois bêtes noires : ACCESS , ADO et DBExpress et je ne cache pas ce fait ces parties ne sont pas ma tasse de thé (déjà que je ne suis pas un grand consommateur de thé )
    Sans mon café du matin (seul de la journée) je ne suis qu'un ours attention de ne pas me prendre par surprise au réveil
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2017
    Messages : 17
    Points : 2
    Points
    2
    Par défaut AJOUT RECORDS ET JOINTURES
    SALUT
    j'ai ameliorer mon MSsql mais desole pour le moment je ne connais que base de donnees ms access,donc tout mon travail est baser
    sur cet apprentissage alors si vous pouvez m'aidez je vous serais tres reconnaissant.
    merci

  6. #6
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2017
    Messages : 17
    Points : 2
    Points
    2
    Par défaut position du curseur sur un recorset
    salut
    j'ai un probleme avec la position du curseur ,faut t_il utiliser un recnomber ou locate
    merci

Discussions similaires

  1. débutant-Insertion dans table valeurs saisies sur formulaire
    Par Michel Hubert dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 09h07
  2. recherche dans table maitre detail
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/03/2006, 13h00
  3. [Conception] boucle insertion dans table
    Par Invité dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 15/03/2006, 09h38
  4. Insertion dans table SQL server (Trigger) Aidz moi SVP????
    Par pop bob dans le forum Développement
    Réponses: 2
    Dernier message: 30/07/2005, 23h55
  5. Réponses: 3
    Dernier message: 19/11/2004, 21h48

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