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 :

DBGrid affichage MEMO


Sujet :

Bases de données Delphi

  1. #1
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 618
    Points : 222
    Points
    222
    Par défaut DBGrid affichage MEMO
    Bonsoir,

    après avoir fait plusieurs recherche je n'arrive pas à trouver une solution pour que dans mon DBGrid il n'y ait plus MEMO affiché mais mes données.

    J'ai vu que cela venait du fait que les champs plus de 250 caractères.

    Y a t'il une solution pour formatter les données avant l'affichage ?

    J'ai trouvé un algo qui date de l'été dernier et qui me sort plein d'erreur, alors si quelqu'un avait une solution pour Delphi 7?

    Merci à tous.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Un mémo est multi-ligne, donc par définition tu ne peux pas l'afficher dans une grille.
    Néanmoins, tu as quand mêmes 2 solutions

    Une solution, tu affiches un panel, ou tu affiches le mémo de la ligne active
    -> j'imagine que cela te convient pas car on a pas une vue d'ensemble de tous les mémos...

    Une autre
    Tu fais un Champs calculés MonCalc de type string.
    et dans OnCalcField de ta Table tu fais

    MonCalc.AsString := stringReplace( MonMemo.AsString, #13#10, ' ' , [ rfRaplaceAll ] );

    le StringReplace sert à oter les retour chariot pour afficher sur une seule ligne ton mémo.
    Sinon, tu peux également afficher uniquement la 1ere Ligne...

    bon courage!
    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 actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 618
    Points : 222
    Points
    222
    Par défaut
    bonjour,

    excuses moi mais tu la place où cette instruction ?

    J'ai essayé dans l'évènement AfterOpen de mon SQLQuery mais cela ne marche pas.

    As tu éventuellement un exemple ?

    Merci pour tout.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    si ce n'est que pour affichage (pas d'edition) tu peux aussi transtyper ton champ memo en varchar dans le SQL avec l'instruction CAST.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select ... CAST(MonChamp AS VARCHAR (255))
    Evidement tu n'affichera ici que 255 caracteres max...

    TicTacToe t'indique dans l'evenement OnCalcField !!!

    @+

  5. #5
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Autre possibilité : définir un événement OnGetText sur les zones Mémo.

    Par exemple :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    TForm1 = class(TForm)
    ...
    private
        // Evénement qui renvoie le texte du mémo
        procedure memoGetText(Sender: TField; var Text: String; DisplayText: Boolean);
    ...
    end;
     
    // AfterOpen du DataSet dont on veut traiter les zones Mémo
    procedure TForm1.Query1AfterOpen(DataSet: TDataSet);
    var
      i : integer;
    begin
      // on redirige les zones memo vers memoGetText
      for i := 0 to DataSet.FieldCount - 1 do
        if (DataSet.Fields[i] is TMemoField) then
          DataSet.Fields[i].OnGetText := memoGetText;
    end;
     
    procedure TForm1.memoGetText(Sender: TField; var Text: String; DisplayText: Boolean);
    var
      i : integer;
    begin
      try
        Text := sender.AsString;
        if displayText then
        begin
          i := pos(#13,Text);
          if i > 0 then
            Text := copy(Text,1,i-1) + '...';
        end;
      except
        on edb: EDBEngineError do
          if ((edb.errors[0].ErrorCode = DBIERR_INVALIDBLOBHANDLE)
          or  (edb.errors[0].ErrorCode = ERRCODE_INVALIDBLOBHANDLE)) then
            Text := 'Handle de blob invalide, essayez de mettre BLOBS TO CACHE=-1 dans les paramètres de la connexion'
          else
            Text := edb.message;
        on e: Exception do
          Text := e.message;
      end;
    end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  6. #6
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 618
    Points : 222
    Points
    222
    Par défaut
    Je souhaite savoir de qu'elle classe les constantes d'erreurs font parties.
    Car pour DBIERR_INVALIDBLOBHANDLE et ERRCODE_INVALIDBLOBHANDLE il m'indique 'identificateurs non déclarés'

    Merci.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    Les codes d'erreur du BDE : DBIERROR_... sont dans l'unité bde.

    @+

  8. #8
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 618
    Points : 222
    Points
    222
    Par défaut
    Excuses moi, mais je souhaiterai bien comprendre, et je ne vois où est fait l'allusion à la DBGrid et j'aimerai comprendre comment cela peut fonctionner.

    Comment les données sont redirigées vers la DBGrid ?

    Merci.

  9. #9
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par thierrybatlle
    Excuses moi, mais je souhaiterai bien comprendre, et je ne vois où est fait l'allusion à la DBGrid et j'aimerai comprendre comment cela peut fonctionner.

    Comment les données sont redirigées vers la DBGrid ?

    Merci.
    Le code que j'ai posté est lié au dataset et non au DBGrid. Mais comme le DBGrid ne fait qu'afficher le dataset, ça fonctionne.

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Bonjour;
    un code très utile pour un joli design
    je vous remercie tous bonne continuation

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

Discussions similaires

  1. DBgrid, Memo, affichage par ligne
    Par mohandesga dans le forum Bases de données
    Réponses: 9
    Dernier message: 23/05/2013, 21h21
  2. [DBGrid] Affichage d'un sous-ensemble de données
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/09/2004, 16h31
  3. DBGrid - Affichage sur 2 colonnes
    Par Grouik dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/04/2004, 17h37
  4. Affichage ds une DBGrid
    Par TieumB dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/01/2004, 16h52
  5. lenteur d'affichage de requete dans un DBGrid
    Par nico27 dans le forum InterBase
    Réponses: 9
    Dernier message: 23/06/2003, 13h54

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