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 :

Position dans une DBGRID


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Position dans une DBGRID
    Bonjour tout le monde,

    Je débute sous delphi et je bloque sur une chose qui paraitra anodine à beaucoup.

    J'ai besoin de sauvegarder la position de la cellule active dans la DBGRID afin de pouvoir la rendre de nouveau active après un traitement de somme d'une colonne.

    Voila le code qui effectue les sommes mais en même temps rend active la dernière cellue (ce qui est totalement logique) :

    Code Delphi : 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
    procedure affichetotaux;
    var machaine : string;
        i: longint;
        l : integer;
     
    begin
    sommed:=0; sommec:=0;
    form1.DBGrid1.DataSource.DataSet.DisableControls;
    while not form1.Table1.eof do
    begin
    sommed:=sommed+form1.table1.Fields[5].AsFloat;
    sommec:=sommec+form1.table1.fields[6].asfloat;
    form1.table1.Next;
    end;
    str(sommed:12:2,machaine);
    form1.totaldebit.Caption:=machaine;
    str(sommec:12:2,machaine);
    form1.totalcredit.Caption:=machaine;
    form1.DBGrid1.DataSource.DataSet.EnableControls;
    end;

    Merci pour votre aide,

    Mutatis Mutandis.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    il serait largement plus simple de faire une requete, car cela ne bougerai pas le curseur de ton DbGrid.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select Sum(MonChampACalculer) from LaTable
    Where UnChampCritere = ValeurCritère
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse,

    Néanmoins je ne connais pas du tout le sql. De plus j'aimerais bien savoir comment par la programmation pouvoir sélectionner une cellule. Pour le champ, j'utilise selectedindex mais pour l'enregistrement ???

    Merci d'avance,

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Comme on le dit souvent un DbGrid ne contient aucune donnée, il faut donc travailler avec la source (dans ton cas un TxxxTable).

    Après pour te positionner sur un enregistrement particulier tu as la function locate

    Sinon, travailler sur les bases de données de nos jours sans connaitre le SQL et selon le type de programme c'est courrir à la catastrophe.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide, je vais essayer avec locate et me documenter sur sql.

    Bien à toi et bonne continuation.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Si tu arrives a résoudre ton problème pense à cliquer sur
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Excuses moi mais j'ai mis un peu de temps, ça marche impeccable.

    Je mets le code corrigé, au cas ou ça interreserait quelqu'un :

    Code delphi : 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
    22
    procedure affichetotaux;
    var machaine : string;
        i : widestring;
        opts : tlocateoptions;
    begin
    sommed:=0; sommec:=0;
    i:=form1.Table1.Fields[0].AsWideString;
    form1.DBGrid1.DataSource.DataSet.DisableControls;
    form1.Table1.First;
    while not form1.Table1.eof do
    begin
    sommed:=sommed+form1.table1.Fields[5].AsFloat;
    sommec:=sommec+form1.table1.fields[6].asfloat;
    form1.table1.Next;
    end;
    str(sommed:12:2,machaine);
    form1.totaldebit.Caption:=machaine;
    str(sommec:12:2,machaine);
    form1.totalcredit.Caption:=machaine;
    form1.DBGrid1.DataSource.DataSet.EnableControls;
    form1.Table1.locate('no',i,opts);
    end;

    Avant de cliquer sur résolu, j'aimerais bien savoir si il existe un tutoriel ou un livre expliquant les notions de ttable, tdatasource, tdataset parce que j'utilise un peu tout ça mais je me demande si je respecte bien les règles.

    Encore merci pour ton aide.

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Regarde ma signature, dans le guide du bon forumeur, il y a un lien vers la section tutoriels.
    après tu cliques sur SGBD dans la liste des filtre de la page et tu auras le nécessaire ^^

    PS: Pense à utiliser les balises de code quand tu en mets dans tes posts (avec le # dans la barre d'outils)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Ok merci d'avance, j'y vais de ce pas...
    Et pour le code, je vais faire attention !
    Ecnore merci, car comme on m'a toujours appris quand y en a marre, y a Malatar ! (Elle était facile et on a du te la faire bien souvent !)


  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Sinon il y a aussi les Signets ...

    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
    var
       BookMark: TBookmark;
    begin
          BookMark := Data.GetBookmark();
          try
             Data.First();
             while not Data.EOF do
             begin
                ...
                Data.Next();
             end;
             Data.GotoBookmark(BookMark);
          finally
             Data.FreeBookmark(BookMark);
          end;
       end;
    end;
    ah ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form1.Table1.locate('no',i,opts);
    peut s'écrire comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form1.Table1.locate('no', i, []);
    cela évite une variable
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci ShaiLeTroll, effectivement cela peut être une solution et puis cela me rappelle la notion de pointeurs ? Et pour le coup des [], c'est impecable.

    Je programme pour me détendre et j'avoue que vous êtes vraiment super pour que cela ne se transforme pas en cauchemar !

    Merci à tous pour vos aides précieuses.


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

Discussions similaires

  1. ligne sélectionnée dans une dbGrid
    Par RBIK dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/07/2004, 17h13
  2. Paradox 7 Comment trier et marquer données dans une DBgrid
    Par technico dans le forum Bases de données
    Réponses: 12
    Dernier message: 04/07/2004, 11h08
  3. Sélectionner une ligne dans une DBGrid
    Par RBIK dans le forum Bases de données
    Réponses: 13
    Dernier message: 01/07/2004, 17h13
  4. ecrire manuellement dans une dbgrid
    Par neness dans le forum Bases de données
    Réponses: 4
    Dernier message: 16/06/2004, 11h14
  5. Données dans une DBgrid
    Par camino dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/02/2004, 03h40

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