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 :

ApplyUpdates en mode insert ?


Sujet :

Bases de données Delphi

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut ApplyUpdates en mode insert ?
    Salut tout le monde ,

    une petite question qui, je pense ,devrait etre assez facile pour vous.

    J'ai une appli connecté avec mes base de données, j'arrive a naviguer dans les résultats de la requete.

    J'ai mis des Tdbedits pour pouvoir modifier les champs.

    Et un bouton qui fait un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SimpleDataSet1.ApplyUpdates(-1);
    Jusque la pas de probleme, quand je clique sur mon bouton , cela met bien a jour ma base de données (ça fait un update).

    Le truc que je voudais faire maintenant , c'est que quand je clique sur mon bouton, au lieu que cela face un update je voudrais que cela face un insert.

    Est ce quelqu'un a une idée sur la méthode a employé ?

  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

    Que ce soit une édition ou une insertion, tu auras toujours besoin de ton bouton pour appliquer tes mises à jour.

    Ajoute un bouton nommé 'Insertion', pour lequel tu implémentes ce simple code sur l'event OnClick:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SimpleDataSet1.Insert;  // ou Append
    Il ne reste qu'a renseigner tes DBEdits.


    @+ Claudius

  3. #3
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Ok je vois l'idée ...

    Je supose qu'aprés la fonction insert, les champs Dbedit deviennent vident, et qu'il faut tout re-remplir ?

  4. #4
    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
    C'est ca. C'est le principe.

    [edit]
    Tu peux préremplir tes champs avec des valeurs par défaut. cf l'event AfterInsert ou OnNewRecord.
    [/edit]

    @+

  5. #5
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    ok ,

    Bon je sais je suis un peu casse-couilles,
    mais en fait, pour une histoire de simpliciter de l'utilisateur, je voudrais qu'il n'ait qu a modifier le champ qu'il désire ... et que cela fasse un insert.

  6. #6
    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,

    Attention si ton utilisateur modifie la valeur d'un DBEdit, ton DataSet va basculer en modification (State = dsEdit), tu vas donc modifier l'enregistrement courant.

    Si je comprends bien tu ne souhaites faire que des insertions ?

  7. #7
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Exactement, c'est un principe que j'ai établi dans notre système de Db, on a le droit qu'a des insertion, pour garder un historique.

    Il y a une méthode simple pour faire cela ?

  8. #8
    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
    Citation Envoyé par rvzip64 Voir le message
    Il y a une méthode simple pour faire cela ?
    Ben pas forcément.
    Quel est ton SGBD ?

  9. #9
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Mysql.

    Je vois pas le rapport .... vu que c est le composant qui génère la requete SQL.

  10. #10
    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
    Citation Envoyé par rvzip64 Voir le message
    Je vois pas le rapport ....
    Si parce que cet historique des modifications peut s'effectuer via un trigger.
    Mais ne connaissant pas MySQL je ne sais pas si c'est possible.

  11. #11
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    la version que j'utilise n'utilise pas les triggers.

  12. #12
    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
    Citation Envoyé par rvzip64 Voir le message
    la version que j'utilise n'utilise pas les triggers.
    C'est dommage ! Ca aurait été plus simple.

    La solution que j'entrevois serait d'ajouter à ta table l'état initial de l'enregistrement avant que tu ne postes sa modification.

    Cela peut-être géré dans le BeforePost.

    @+

  13. #13
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Oula c 'est du chinois tout ça.

    Tu aurais un exemple ?

  14. #14
    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

    Bon ce n'est évident cette histoire ! Car en fait tu souhaites transformer un Edit en Insert.

    Dès lors que l'on souhaite modifier le comportement naturel d'un composant, on a vite fait de se mélanger les crayons.

    D'où ma question: Est-ce qu'il ne serait pas plus simple de créer une table historique à côté de ta table ?

    @+ Claudius.

  15. #15
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    La base de données est deja en route, je ne peux pas faire de modification aussi importante

  16. #16
    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
    Bon j'ai pondu ça, mais attention c'est exotique !!

    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
     
    var
      FArray: array of Variant;
     
    procedure CopierEnreg(DataSet: TDataSet);
    var
      I: Integer;
    begin
      // Sauvegarder l'état actuel de l'enregistrement dans le tableau
      with DataSet do
        for I := 0 to Fields.Count - 1 do
          FArray[I] := Fields[I].Value;
    end;
     
    procedure HistoriserEnreg(DataSet: TDataSet);
    var
      I: Integer;
      DSNotifyEvent: TDataSetNotifyEvent;
    begin
      // Historiser l'état initial de l'enregistrement
      with DataSet do
      begin
        // Désactiver le AfterPost pour éviter les appels récursifs
        DSNotifyEvent := AfterPost;
        AfterPost := nil;
        // Créer enregistrement histo
        Append;
        for I := 0 to Fields.Count - 1 do
          Fields[I].Value := FArray[I];
        Post;
        // Réactiver AfterPost
        AfterPost := DSNotifyEvent;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      // Création du tableau
      SetLength(FArray, SimpleDataSet1.Fields.Count);
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      // Libération du tableau
      SetLength(FArray, 0);
    end;
     
    procedure TForm1.DataSource1StateChange(Sender: TObject);
    begin
      with TDataSource(Sender) do
        // Entrée en mode édition: Sauvegarder état initial
        if State = dsEdit then CopierEnreg(DataSet);
    end;
     
    procedure TForm1.SimpleDataSet1AfterPost(DataSet: TDataSet);
    begin
      // Historisation
      HistoriserEnreg(DataSet);
    end;
     
    end.
    Je n'ai pas testé n'ayant pas de base test sous la main
    Il y a sûrement mieux...

    @+ Claudius.

  17. #17
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Bon je vais regarder ton bout de code, je te remercie

  18. #18
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Points : 43
    Points
    43
    Par défaut
    Bonjour à tous

    Question :

    Si je modifie plusieurs Champs (DBEdit) est-ce qu'il faut une seule insertion, ou bien une pour chaque champ modifié ?

  19. #19
    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
    Citation Envoyé par gduo200 Voir le message
    Bonjour à tous

    Question :

    Si je modifie plusieurs Champs (DBEdit) est-ce qu'il faut une seule insertion, ou bien une pour chaque champ modifié ?
    Il faut toujours raisonné en terme d'enregistrement, que ce soit Ajout (Insertion), Modification ou suppression.

    Donc pour répondre à ta question: 1 seul Insert, saisi des valeurs de tes champs, puis Post.

    @+ Claudius

  20. #20
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Points : 43
    Points
    43
    Par défaut
    De Claudius
    Il faut toujours raisonné en terme d'enregistrement, que ce soit Ajout (Insertion), Modification ou suppression.

    Donc pour répondre à ta question: 1 seul Insert, saisi des valeurs de tes champs, puis Post.
    La question que je pose est :

    Est-ce que Rvzip64 souhaite un historique détailé par modification de chaque champ ou de chaque enregistrement ?

Discussions similaires

  1. Probleme de mode insertion / edition
    Par Chimere dans le forum Bases de données
    Réponses: 9
    Dernier message: 02/09/2006, 17h45
  2. JtextField en mode insert
    Par debutJava dans le forum Composants
    Réponses: 7
    Dernier message: 28/07/2006, 10h02
  3. Réponses: 4
    Dernier message: 13/06/2006, 13h45
  4. Mettre un DBGrid en mode insertion
    Par n1portki dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/10/2005, 02h07
  5. table en mode insertion et bouton enabled = true
    Par marie253 dans le forum Bases de données
    Réponses: 7
    Dernier message: 09/09/2004, 14h03

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