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 :

transfert DataSource vers Base de Données


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut transfert DataSource vers Base de Données
    Bonjour à tous,

    Voilà j'utilise une base SQL, avec ADoQuerys, et DataSources et un tas de DBEdits reliés à une base par fiche.
    J'ai également un DBGrid affichant la clé primaire de ma table, et mon problème consiste à rafraîchir ma table lorsque un edit a changé. Je sais par exemple que cela est fait automatiquement lorsque je change la valeur de ma clé primaire ou lorsque l'on utilise un DBNavigator.

    Je sais également que les valeurs inscrites dans les DBédits sont sauvegardées dans le DataSource, puisqu'elles apparaissent tant que je navigue dans ma fiche et que j'ai pas rafraîchi ma Query.

    En gros, j'aimerais donc savoir si il est possible de transférer d'un coup et facilement toutes les données contenues dans le DataSource vers ma base au moment ou je ferm ma fenêtre.

    Merci d'avance.
    For crying out loud !

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Peux tu indiquer la requete de ton AdoQuery ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Merci pour ton aide Malatar,

    En fait j'ai juste un DataModule avec des ADOQuery qui font des requêtes pour récupérer les données de mes tables, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table_Arret
    Ensuite dans mon programme j'ai un bouton créer qui ne rentre que la clé primaire (nom):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query.SQL.Clear;
      Query.SQL.Add('INSERT INTO Table_Arret (nom) VALUES('Nouveau');
      Query.ExecSQL;
    Puis j'ai une fiche avec un DBGrid contenant la liste des noms, et plusieurs DBEdits pour remplir les autres champs de ma table. Et je voudrais rentrer dans ma base les valeurs modifiées par l'utilisateur dans les DBEdits (en évitant, si possible une longue requête UPDATE à chaque changement d'une valeur...)

    Merci, @+.
    For crying out loud !

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Si tu modifies un DbEdit (qui est relié à un datasource qui lui meme est relié à ton Adoquery) ca met ton Adoquery en mode édition.
    Pour que les modifications soient prises en compte il faut que soit :
    - Tu sauvegardes ses données avec la commande AdoQuery.Post.
    - Tu changes d'enregistrement (en général les sgbd font ca par defaut).

    ATTENTION !!! :

    Les modifications ne peuvent se faire que si la base de données est monotable.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    OK,

    Donc si je fais un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADO.Close;
      ADO.Open;
    Data.DataSet.Edit;
    Data.DataSet.Post;
    Au moment de fermer ma fenêtre, j'aurais une mise à jour de ma table donc?

    Les modifications ne peuvent se faire que si la base de données est monotable.
    Cela veut-il dire qe si j'ai une requête du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Table1, Table2
    WHERE Table1.Simu_id=Table2.Simu_id
    AND Table2=1
    Alors le méthode Post ne fonctionnera pas??? Même si je n'utilise que les champs d'une table pour ma fiche??

    Merci.
    For crying out loud !

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    OK,

    Donc si je fais un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADO.Close;
      ADO.Open;
    Data.DataSet.Edit;
    Data.DataSet.Post;
    Au moment de fermer ma fenêtre, j'aurais une mise à jour de ma table donc?
    Non, avec le code que tu me montre ca ne fonctionnera pas, car tu fermes ta table/requete avant la validation des données. En plus tu mets en mode édition mais ca ne sert à rien comme tu le fais.
    Quand tu modifies les données d'un composant TDbEdit automatiquement le composant se met en mode édition, tu n'as pas à le faire.

    Exemple de code de validation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      // on vérifie que le dataset est bien en mode insertion ou edition
      if data.dataSet.State in [dsInsert,dsEdit] then
      // on sauvegarde les modifications
        data.Dataset.post;
      // On fermer le Query
      Ado.Close;
      // On ferme la fenêtre
      Close;

    Citation Envoyé par PadawanDuDelphi
    Cela veut-il dire qe si j'ai une requête du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Table1, Table2
    WHERE Table1.Simu_id=Table2.Simu_id
    AND Table2=1
    Alors le méthode Post ne fonctionnera pas??? Même si je n'utilise que les champs d'une table pour ma fiche??
    Merci.
    Selon les composants, tu ne pourras même pas modifier leur contenu et faire un Post génèrera une erreur du SQL.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Ok,

    Merci bocoup Malatar, à priori ça fonctionne maintenant...
    Mais avec tous les problèmes qu'à engendrer post, je crois que je vais continuer à utiliser la bonne vieille méthode "insert-update-delete" pour communiquer avec ma base. .

    @+.
    For crying out loud !

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

Discussions similaires

  1. Transfert d'une base de données vers plusieurs bases
    Par Focheur dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/07/2008, 23h11
  2. [SSIS][2k5] Import depuis XML vers Base de donnée
    Par Sinclair dans le forum SSIS
    Réponses: 4
    Dernier message: 24/01/2008, 11h25
  3. Données Excel vers Base de données
    Par godmich dans le forum Windows Forms
    Réponses: 5
    Dernier message: 26/11/2007, 18h23
  4. DataSource : plusieurs bases de données
    Par mickael.guilbert dans le forum JDBC
    Réponses: 2
    Dernier message: 20/07/2007, 12h26
  5. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42

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