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

C++Builder Discussion :

[TDBGrid] Multisélection de lignes pour suppression


Sujet :

C++Builder

  1. #1
    Membre habitué
    Homme Profil pro
    Analyste développeur VB6, SQL, VB.NET, C#
    Inscrit en
    Avril 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste développeur VB6, SQL, VB.NET, C#
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2003
    Messages : 111
    Points : 141
    Points
    141
    Par défaut [TDBGrid] Multisélection de lignes pour suppression
    Hello,

    J'utilise un TDBGrid associé à un TDBNavigator pour récupérer le contenu d'une table SQL Server.
    J'ai essayer de supprimer plusieurs lignes en même temps dans mon TDBGrid grace à la multisélection de lignes (dans TDBGrid, Options, dgMultiSelect) mais quand je clique sur le bouton - de mon TDBNavigator, seule la dernière ligne est supprimée!!! Pourquoi?
    Je n'ai tapé aucun code car je travaille avec l'inspecteur d'objets.
    Pouvez-vous m'aider s'il vous plait?

    Merci
    N'oubliez pas le tag .

  2. #2
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    le DBGrid représente ta table... il n'y a pas de multi sélection dans une table !!! il faut prendre les enregistrements les uns après les autres, sinon libre à toi de faire une autre interface capable de gérer le multi-select ...

  3. #3
    Membre habitué
    Homme Profil pro
    Analyste développeur VB6, SQL, VB.NET, C#
    Inscrit en
    Avril 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste développeur VB6, SQL, VB.NET, C#
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2003
    Messages : 111
    Points : 141
    Points
    141
    Par défaut
    Faut-il alors que je transpose tout ça dans une TStringGrid pour la manipuler à ma guise? si oui, comment faire car une TStringGrid n'a pas de liaison avec une base de données...

    Merci
    N'oubliez pas le tag .

  4. #4
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 94
    Points
    94
    Par défaut
    Salut,

    Voila de quoi supprimer les lignes sélectionnées de ta DbGrid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DBGridEdition->DataSource->DataSet->DisableControls();
    for(i=0;i<DBGridEdition->SelectedRows->Count;i++)
    {
        DBGridEdition->DataSource->DataSet->GotoBookmark((void *)DBGridEdition->SelectedRows->Items[i].c_str());
        DBGridEdition->DataSource->DataSet->Delete();
    }
    DBGridEdition->DataSource->DataSet->EnableControls();
    8)

  5. #5
    Membre habitué
    Homme Profil pro
    Analyste développeur VB6, SQL, VB.NET, C#
    Inscrit en
    Avril 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste développeur VB6, SQL, VB.NET, C#
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2003
    Messages : 111
    Points : 141
    Points
    141
    Par défaut
    Merci, je commencai à désespérer!

    j'ai donc ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void __fastcall TForm1::DBNavigator1Click(TObject *Sender,
          TNavigateBtn Button)
    {
            if(Button==nbDelete){
                    DBGrid1->DataSource->DataSet->DisableControls();
                    for(int i=0;i<DBGrid1->SelectedRows->Count;i++)
                    {
                        DBGrid1->DataSource->DataSet->GotoBookmark((void *)DBGrid1->SelectedRows->Items[i].c_str());
                        DBGrid1->DataSource->DataSet->Delete();
                    }
                    DBGrid1->DataSource->DataSet->EnableControls();
            }
    }
    qui fonctionne mais malheureusement, j'ai découvert que ça plantait si dans les enregistrements à supprimer, il y a la dernière ligne de ma table.
    J'aurai alors deux types de messages:

    Si je supprime la dernière ligne
    BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé. L'opération demandée nécessite un enregistrement actuel
    (Pourtant mon enregistrement est bien supprimé quand je relance mon application!!)

    Si je supprime des lignes dont la dernière ligne
    ADOTable1: Enregistrement non trouvé
    (Apparait quand l'application tente de supprimer la dernière ligne - Pourtant mes enregistrements sont bien supprimés quand je relance mon application!!)

    Si quelqu'un pouvait m'éclairer...

    Merci
    N'oubliez pas le tag .

  6. #6
    Membre habitué
    Homme Profil pro
    Analyste développeur VB6, SQL, VB.NET, C#
    Inscrit en
    Avril 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste développeur VB6, SQL, VB.NET, C#
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2003
    Messages : 111
    Points : 141
    Points
    141
    Par défaut
    J'ai effectué des tests et modifier le code comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            if(Button==nbDelete){
                    DBGrid1->DataSource->DataSet->DisableControls();
                    for(int i=0;i<DBGrid1->SelectedRows->Count-1;i++)
                    {
                            DBGrid1->DataSource->DataSet->GotoBookmark((void *)DBGrid1->SelectedRows->Items[i].c_str());
                            DBGrid1->DataSource->DataSet->Delete();
                    }
     
                    DBGrid1->DataSource->DataSet->EnableControls();
            }
    avec i<DBGrid1->SelectedRows->Count-1 je n'ai plus de problème et mes lignes sont bien supprimées, même s'il s'agit de la dernière....
    mais pourquoi le -1, j'ai encore du mal à comprendre... Si vous aviez des explications...

    Merci
    N'oubliez pas le tag .

  7. #7
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 94
    Points
    94
    Par défaut
    T'as raison, j'ai mis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
    {
    --
    }
    catch(EDBEngineError &e)
    {
        DBGridEdition->DataSource->DataSet->EnableControls();
    }
    Et comme toutes les lignes sont bien supprimées... L'utilisateur n'y voit que du feu.

  8. #8
    Membre habitué
    Homme Profil pro
    Analyste développeur VB6, SQL, VB.NET, C#
    Inscrit en
    Avril 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste développeur VB6, SQL, VB.NET, C#
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2003
    Messages : 111
    Points : 141
    Points
    141
    Par défaut
    voici un exemple testé que je ne comprends pas:

    - je sélectionne 3 enregistrements dans mon TDBGrid
    - je supprime
    - en pas à pas, je ne passe que 2 fois dans ma boucle avec le Delete()
    - pourtant mes 3 lignes sont supprimées!
    N'oubliez pas le tag .

  9. #9
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 94
    Points
    94
    Par défaut
    J'ai vu ça.
    Moi j'ai contourné le pbe plutot que l'affronter... Je vais pas maintenant chercher pourquoi ce que j'ai fait il y a 1 an marche.
    Je préfère chercher pourquoi un truc ne marche pas.

  10. #10
    Membre habitué
    Homme Profil pro
    Analyste développeur VB6, SQL, VB.NET, C#
    Inscrit en
    Avril 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste développeur VB6, SQL, VB.NET, C#
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2003
    Messages : 111
    Points : 141
    Points
    141
    Par défaut
    Bon courage alors.

    Encore merci pour ton aide.
    N'oubliez pas le tag .

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

Discussions similaires

  1. [XL-2013] Message d'erreur pour suppression de ligne sur VBA
    Par Nono Sto dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/08/2014, 16h02
  2. Macro suppression d'une ligne pour double conditions
    Par nanoo79 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2013, 16h54
  3. Macro pour suppression de lignes
    Par Sylcoco dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/02/2011, 18h01
  4. [VB.NET] Sélection d'image pour suppression
    Par botanique dans le forum Windows Forms
    Réponses: 12
    Dernier message: 01/11/2005, 17h09
  5. Réponses: 2
    Dernier message: 08/06/2004, 14h42

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