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 :

[BS2006] DBGrid et mise à jour de données


Sujet :

Bases de données Delphi

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [BS2006] DBGrid et mise à jour de données
    Je fais appel à votre savoir car je n'y arrive pas

    J'ai un DBGrid dans un form qui est relié à une base access.
    je charge mon application pas de probléme les données de la base sont présentes.
    J'ai fais une liaison DBGrid - Datasource - Dataset - Connection
    avec les composants TDBGrid, TDatasource, TADOTable, TADOConnection.

    Que tu bonheur jusque là.

    J'ajoute (ou supprime) une enregistrement.
    Un coup sur x (x variable de 1 à 5) l'enregistrement ne s'affiche pas dans le DBGrid mais est systématiquement dans la base.
    Pourquoi , je le sais? J'ouvre la base et je regarde et/ou j'ai créé en parraléle un TSringGrid qui me charge les données (mais c'est pas optimisé).

    J'ai parcouru le net, le forum mais tout ce que j'ai vu (refresh, close open marche pas).
    J'ai essayé.
    Refresh en DBGRID, DATASOURCE,DATASET
    OPEN CLOSE tout ce qui est possible
    Repaint le dbgrid

    Pour être précis : Je modifie ma base en me servant d'un ADOQuery
    La table est initialisée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      with ADOTableCommandes do
      begin
        ConnectionString:= ADOConnection1.ConnectionString;
        TableName:='LesCommandes';
        IndexFieldNames :='Num';
        Close;
        Open;
        Active:=True;
      end;
    la connexion comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      ADOConnection1.ConnectionString:=
        'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + string(buffer)+
          '\DataBase\Data.mdb;Persist Security Info=False';
     
      ADOConnection1.Connected :=True;
    Un petit aperçu de mets test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      // ObjectIHM.DBGridCommandes.DataSource.DataSet.RecordCount;
      // ObjectIHM.DBGridCommandes.Refresh;
      // ObjectIHM.DBGridCommandes.Repaint;
    ou ailleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      with ObjectIHM.DBGridCommandes do
      begin
        FormulaireSaisieInfoCommande.openForm(ObjectIHM,ObjectDatabase);
     
    //    DataSource.DataSet.Refresh;
    //    DataSource.DataSet.Open;
        // refresh;
      end; // with
      ObjectIHM.DBGridCommandes.DataSource.DataSet.RecordCount;
      //ObjectIHM.DBGridCommandes.Refresh;
      ObjectIHM.DBGridCommandes.Repaint;
    je sature.
    help

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    vu que tu utilises ADO, as tu pensé à utiliser la méthode Requery de ton Dataset ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,
    Non je ne l'ai pas utilisé mais je viens d'essayer et je n'ai pas la méthode Requery dans le dataset.
    J'utilise TDatasource et TAdoTable.
    Par contre j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      DBGridCommandes.DataSource.DataSet.Filtered:=False;
      DBGridCommandes.DataSource.DataSet.Filtered:=True;
    Mais quetion : J'utilise TADOTable ainsi qye TADOConnection avec TDataSource.
    ne serais-ce pas compatible.
    Mais je me demande si j'ai pas vu ça quelque spart car je ne m'ai pas inventé (peut être mal compris)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    J'ai peut être trouvé quelque chose dans les différents téléchargements que j'ai fait mais ce n'est pas des plus super mais ça marche.
    J'utilise une unité ADOSqlExecute.pas mais je ne connais plus l'auteur.

    Je fournis l'unité en piéce jointe.

    Mais si quelqu'un à mieux, JE PRENDS .
    Car j'ai dû ajouter une query non prévu mais bon ça marche
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par aghtor Voir le message
    Bonsoir,
    Non je ne l'ai pas utilisé mais je viens d'essayer et je n'ai pas la méthode Requery dans le dataset.
    J'utilise TDatasource et TAdoTable.
    essaye la méthode Requery comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TADOTable(ObjectIHM.DBGridCommandes.DataSource.DataSet).Requery();

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci evarisnea,
    cette derniére solution marche trés bien et est plus approprié à mon besoin.


    Serait-il possible de mettre ce genre d'astuce dans le FAQ DBGrid car j'ai l'impression que c'est pas trivial?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Juste petite correction mais je maintien résolu.
    En faite on doit maintenir l'initialisation de la base avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      DataSourceCommandes.DataSet := getQueryResult(ADOConnection1,'SELECT * FROM BaseCommandes order by Num');
    et remplacer cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      // Récupérer l'ensemble de données sous jascent à la DBGrid sous forme d'un T
      // Query
      with getQueryDef(ObjectIHM.DBGridCommandes)
        do try
             // Rendre inactif l'ensemble de données.
             Active := false;
             // Construire la requête SQL.
             sql.Text := 'SELECT * FROM BaseCommandes order by Num';
             // Rendre actif l'ensemble de données.
             Active := true;
           except
           end;
    par
    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TADOTable(ObjectIHM.DBGridCommandes.DataSource.DataSet).Requery();
    Mais la bibliothéque ADOSqlExecute est nécessaire.
    Pas grave, je prends, ça marche c'est l'essentiel.

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

Discussions similaires

  1. [JTable] mise à jour des données
    Par tripop dans le forum Composants
    Réponses: 3
    Dernier message: 04/02/2009, 18h52
  2. MySqlDAC et mise à jour des données
    Par charliejo dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/01/2006, 09h25
  3. mise à jour des données toutes les semaines...
    Par Toff !!!!! dans le forum Access
    Réponses: 20
    Dernier message: 22/12/2005, 11h38
  4. Réponses: 2
    Dernier message: 21/10/2005, 17h02
  5. Problème de mise à jour de données avec IBClientDataset
    Par Papino dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/09/2005, 14h04

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