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 :

Champ (memo) dans un DbGrid


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 65
    Points : 30
    Points
    30
    Par défaut Champ (memo) dans un DbGrid
    Bonojour,

    J'utilise un TQuery qui est relié à un TDataSource qui lui même est relier au TDbGrid.

    Lorsque j'effectue la requet suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT GROUP_CONCAT(MonChamp
        SEPARATOR ", ") 
    FROM MaTABLE
    Elle me retourne tous les champs concaténé avec une virgule entre chaque champs sous MySQL. Mais dans mon DbGrid le champs est bel et bien reconnu mais il affiche (MEMO)

    Merci d'avance pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const
                     Rect: TRect; Field: TField; State:
                     TGridDrawState);
     
    var
      P: array [0..50] of char; {array size is number of  
                                 characters needed}
      bs: TBlobStream;          {from the memo field}
      hStr: String;
     
    begin
      if Field is TMemoField then
      begin
        with (Sender as TDBGrid).Canvas do
        begin   {Table1Notes is the TMemoField}
          bs := TBlobStream.Create(Table1Notes, bmRead);
          FillChar(P,SizeOf(P),#0); {terminate the null string}
          bs.Read(P, 50); {read 50 chars from memo into blobStream}
          bs.Free;
          hStr := StrPas(P);
          while Pos(#13, hStr) > 0 do  {remove carriage returns and}
            hStr[Pos(#13, hStr)] := ' ';
          while Pos(#10, hStr) > 0 do  {line feeds}
            S[Pos(#10, hStr)] := ' ';
     
          FillRect(Rect);  {clear the cell}
          TextOut(Rect.Left, Rect.Top, hStr);  {fill cell with memo
                                                data}
        end;
      end;
    end;
    je l'ai pas essayé car je viens de le recopier du net mais ça m'a l'air correct.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 65
    Points : 30
    Points
    30
    Par défaut
    J'ai deux erreurs lors de la compilation :

    Table1Notes n'est pas reconnu. J'ai essayer de le changer par le nom du champ (celui que j'ai utiliser dans le filtre du DbGrid et donc celui de l'alias du champs de la base de donnée) mais il n'est pas reconnu non plus.
    Le "S" de la deuxième boucle qui n'est pas déclarer.

    PS: pourrait tu me donner le lien de site d'où vient ce code stp

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par janjannaj Voir le message
    J'ai deux erreurs lors de la compilation :

    Table1Notes n'est pas reconnu. J'ai essayer de le changer par le nom du champ (celui que j'ai utiliser dans le filtre du DbGrid et donc celui de l'alias du champs de la base de donnée) mais il n'est pas reconnu non plus.
    Le "S" de la deuxième boucle qui n'est pas déclarer.

    PS: pourrait tu me donner le lien de site d'où vient ce code stp
    Re,

    1. C'est tjrs HSTR pas S c'est une petite erreur
    2. Table1Notes est le champ Notes dans le composant Table, tu peux le remplacer par taTable.FieldByName('tonChmap').AsString
    3. la politique de DEV veut qu'on ne met pas de liens externes, désolé.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 65
    Points : 30
    Points
    30
    Par défaut
    Pour le hStr pas de problèmes par contre pour le l'autre erreur j'ai remplacer par le MonQuery.FieldByName('NomDuCHamp').AsString et il me dit que TBlobField et string ne sont pas compatibles pareil si je ne met pas le AsString il me dit que TBlobField et TField ne sont pas compatibles

    J'ai essayer comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bs:= TBlobStream.Create(TBlobField.Create(Query.FieldByName('NomDuChamp')), bmread);
    Comme ça il ne me fait pas d'erreurs de compilation mais il m'affiche toujours (memo)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 65
    Points : 30
    Points
    30
    Par défaut
    Après vérification je me suis rendu conte que la procédure n'est jamais exécutée. Pourtant elle se trouve bien dans l'événement OnDrawDataCell du DbGrid.

    Voila ce que dit l'aide de Delphi sur cette événement "N'écrivez pas de gestionnaire d'événement OnDrawDataCell. OnDrawDataCell est obsolète et n'est proposé que dans un souci de compatibilité descendante. A la place, écrivez un gestionnaire d'événement OnDrawColumnCell."
    L'événement OnDrawColumnCell ne contient pas le paramètre Field

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re,

    voici une autre solution que j'ai trouvé ici même , la simplicité de celle-ci consiste dans le fait que le formatage de la donnée mémo est traité dans le dataset indépendamment du dbgrid mais s'affiche correctement dans celui-ci donc plus extensible que la 1ière solution.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 65
    Points : 30
    Points
    30
    Par défaut
    La fonction SQL CAST ne fonctionne pas chez moi.
    Que faut-il mettre à la place du MonCalc et à la plac du MonMemo dans a ligne suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonCalc.AsString := stringReplace( MonMemo.AsString, #13#10, ' ' , [ rfRaplaceAll ] );

Discussions similaires

  1. afficher un memo dans un dbgrid
    Par nil dans le forum Bases de données
    Réponses: 9
    Dernier message: 30/12/2005, 12h14
  2. Afficher un champ memo dans un dbgrid
    Par CharleLéo dans le forum Bases de données
    Réponses: 2
    Dernier message: 24/11/2005, 17h21
  3. mise à jour de champ monétaire dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/08/2005, 11h49
  4. champ TEXTE dans un DBGRID
    Par richard038 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/08/2005, 08h44
  5. Remplir et relire un champ Memo dans une BD Access.
    Par Maitre Kanter dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 22h51

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