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 :

comment ajouter des données dans deux tableaux?


Sujet :

Bases de données Delphi

  1. #1
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut comment ajouter des données dans deux tableaux?
    Bonjour

    J'ai deux tableaux, le premier pour étudiants (nom, prenom, DatNaiss)et l'autre pour cours(Math,informatique ,Algorithme... ) et la relation entre les deux est N,N . troisieme tableau Cours(etudiantID,CoursId)
    Pour ajouter un nouvel étudiant, je vérifie s'il existe déjà ou non avec un procedure Ici
    et vérifie est ce que La leçon appartient-elle à cet élève ou non.

    le code ne marche pas :oops:
    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
    20
     
              if (Dmdata.qryAjou.SQL.Text:='SELECT IIF(p.RESULT,'TRUE','FALSE') FROM aa(EdtNom.text,Edtprenom.text,EdtDatNaiss.text) p' ) = 'false' then
                Begin
                 Dmdata.qryAjou.SQL.Text:='INSERT INTO Etudiants (Nom,prenom,datnaiss)'+
                 'VALUES (:Nom,:prenom,:datnaiss)' ;
                 Dmdata.qryAjou.Params.ParamByName('nom').AsString:= edtNom.Text;
                 Dmdata.qryAjou.Params.ParamByName('prenom').AsString:= edtLprenom.Text;
                 Dmdata.qryAjou.params.ParamByName('datnaiss').AsDate:= StrToDate(edtdatnaiss.Text);
                 etudiantID :=  (SELECT GEN_ID( GEN_etudiantID, 0 ) FROM RDB$DATABASE);
                End  ;
     
            NomCour := ('Select NomCour  from Cours where NomCour = :combox.text');
              if ((NomCour =null )then
                Begin
                 Dmdata.qryAjou.SQL.Text:='Insert into Cours (NomCour) values (:NomCour)';
                 Dmdata.qryAjou.Params.ParamByName('NomCour').AsString:= ComboBox1.Text;
                 CoursId :=  (SELECT GEN_ID( GEN_CoursId, 0 ) FROM RDB$DATABASE);
                end;
     
            Dmdata.qryAjou.SQL.Text:='Insert into EtudCours (etudiantID,CoursId) values (:etudiantID,:CoursId)';
    merci

  2. #2
    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 844
    Points
    24 844
    Par défaut
    C'est quoi ce code ?
    Affectation et Comparaison dans le If
    Aucun Open ni ExecuteSQL

    Si c'est censé être du Delphi, il manque BEAUCOUP de code, faudrait revoir les bases.
    Ce code ce n'est pas qu'il ne fonctionne pas, c'est qu'en Delphi, il ne compile pas

    Pourquoi ne pas tout écrire en SQL, une procédure qui fait le boulot d'ajouter d'un Cours pour un Etudiant, au besoin si l'étudiant n'existe pas cela appelle la fonction d'ajout d'un Etudiant
    En Delphi, il n'y aura que l'appel à la procédure AjoutEtudiantDansCours
    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
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 852
    Points : 11 285
    Points
    11 285
    Billets dans le blog
    6
    Par défaut
    Quant à comparer 'false' à ' FALSE' et 'TRUE', le résultat est connu à l'avance !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Rédacteur/Modérateur

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

    C'est du grand n'importe quoi du Delphi mâtiné de Firebird avec utilisation d'une procédure (aa) Firebird (demandée ici) qui AMHA ne sert à rien avec peut être un soupçon d'ADOQuery si j'en juge les Dmdata.qryAjou.Params.ParamByName utilisés.


    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
    20
    21
    22
     
    Dmdata.qryAjou.SQL.Text:='SELECT COALESCE(ID,-1) FROM Etudiants from ETUDIANT  where nom=:nom and prenom=:prenom and dnaiss=:dnaiss';
    Dmdata.qryAjou.Params.ParamByName('nom').AsString:= edtNom.Text;
    Dmdata.qryAjou.Params.ParamByName('prenom').AsString:= edtLprenom.Text;
    Dmdata.qryAjou.params.ParamByName('datnaiss').AsDate:= StrToDate(edtdatnaiss.Text);
    Dmdata.qryAjou.Open;
    etudiantID :=DmData.qryAjou.FieldByname('ID').AsInteger;
    Dmdata.qryAjou.Close;
    if etudiantID=-1  then
      begin
         // Ajout 
         Dmdata.qryAjou.SQL.Text:='INSERT INTO Etudiants (Nom,prenom,datnaiss) VALUES (:Nom,:prenom,:datnaiss)' ;
         Dmdata.qryAjou.Params.ParamByName('nom').AsString:= edtNom.Text;
         Dmdata.qryAjou.Params.ParamByName('prenom').AsString:= edtLprenom.Text;
         Dmdata.qryAjou.params.ParamByName('datnaiss').AsDate:= StrToDate(edtdatnaiss.Text);
         Dmdata.qryAjou.ExecSQL;
     
         Dmdata.qryAjou.SQL.Text:='SELECT GEN_ID( GEN_etudiantID, 0) ID FROM RDB$DATABASE';
         Dmdata.qryAjou.Open;
         etudiantID :=DmData.qryAjou.FieldByname('ID').AsInteger;
         Dmdata.qryAjou.Close;
      end;
    Cela écrit, ce n'est pas terrible mais je ne suis pas sûr que la syntaxe INSERT INTO Etudiants (Nom,prenom,datnaiss) VALUES (:Nom,:prenom,:datnaiss) RETURNING IDsoit acceptée par ADO
    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
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est quoi ce code ?

    Pourquoi ne pas tout écrire en SQL, une procédure qui fait le boulot d'ajouter d'un Cours pour un Etudiant, au besoin si l'étudiant n'existe pas cela appelle la fonction d'ajout d'un Etudiant
    En Delphi, il n'y aura que l'appel à la procédure AjoutEtudiantDansCours
    Parce que je ne veux pas ajouter une procedure à la base de données
    Je veux ajouter le code dans Delphi.
    N'est-il pas approprié d'ajouter la procédure lors de l'exécution du programme sur le réseau? Mais mon programme sur un Pc

    c'est mieux car si j'ajoute une procédure, nous aurons de nombreux paramètres dans la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create procedure aa(nom varchar(20),prenom varchar(20),dnaiss date),Tel,Adresse,Email,note,............
    Citation Envoyé par tourlourou Voir le message
    Quant à comparer 'false' à ' FALSE' et 'TRUE', le résultat est connu à l'avance !
    Non si l'enregistrement existe, elle retourne 'TRUE' sinon elle retourne 'False'

    Citation Envoyé par SergioMaster Voir le message
    Bonjour,
    Il y a deux tables, la table des étudiants et la table des leçons, et vous avez été dans les deux tables avec la base de données où plus d'une leçon l'a étudiée, et la leçon est enseignée par plus d'un étudiant, où la relation était de type n, n, donc une troisième table a été ajoutée pour faire la relation 1, n
    Non il y a trois tables parce aue la relation entre les deux tables est N,N(Chaque étudiant a une ou plusieurs leçons, et chaque étudiant a un ou plusieurs étudiants)
    À cela, nous avons ajouté le troisième tableau(EtudLecon)
    Regardez cette vidéo


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dmdata.qryAjou.SQL.Text:='SELECT COALESCE(ID,-1) FROM  ETUDIANT  where nom=:nom and prenom=:prenom and dnaiss=:dnaiss' Dmdata.qryAjou.Params.ParamByName('nom').AsString:= edtNom.Text;
    Dmdata.qryAjou.Params.ParamByName('prenom').AsString:= edtLprenom.Text;
    Dmdata.qryAjou.params.ParamByName('datnaiss').AsDate:= StrToDate(edtdatnaiss.Text);
    Dmdata.qryAjou.Open;
    etudiantID :=DmData.qryAjou.FieldByname('ID').AsInteger;
    Dmdata.qryAjou.Close;
    if etudiantID=-1  then
    SELECT COALESCE(ID,-1) Toujours afficher une erreur
    Je l'ai changé en SELECT COALESCE(ID,-1) as Id
    Mais etudiantID renvoie toujours la valeur 0 pas -1 ce qui signifie que la condition ne sera pas remplie

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par S.H Voir le message
    Parce que je ne veux pas ajouter une procedure à la base de données
    Je veux ajouter le code dans Delphi.
    C'est bien ce que je proposai.

    c'est mieux car si j'ajoute une procédure, nous aurons de nombreux paramètres dans la procédure
    Ne pas mélanger procédure Delphi et procedure Firebird pour commencer.


    Citation Envoyé par SergioMaster
    Bonjour,
    Il y a deux tables, la table des étudiants et la table des leçons, et vous avez été dans les deux tables avec la base de données où plus d'une leçon l'a étudiée, et la leçon est enseignée par plus d'un étudiant, où la relation était de type n, n, donc une troisième table a été ajoutée pour faire la relation 1, n
    Je ne crois pas que cela soit de moi, j'utilise hyper rarement ce genre de description des relations


    Je l'ai changé en SELECT COALESCE(ID,-1) as Id
    mea culpa j'avais oublié de mettre l'alias de champ (au fait on peut se passer du as)


    Mais etudiantID renvoie toujours la valeur 0 pas -1 ce qui signifie que la condition ne sera pas remplie
    Non, c'est -1 qui signifie que ce n'est pas rempli, je suis parti du fait qu'ID était une colonne auto-incrémentée (pour Firebird ceci est une SEQUENCE ou GENERATOR)
    Avec Firebird cela abouti à deux déclarations possibles et en général l'utilisation d'un trigger de ce type

    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
    SET TERM ^ ;
    ALTER TRIGGER ETUDIANT_BI ACTIVE
    BEFORE INSERT POSITION 0
    AS
    DECLARE VARIABLE tmp BIGINT;
    BEGIN
      IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GEN_BANQUES_ID, 1);
      ELSE
      BEGIN
        tmp = GEN_ID(GEN_etudiantID, 0);
        if (tmp < new.ID) then
          tmp = GEN_ID(GEN_etudiantID, new.ID-tmp);
      END
    END^
    SET TERM ; ^
    Firebird 3 offre la possibilité d'une colonne GENERATED BY DEFAULT AS IDENTITY (voir release note) mais du coup la valeur ne peut jamais être null et je ne suis pas sûr que l'on puisse obtenir la valeur du générateur.

    Bien sûr il est possible de faire sans trigger mais pour cela il faut modifier la requête INSERT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dmdata.qryAjou.SQL.Text:='INSERT INTO Etudiants (ID,Nom,prenom,datnaiss) VALUES (GEN_ID(GEN_etudiantID,1),:Nom,:prenom,:datnaiss)' ;
    Toutefois le trigger est recommandé, et avec FB3 c'est même plutôt le type IDENTITY qui l'est.
    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

  7. #7
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    toujour etudiantID et LeconId renvoie la valeur 0 pas -1 !!

    Voir l'exemple

    BaseDonee.rar

  8. #8
    Rédacteur/Modérateur

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

    Il y a beaucoup à dire, hélas une fausse manipulation de ma part toutes les remarques que j'avais précédemment écrites ont été perdues et je n'ai pas envie de recommencer !

    J'y parlais de la BDD encodage NONE à éviter, utilisation de Datases.conf pour mettre un alias de base de données pour éviter de coder en dur le chemin de la BDD, ajout de contraintes d'unicité etc...
    Je décriais aussi votre interface : à quoi servent les grilles ?, le combobox qui ne sera pas mis à jour à moins que ce soit par le bouton [parametres] je n'ai pas voulu chercher, l'horeur pour la saisie de date, le problème des TEdit ....

    Mais surtout j'aurais aimé savoir avant toute choses la version de Delphi (Sidney) et les composants de connexion à la BDD utilisés (Firedac etg non ADO comme me laissaient supposer les Params.ParamByName)

    Donc en résumé pour la question voici trois manières de coder
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    procedure TForm4.Button1Click(Sender: TObject);
    var
      etudiantID: integer;
      LeconID: integer;
    begin
      // première manière
      Dmdata.qryAjou.SQL.Text :=
        'SELECT id FROM ETUDIANT  where nom=:nom and prenom=:prenom and naissance=:naissance';
      Dmdata.qryAjou.ParamByName('nom').AsString := EdtNom.Text;
      Dmdata.qryAjou.ParamByName('prenom').AsString := EdtPrenom.Text;
      Dmdata.qryAjou.ParamByName('naissance').AsDate :=
        StrToDate(EdtNaissance.Text);
      Dmdata.qryAjou.Open;
      if Dmdata.qryAjou.FieldByname('ID').IsNull
        then etudiantID := -1
        else etudiantID := Dmdata.qryAjou.FieldByname('ID').AsInteger;
      Dmdata.qryAjou.Close;
     
      if etudiantID = -1 then
      begin
        Dmdata.qryAjou.SQL.Text :=
          'INSERT INTO ETUDIANT (Nom,prenom,naissance) VALUES (:Nom,:prenom,:naissance)';
        Dmdata.qryAjou.ParamByName('nom').AsString := EdtNom.Text;
        Dmdata.qryAjou.ParamByName('prenom').AsString := EdtPrenom.Text;
        {TODO -oOwner -cGeneral : Changer edtNaissance en TDatePicker ou TDateTimePicker}
        Dmdata.qryAjou.ParamByName('naissance').AsDate :=
          StrToDate(EdtNaissance.Text);
        Dmdata.qryAjou.ExecSQL;
     
        Dmdata.qryAjou.SQL.Text :=
          'SELECT GEN_ID( GEN_ETUDIANT_ID, 0) ID FROM RDB$DATABASE';
        Dmdata.qryAjou.Open;
        etudiantID := Dmdata.qryAjou.FieldByname('ID').AsInteger;
        Dmdata.qryAjou.Close;
      end;
     
     
      // Deuxième manière
      Dmdata.qryAjou.SQL.Text :=
        'SELECT  LECONID FROM LECON  where NomLecon=:NomLecon';
      Dmdata.qryAjou.ParamByName('nomLecon').AsString := CmbLecon.Text;
      Dmdata.qryAjou.Open;
      LeconID := Dmdata.qryAjou.FieldByname('LECONID').AsInteger;  // si null alors 0
      Dmdata.qryAjou.Close;
     
     
      if (LeconID = 0) then   // Autre maniére de faire
      begin
        Dmdata.qryAjou.SQL.Text :=
          'INSERT INTO Lecon (NomLecon) VALUES (:NomLecon) RETURNING LECONID';
        Dmdata.qryAjou.ParamByName('nomLecon').AsString := CmbLecon.Text;
        Dmdata.qryAjou.Open;
        Leconid:= Dmdata.qryAjou.Fields[0].AsInteger;
        Dmdata.qryAjou.Close;
      end;
      Dmdata.qryAjou.SQL.Text :=
        'INSERT INTO EtudLecon (ID,LeconId) VALUES (:EtudiantID,:LeconId)';
      Dmdata.qryAjou.ParamByName('EtudiantID').asInteger:=EtudiantID;
      Dmdata.qryAjou.ParamByName('LeconID').asInteger:=LeconID;
      try
       Dmdata.qryAjou.ExecSQL;
      except
         // gestion erreur ? "Déjà inscrit au cours"
      end;
    end;
    1° manière sur la base de départ
    2° manière, puisque Firedac et Firebird utilisation de RETURNING
    3° manière, gestion exception
    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

  9. #9
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Merci Beaucoup SergioMaster
    J'ai appris à gérer une relation N à N sous Delphi grace a vous . C'est l'une des deux méthodes
    La seconde méthode préférée lorsque le programme s'exécute sur un réseau est donc on écrire une procédure dans la base de données, contrairement à la première qui est préférée pour écrire en Delphi, comme notre exemple.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par S.H Voir le message
    La seconde méthode préférée lorsque le programme s'exécute sur un réseau est donc on écrire une procédure dans la base de données, contrairement à la première qui est préférée pour écrire en Delphi, comme notre exemple.
    Je ne suis pas d'accord le fait d'utiliser un trigger pour l'implementation de l'ID, d'un SQL type INSERT sera plutôt fiable (en faisant attention au type de Commit de la connexion, type par défaut qui a changé avec la version 10.4) dans un environnement multi utilisateurs
    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

  11. #11
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    merci de vos conseils

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Dmdata.qryAjou.SQL.Text :=
        'INSERT INTO EtudLecon (ID,LeconId) VALUES (:EtudiantID,:LeconId)';
      Dmdata.qryAjou.ParamByName('EtudiantID').asInteger:=EtudiantID;
      Dmdata.qryAjou.ParamByName('LeconID').asInteger:=LeconID;
      try
       Dmdata.qryAjou.ExecSQL;
      except
         ShowMessage('Déjà inscrit au cours');//Après l'erreur, ce message apparaît
      end;
    Je n'ai pas pu passer le message d'erreur.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 11/02/2015, 08h29
  2. Réponses: 7
    Dernier message: 21/06/2011, 11h18
  3. comment ajouter des données dans la base
    Par ghost10 dans le forum Linq
    Réponses: 12
    Dernier message: 25/05/2010, 23h08

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