Bonjour à tous,

J'ai fait cette procédure qui fonctionne bien sauf pour mon champs de type mémo.
J'ai un table Access 97, j'utilise ADO, j'ai un DBRGrig lié à une une ADOTAble

Le but.
Je clique sur le titre de la colonne et cela classe par ordre de cette colonne

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
44
45
46
47
48
49
50
procedure TFListeDevis.DBGridDevisTitleClick(Column: TColumn);
begin
  JvEdit1.Text := ''; // On vide le champs de recherche
  With ModuleDeDonneeSecondaire.ADODevis Do
  Begin
    if (FieldByName(Column.FieldName) is TMemoField) then
    Begin
// ICI cela ne fonctionne pas
      showmessage(Column.Field.AsString);
      JvEdit1.Visible := True;
      JvDateEdit1.Visible := False;
      Label1.Caption := Column.Title.Caption + ' :';
// 
    end
    else
    Begin
      Close;
      IndexFieldNames := Column.FieldName;
      if (FieldByName(Column.FieldName) is TStringField) then
      Begin
        JvEdit1.Visible := True;
        JvDateEdit1.Visible := False;
        Label1.Caption := Column.Title.Caption + ' :';
      end;

      if (FieldByName(Column.FieldName) is TIntegerField) then
      Begin
        JvEdit1.Visible := True;
        JvDateEdit1.Visible := False;
        Label1.Caption := Column.Title.Caption + ' = ';
      end;
      if (FieldByName(Column.FieldName) is TFloatField) then
      Begin
        JvEdit1.Visible := True;
        JvDateEdit1.Visible := False;
        Label1.Caption := Column.Title.Caption + ' >= ';
      end;

      if (FieldByName(Column.FieldName) is TDateField) Then
      Begin
        JvEdit1.Visible := False;
        JvDateEdit1.Left := JvEdit1.Left;
        JvDateEdit1.Visible := True;
        Label1.Caption := Column.Title.Caption + ' >= ';
      end;
      Open;
    end;
  end;
end;
En rouge où cela me pose problème.
A l'issu du clique donc, Open; ou plutot delphi m'envoi un message 'Le tri ne peut pas être réalisé' patati patata, j'ai essayé de contourner le problème je n'y arrive pas.

Précision le champs de Type Mémo subi un traitement avant affichage pour n'afficher que la première ligne du mémo.
Voici le traitement : (le adotable c'est ADODevis)
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
 
Procedure TModuleDeDonneeSecondaire.MemoGetText(Sender: TField; var Text: String; DisplayText: Boolean);
var
  i : integer;
begin
  try
    Text := sender.AsString;
    if displayText then
    begin
      i := pos(#13,Text); // On récupère la position du retour à la ligne
      if i > 0 then
        Text := copy(Text,1,i-1) + '...'; // Text étant la valeur à afficher pour un TMemo on aura 1 ligne si il y a plusieur ligne dans le Tmemo
    end;
  except
    on e: Exception do
      Text := e.message;
  end;
end;
 
procedure TModuleDeDonneeSecondaire.ADODevisAfterOpen(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;

MErci de vos remarques et suggestion.