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 :

Vider une table


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 45
    Points
    45
    Par défaut Vider une table
    Bonjour à toutes et à tous,

    Soient des composants UIB et un petit bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    query.SQL.Clear;
    query.SQL.Add('DELETE FROM MA_TABLE');
    query.execsql;
    transaction.Commit;
    dataset.Active:=false;
    dataset.Active:=true;
    Ceci a pour effet de vider MA_TABLE sauf que le DBGrid qui affiche MA_TABLE me laisse le dernier enregistrement .
    Quand je quitte et que je relance le programme, MA_TABLE apparaît parfaitement vide.

    J'ai vérifié MA_TABLE et ce code suffit pour la vider mais l'affichage ne représente pas la réalité.

    Comment faire ?

  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

    As-tu fait un Close puis Open sur la DataSet lié au DBGrid, suite à l'exécution de cette requête ?

    [edit]
    Ah mince, je n'avais pas vu le Active à False puis True.
    @+

  3. #3
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Bonjour
    comme t'a dit Claudius, vous devez rajouter query1.close après le query1.sql.clear;
    ton code sera comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    query1.close;
    query1.sql.clear;
    ....
    ...
    A++

  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
    @kroma.
    Ce n'est pas ça puisque que ce n'est pas le Query qui est relié au DBGrid (on ne peut pas d'ailleurs avec TUIBQuery).

  5. #5
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 45
    Points
    45
    Par défaut
    Avec une pirouette comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var Nom:string;
    Nom:=base.databasename;
    dataset.Active:=false;
    base.Connected:=false;
    Base.DatabaseName:=nom;
    Base.Connected:=true;
    dataset.Active:=true;
    ça fonctionne.

    C'est pas très "propre" mais ça suffit...

  6. #6
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    C'est pas très "propre" mais ça suffit...
    Pourquoi ne pas utiliser la procédure EmptyTable du composant TTable ?

  7. #7
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 45
    Points
    45
    Par défaut
    Bonsoir,

    Pourquoi ne pas utiliser la procédure EmptyTable du composant TTable ?
    Parce-que je n'utilise pas de composant TTable mais des composants UIB (UIBDataBase, UIBTransaction, UIBDataSet et UIBQuery) et que tout passe par SQL...

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    Essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('TRUNCATE TABLE MA_TABLE');
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('TRUNCATE MA_TABLE');

  9. #9
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 45
    Points
    45
    Par défaut
    J'avais déjà essayé avec TRUNCATE mais ça me donne un message d'erreur, le composant UIBQuery ne semble pas connaître ce terme :

    Dynamic SQL error
    SQL error code= -104
    Token unknown -line 1, column 1
    TRUNCATE
    Invalid token
    Error Code: 249

  10. #10
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Citation Envoyé par jackvpt Voir le message
    Bonjour à toutes et à tous,

    Soient des composants UIB et un petit bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    query.SQL.Clear;
    query.SQL.Add('DELETE FROM MA_TABLE');
    query.execsql;
    transaction.Commit;
    dataset.Active:=false;
    dataset.Active:=true;
    Ceci a pour effet de vider MA_TABLE sauf que le DBGrid qui affiche MA_TABLE me laisse le dernier enregistrement .
    Quand je quitte et que je relance le programme, MA_TABLE apparaît parfaitement vide.

    J'ai vérifié MA_TABLE et ce code suffit pour la vider mais l'affichage ne représente pas la réalité.

    Comment faire ?
    Le Dataset est relié a quelle composant transaction ?
    Si vous êtes libre, choisissez le Logiciel Libre.

  11. #11
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Je ne comprends pas cet histoire de dataset . Il est relié a quoi ce dataset ? à la query ? a une query différente ? dans ce cas là il suffirait peut être simplement de rafraichir (fermer&ouvrir) cette dernière
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 45
    Points
    45
    Par défaut
    a) Le DataSet est relié au composant Transaction, lui même relié au composant DataBase. Le Query est relié au Transaction et au DataBase.

    b) J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      query.Close(etmcommit);
      query.Open(true);
    mais pas mieux .

    Je suis persuadé que ça vient plutôt de l'affichage du DBGrid mais le fait de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataBase.Active:=False;
    DataBase.Active:=True
    ça résout le problème.

    J'arrête de chercher et je classe le sujet en RESOLU.

    Merci de votre aide à tous .

  13. #13
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataBase.Active:=False;
    DataBase.Active:=True
    C'est bien la preuve que c'est un problème de transaction, puisque en fermant le DataBase tu ferme les transactions liées.
    Si vous êtes libre, choisissez le Logiciel Libre.

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

Discussions similaires

  1. [SQL] Vider une table
    Par philippef dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 22/03/2013, 19h20
  2. [MySQL] Vider une table à la fermeture du navigateur
    Par cheucher dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/03/2006, 12h20
  3. Vider une table MySQL suite à javascript:confirm()
    Par anutka dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 16/09/2005, 12h16
  4. comment vider une table de tous ses enregistrements ?
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/07/2005, 10h19
  5. Vider une table a une fermeture subite
    Par mimosa7 dans le forum Access
    Réponses: 6
    Dernier message: 15/06/2005, 17h13

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