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
En rouge où cela me pose problème.
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;
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.
Partager