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 :

FIREDAC - EmptyDataSet;


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut FIREDAC - EmptyDataSet;
    Bonjour,
    sur un petit programme de test, j'essaye d'effacer tout les enregistrements d'une table avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FDTable1.EmptyDataSet;
    je n'obtient aucune reaction du programme, ni aucun message
    je ne comprend pas pourquoi !
    un peu d'aide serait la bienvenue

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 595
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Cela manque un peu d'informations. Cette table est une table d'une base de données (laquelle) ?
    Dans quel contexte (mémoire cache ou pas) ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Cela manque un peu d'informations. Cette table est une table d'une base de données (laquelle) ?
    Dans quel contexte (mémoire cache ou pas) ?
    Base de données sqlite.
    Cache table sur false.

  4. #4
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 539
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par voxben Voir le message
    Bonjour,
    sur un petit programme de test, j'essaye d'effacer tout les enregistrements d'une table avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FDTable1.EmptyDataSet;
    je n'obtient aucune reaction du programme, ni aucun message
    je ne comprend pas pourquoi !
    un peu d'aide serait la bienvenue
    Merci.
    Par requête SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FDTable1.ExecSQL('DELETE FROM matable');

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Par requête SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FDTable1.ExecSQL('DELETE FROM matable');
    Avec SQL sur un query ou directement sur la connexion ça marche tres bien.
    C l'usage du emptydataset que je ne comprends pas

  6. #6
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 539
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par voxben Voir le message
    Avec SQL sur un query ou directement sur la connexion ça marche tres bien.
    C l'usage du emptydataset que je ne comprends pas
    Le dataSet est alimenté par la requête. Donc c'est la source qu'il faut vider. Le "Empty" est plutôt destiné aux Tables Mémoires en vidant le contenu de la propriété 'Content'
    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
     
      object Table1: TFDMemTable
        Active = True
        FetchOptions.AssignedValues = [evMode]
        FetchOptions.Mode = fmAll
        ResourceOptions.AssignedValues = [rvPersistent, rvSilentMode]
        ResourceOptions.Persistent = True
        ResourceOptions.SilentMode = True
        UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates]
        UpdateOptions.CheckRequired = False
        UpdateOptions.AutoCommitUpdates = True
        Left = 48
        Top = 120
        Content = {
          414442530F00000081030000FF00010001FF02FF0304000C0000005400610062
          006C006500310005000C0000005400610062006C006500310006000000000007
          0000080032000000090000FF0AFF0B0400120000006E0075006D0063006C0069
          0065006E007...

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Le dataSet est alimenté par la requête. Donc c'est la source qu'il faut vider. Le "Empty" est plutôt destiné aux Tables Mémoires en vidant le contenu de la propriété 'Content'
    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
     
      object Table1: TFDMemTable
        Active = True
        FetchOptions.AssignedValues = [evMode]
        FetchOptions.Mode = fmAll
        ResourceOptions.AssignedValues = [rvPersistent, rvSilentMode]
        ResourceOptions.Persistent = True
        ResourceOptions.SilentMode = True
        UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates]
        UpdateOptions.CheckRequired = False
        UpdateOptions.AutoCommitUpdates = True
        Left = 48
        Top = 120
        Content = {
          414442530F00000081030000FF00010001FF02FF0304000C0000005400610062
          006C006500310005000C0000005400610062006C006500310006000000000007
          0000080032000000090000FF0AFF0B0400120000006E0075006D0063006C0069
          0065006E007...
    Dans ce cas, puisque emptydataset n'agit que sur TFDmemTable,
    Pourquoi est elle accessible par TFDTable ?

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Supprime tous les enregistrements du stockage de données interne de l'ensemble de données.

    Appelez EmptyDataSet pour vider l'ensemble de données en supprimant tous les enregistrements du stockage de données interne et du journal des modifications.
    Est-ce que le composant table est bien ouvert avant d'appeler cette fonction ??

  9. #9
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    J'ai testé emptydataset et je n'e comprends pas non plus. Tout ce que je sais c'est que je suis content d'être tombé sur ce sujet, ça va m'éviter bien des problèmes très prochainement.

  10. #10
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    EmptyDataSet() est pourtant parfaitement décrit dans la documentation

    Supprime tous les enregistrements du stockage de données interne de l'ensemble de données.
    Appelez EmptyDataSet pour vider l'ensemble de données en supprimant tous les enregistrements du stockage de données interne et du journal des modifications.
    Cela vide uniquement ce qu'il y a en mémoire et c'est tout simplement pour reproduire le TClientDataSet qui fournit aussi une méthode EmptyDataSet souvent utilisé dans un contexte de cache avec commit via le journal, une fois les données poussées, elles n'ont plus raison d'exister, le tampon est appliqué (propriété Delta)

    Donc c'est une méthode à utiliser uniquement si l'on utilise le TFDDataSet comme un TClientDataSet (FieldDefs.Ad, CreateDataSet ...)
    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

  11. #11
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    EmptyDataSet() est pourtant parfaitement décrit dans la documentation



    Cela vide uniquement ce qu'il y a en mémoire et c'est tout simplement pour reproduire le TClientDataSet qui fournit aussi une méthode EmptyDataSet souvent utilisé dans un contexte de cache avec commit via le journal, une fois les données poussées, elles n'ont plus raison d'exister, le tampon est appliqué (propriété Delta)

    Donc c'est une méthode à utiliser uniquement si l'on utilise le TFDDataSet comme un TClientDataSet (FieldDefs.Ad, CreateDataSet ...)
    Merci,
    j'ai bien saisie le truc en jouant sur le CachedUpdates le fonctionnement devient "visible".
    comme une method EmptyTable existe pour TTable, je me suis borné a chercher un equivalent pour TDFTable, qui apriori n'existe pas.
    la seule solution efficace pour vider un TFDTable est donc de passer par le SQL.

  12. #12
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    C'est le problème de l'existance du TFDTable, à quoi peut bien servir ce composant, tout peut être fait avec un TFDQuery, c'est même plus "prudent" pour maitriser ce qui est chargé et ce qui est écrit en base.

    le TTable c'était idéal pour Paradox et DBase, voire Access, le driver était adapté pour la lecture de ce genre de base de données qui n'était que de simple fichier séquentiel indexé.

    Avec une base de donnée distante, il faut repenser la lecture, éviter au maximum un SELECT * FROM ... sans WHERE, c'est contre-performant.
    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

  13. #13
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est le problème de l'existance du TFDTable, à quoi peut bien servir ce composant, tout peut être fait avec un TFDQuery, c'est même plus "prudent" pour maitriser ce qui est chargé et ce qui est écrit en base.

    le TTable c'était idéal pour Paradox et DBase, voire Access, le driver était adapté pour la lecture de ce genre de base de données qui n'était que de simple fichier séquentiel indexé.

    Avec une base de donnée distante, il faut repenser la lecture, éviter au maximum un SELECT * FROM ... sans WHERE, c'est contre-performant.
    plus j'avance dans l'etude des bases de données avec delphi plus je me rend compte que ce qui peut etre ecrit directement en SQL doit etre fait en SQL.

Discussions similaires

  1. Mise à jour de Firedac (Update 2)
    Par SergioMaster dans le forum Delphi
    Réponses: 11
    Dernier message: 02/05/2014, 21h37
  2. XE2 FireDac ODBC : message d'erreur
    Par artmicro dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/08/2013, 09h05
  3. XE4 , Firedac et datasnap
    Par SergioMaster dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/06/2013, 09h40
  4. Embarcadero propose FireDAC pour l'accès aux Bdd
    Par John Colibri dans le forum Delphi
    Réponses: 0
    Dernier message: 01/03/2013, 06h56

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