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] Ajout enregistrement avec composant Interbase


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut [D7] Ajout enregistrement avec composant Interbase
    Bonjour,

    J'utilise une base de donnée firebird 1.5 et je cherche sous delphi 7 avec un tibquery d'ajouter un enregistrement dans ma table sachant que mes enregistrements s'affichent dans des dbedit.

    Merci d'avance.

    Jer

    [Titre corrigé par Pedro. Merci de ne pas l'écrire en majuscules à l'avenir]

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Jer,

    Moi je mettrais simplement un composant TDBNavigator en bas de ma fiche.
    Il possède toutes les fonctionnalités de déplacement, d'insertion, de modification, de suppression et de rafraîchissement des enregistrements.

    C'est certainement la méthode la plus simple et la plus rapide.

    @+ Claudius.

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re-salut Jer,

    Oups ! J'ai lu ta question trop vite.
    Le composant TIBQuery ne permet pas de modifier directement le contenu de ta requête (et donc celui de la table sous-jacente).

    Pour cela il faut que tu utilises le composant TIBDataSet, en lui précisant les chaînes SQL pour les instructions SELECT, UPDATE, INSERT, DELETE et REFRESH.

    @+ Claudius.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Je te remercie pour ton indication, mais je sais pas me servir du composant pour ajouter un enregistrement.

    Je ne trouve pas de tutoriel ou de source delphi qui pourraient m'aider à comprendre.

    Merci d'avance pour un petit exemple de code.

    Jer

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Jer,

    Voici un exemple illustrant la façon de définir un composant TIBDataSet.
    Supposons une table PAYS, contenant 3 champs: CODE_PAYS, LIB_PAYS et CODE_DEVISE.

    Tu dois définir pour le composant TIBDataSet 5 instructions SQL, qui sont les propriétés:
    SelectSQL, DeleteSQL, InsertSQL, ModifySQL et RefreshSQL.

    Ton problème d'insertion d'enregistrement sera résolu par l'instruction InsertSQL.

    L'instruction SelectSQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select CODE_PAYS, LIB_PAYS, CODE_DEVISE
    from PAYS;
    L'instruction DeleteSQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete from PAYS
    where CODE_PAYS = :OLD_CODE_PAYS;
    L'instruction InsertSQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into PAYS (CODE_PAYS, LIB_PAYS, CODE_DEVISE)
    values (:CODE_PAYS, :LIB_PAYS, :CODE_DEVISE);
    L'instruction ModifySQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    update PAYS
    set
      CODE_PAYS = :CODE_PAYS,
      LIB_PAYS = :LIB_PAYS,
      CODE_DEVISE = :CODE_DEVISE
    where CODE_PAYS = :OLD_CODE_PAYS;
    et enfin, l'instruction RefreshSQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select CODE_PAYS, LIB_PAYS, CODE_DEVISE
    from PAYS 
    where  CODE_PAYS = :CODE_PAYS;
    Ensuite Delphi transmettra automatiquement à la requête correspondant à ton type d'action (Insert, Delete, ...), les valeurs de tes contrôles orientés données, dans ton cas les valeurs des TDBEdit.

    Bien sûr si tu as des traitements particuliers à effectuer, tu peux utiliser tous les évènements habituelles: AfterInsert, AfterScroll, BeforeInsert, .....

    Voilà. J'espère avoir été assez précis.
    @+ Claudius.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Merci beaucoup, grace à ton code j'ai réussi à mettre en oeuvre une partie de ce que je veux faire, mais je n'arrive pas à enregistrer, une fois mes dbedit remplis, mon enregistrement dans la base.

    J'ai une erreur sur le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    datamodule1.IBDataSet1.Close;
     
    datamodule1.IBDataSet1.InsertSQL;
     
    datamodule1.IBDataSet1.post;
     
    datamodule1.IBDataSet1.Open;
    Vraiment j'ai du mal à comprendre comment cela marche.

    JER

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Citation Envoyé par jer64
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    datamodule1.IBDataSet1.Close;
     
    datamodule1.IBDataSet1.InsertSQL;
     
    datamodule1.IBDataSet1.post;
     
    datamodule1.IBDataSet1.Open;
    Ce code ne risque pas de fonctionner, puisque tu fermes l'IBDataSet juste avant d'effectuer ton Post.

    Je suppose que code est lié à un bouton. Si c'est le cas il te suffit juste dans l'évènement OnClick de ce bouton d'écrire:

    Et c'est tout !

    Une fois que tu as défini les différentes chaîne SQL du composant TIBDataSet (InsertSQL, DeleteSQL, ...), ensuite son utilisation est parfaitement 'transparente', et tu peux l'utiliser comme un TQuery classique.

    Voilà !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Après quelques déboires avec ma connexion internet, me revoilà avec mon problème.

    J'ai bien un bouton sur lequels je valide mon ajout d'enregistrement, et un autre qui vide mes dbedit au préalable:

    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
     
     
    procedure TForm1.Nouveau1Click(Sender: TObject);
    begin
     
     
    datamodule1.ibdataset1.Append;
     
     
     
    end;
     
     
    procedure TForm1.Valider1Click(Sender: TObject);
     
    begin
     
     
    datamodule1.IBDataSet1.post;
     
    end;
    Mais avec ce code j'ai un message d'erreur 'Instruction SQL vide'.

    Il doit manquer quelque chose.

    ?????

    Jer.

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Jer,

    Tu dois avoir une erreur d'exec lorsque tu appuies sur le bouton 'Valider'.

    Le message 'Instruction SQL vide' veut dire simplement que l'action que tu entreprend sur l'IBDataSet ne comporte pas d'instruction équivalente.

    Pour un post, deux cas de figure:
    1/ Si c'est un nouvel enregistrement, alors c'est l'instruction InsertSQL qui sera exécutée.

    2/ Si c'est un enregistrement existant que tu modifies, alors c'est l'instruction ModifySQL qui sera exécutée.

    Vérifie que tu as bien renseigné chacune des tes chaînes SQL.

    Autre exemple: si tu ne renseignes pas la chaîne DeleteSQL, tu seras alors dans l'incapacité de supprimer un enregistrement de ta table. En admettant que tu as également un bouton 'Supprimer' sur ta forme.

    @+ Claudius

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Je te remercie Claudius pour ton aide précieuse.

    Ce n'est pas mes instructions qui posaient problèmes mais un composant interbase qui devait bloquer mon tibdataset.

    Merci encore.

    A+

    JER

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

Discussions similaires

  1. [AC-2007] Ajouter enregistrements avec cases à cocher
    Par macgyver44 dans le forum VBA Access
    Réponses: 4
    Dernier message: 13/04/2013, 22h37
  2. TCheckBox avec les composants Interbase
    Par helmis dans le forum Composants VCL
    Réponses: 12
    Dernier message: 22/05/2008, 19h50
  3. Problème d'enregistrement avec le composant Virtual Treeview
    Par Faith's Fall dans le forum C++Builder
    Réponses: 8
    Dernier message: 19/05/2008, 13h52
  4. Composant Interbase avec firebird 2.0
    Par BXDSPORT dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/01/2007, 11h45
  5. Réponses: 3
    Dernier message: 07/02/2006, 14h25

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