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 :

Delete d'une ligne dans un DBGrid


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Par défaut Delete d'une ligne dans un DBGrid
    Bonjour à tous,

    J'utilise Firebird comme base de donnée avec Delphi 7.

    J'ai une DBGrid dans laquelle j'ai plusieurs champs affichés avec des données, il est possible d'avoir deux lignes ou plus; complètemenet identique dans cette DBGrid.

    Le problème est que quand je veux effacer une ligne, si cette ligne existe plusieurs fois, elles seront toutes effacer, or moi j'aimerai faire en sorte que seul la ligne que j'ai sélectionné soit effacer.

    voici mon code
    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
     
      with DataModule1 do
      begin
        IBQueryXPresta.Close;
        IBQueryXPresta.SQL.Clear;
        IBQueryXPresta.SQL.Add('DELETE FROM XPRESTA');
        IBQueryXPresta.SQL.Add('WHERE XNUMCO = :NUMCO');
        IBQueryXPresta.SQL.Add('AND XLIBELLE = :LIBELLE');
        IBQueryXPresta.SQL.Add('AND XCODE = :CODE');
        IBQueryXPresta.ParamByName('NUMCO').AsString := frmMain.dbtxtAVNUM.Field.Text;
        IBQueryXPresta.ParamByName('LIBELLE').AsString := XPrestaLibelle;
        IBQueryXPresta.ParamByName('CODE').AsString := XPrestaCode;
     
        IBQueryXPresta.Open;
        IBtrsXPresta.CommitRetaining;
      end;
    J'ai essayer de faire quelque chose avec l'instruction DECLARE ... CURSOR en SQL, mais ça ne marche pas.

    Quelqu'un aurait-il une solution à me proposer?

    Jeankiki

  2. #2
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Tu dis que 2 lignes peuvent être completement identiques...

    Mais tu devrais normalement avoir un champ (typiquement nommé 'Idxxx' ou 'Code' ) qui est unique (style clef incrémentale).

    -> auquel cas il vaut faire intervenir ce champs dans ta clause Where.

    Sinon, hors requete SQL, tu peux également te positionner sur la bonne ligne est faire

    bon code
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Par défaut
    En fait, j'ai un numéro de contrat qui est unique dans lequel il y a des prestations.
    Les prestations peuvents être sous forme de chèque repas, de jours férier à récupérer, etc...
    Chaque prestation possède un code qui lui est aussi unique, mais il est possible par exemple de récupérer deux jours férié dans une même prestation, donc, le code, le nom, le montant, etc..., tout est identique.

    Le dataset.delete ne fonctionne pas non plus pour d'autre raison lié au programme.

    Je sais qu'il y a moyen de faire un DECLARE ... CURSOR, mais honnêtement, je n'arrive pas à l'utiliser en delphi.

    Quand je fais le code suivant
    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
    19
    20
    21
     
      with DataModule1 do
      begin
        IBQueryXPresta.Close;
        IBQueryXPresta.SQL.Clear;
        IBQueryXPresta.SQL.Add('DECLARE C CURSOR FOR');
        IBQueryXPresta.SQL.Add('(SELECT XNUMCO, XLIBELLE, XCODE FROM XPRESTA)');
        IBQueryXPresta.SQL.Add('DO');
        IBQueryXPresta.SQL.Add('BEGIN');
        IBQueryXPresta.SQL.Add('DELETE FROM XPRESTA');
        IBQueryXPresta.SQL.Add('WHERE XNUMCO = :NUMCO');
        IBQueryXPresta.SQL.Add('AND XLIBELLE = :LIBELLE');
        IBQueryXPresta.SQL.Add('AND XCODE = :CODE');
        IBQueryXPresta.SQL.Add('END');
        IBQueryXPresta.ParamByName('NUMCO').AsString := frmMain.dbtxtAVNUM.Field.Text;
        IBQueryXPresta.ParamByName('LIBELLE').AsString := XPrestaLibelle;
        IBQueryXPresta.ParamByName('CODE').AsString := XPrestaCode;
     
        IBQueryXPresta.Open;
        IBtrsXPresta.CommitRetaining;
      end;
    il me dit qu'il ne reconnait pas C

    Auriez-vous une autre solution à me proposer

Discussions similaires

  1. Ajouter une ligne dans un DBGrid
    Par jbaers dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/11/2005, 09h18
  2. Changer la couleur d'une ligne dans un DBGrid
    Par fba dans le forum Composants VCL
    Réponses: 5
    Dernier message: 24/10/2005, 20h30
  3. insérer une ligne dans un dbgrid entre 2 enregistrements
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/09/2005, 09h15
  4. Comment donne une couleur a une ligne dans un DBGrid
    Par samy84s dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/09/2005, 23h22

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