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

 Delphi Discussion :

MySQL : insertion de données dans une table


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 1
    Points : 0
    Points
    0
    Par défaut MySQL : insertion de données dans une table
    Bonjour, j'ai un problème sur delphi et mysql :
    j'ai une forme pour une table certificat_scolarité qui contient : id-niveau, id-spécialité, id-étudiant (des clés étrangères des autres tables) et il y a aussi l'année scolaire. Et voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     fdtable3.Insert;
    fdquery1.SQL.text:='insert into certificat_scl ( id_spec,id_niv) select  id_spec, id_niv from   specialite, niveau  where  (specialite.spec = '''+combobox2.text+''' and niveau.niv='''+combobox1.text+''' )' ;
     fdquery1.ExecSQL;
    Alors le fdtable3.insert est pour insérer la date (l'année scolaire), et le code sql pour insérer id_spec et id_niv mon problème c'est quand je remplis les champs ça me donne 2 lignes (une contient la date et l'autre contient id_spec et id_niv).
    SVP aidez-moi si c'est possible et merci.

  2. #2
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    On ne comprend pas grand chose ... il n'y pas de jointure entre les tables, normal ?

    Si il y a deux lignes en retour c'est simplement que deux lignes répondent aux conditions de la requête.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 666
    Points : 5 234
    Points
    5 234
    Par défaut
    Comme le précise retwas, si tu insères deux enregistrement c'est que la sous requête de sélection renvoie deux enregistrements :
    Vérifie ce que donne ta requête de sélection :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select  id_spec, id_niv from   specialite, niveau  where  (specialite.spec = '''+combobox2.text+''' and niveau.niv='''+combobox1.text+''' )

    Par ailleurs :
    - pour éviter les confusions, je te conseille de donner des noms plus parlant que "fdtable3" et "fdquery1".
    - pour éviter des problèmes de syntaxe ou de format de données, utilise des requêtes paramétrées. Il y a de nombreux exemples sur ce forum et dans la FAQ.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    ce SQL correspond à un CROSS JOIN, du coup chaque ligne de la table specialite est mixée à chaque enregistrement de la table niveau

    Vous êtes professeur ?
    Merci d'apprendre à vos élèves les bonne pratiques comme l'indique Popo, c'est le B.A.-BA

    Nommage des variables

    fdquery1 -> fdqInsertCertificat ou fdqGeneric si le SQL change tout le temps
    combobox2 -> cbxSpecialite
    combobox1 -> cbxNiveau

    Attention le fdtable3 qui vient-il faire la ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fdqInsertCertificat.SQL.Text := 'INSERT INTO into certificat_scl ( id_spec,id_niv) SELECT id_spec, id_niv FROM specialite, niveau WHERE (specialite.spec = :pSpecialite and niveau.niv=:pNiveau )' ;
    fdqInsertCertificat.ParamByName('pSpecialite').AsString := cbxSpecialite.Text;
    fdqInsertCertificat.ParamByName('pNiveau').AsString := cbxNiveau.Text;
    fdqInsertCertificat.ExecSQL;
    Je n'ai pas fait de MySQL depuis longtemps mais tente ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fdqInsertCertificat.SQL.Text := 'INSERT INTO into certificat_scl ( id_spec,id_niv) VALUES ( SELECT id_spec FROM specialite WHERE specialite.spec = :pSpecialite,  SELECT id_niv FROM niveau WHERE niveau.niv=:pNiveau )' ;
    fdqInsertCertificat.ParamByName('pSpecialite').AsString := cbxSpecialite.Text;
    fdqInsertCertificat.ParamByName('pNiveau').AsString := cbxNiveau.Text;
    fdqInsertCertificat.ExecSQL;
    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

Discussions similaires

  1. svp aidez moi :FreeImagePlus
    Par dev0077 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 20/09/2007, 03h21
  2. SVP aidez moi à résoudre ce prob de Filtrage
    Par kiops dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/05/2007, 00h58
  3. SDL : SVP aidez moi !!!
    Par adidmamah dans le forum OpenGL
    Réponses: 5
    Dernier message: 11/06/2004, 08h49

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