zerargui
Messages postés65Date d'inscriptionvendredi 24 octobre 2008StatutMembreDernière intervention25 février 2019
-
5 nov. 2008 à 08:22
zerargui
Messages postés65Date d'inscriptionvendredi 24 octobre 2008StatutMembreDernière intervention25 février 2019
-
9 nov. 2008 à 19:04
j'ai pris le programme de delphiprog qui est dessous
mais à la place d'une base de données Dbase(.dbf) j'ai utilisé une base paradox(.db)
alors le programme n'affiche plus les fichiers indexes (triés); veillez m'éclairer SVP:
var
Form2: TForm2;
//Liste des index secondaires disponibles
IndexList: TStrings;
//Liste des index secondaires créés à la volée
CreatedIndexList: TStrings;
implementation
{$R *.DFM}
procedure TForm2.FormCreate(Sender: TObject);
begin
Table1.Open;
//Récupérer la liste des index déclarés
//avant le lancement du programme
Table1.GetIndexNames(IndexList);
//En faire une copie pour l'afficher et
//permettre une sélection par l'utilisateur
ListBox1.Items.Assign(IndexList);
end;
procedure TForm2.DBGrid1TitleClick(Column: TColumn);
begin
//Vérifie que la colonne affiche des données de la
//table et non un champ calculé
if DBGrid1.ValidFieldIndex(Column.Index) then
begin
//Un index correspondant à la colonne cliquée existe-t-il ?
if IndexList.IndexOf(Column.FieldName) <> -1 then
//Si oui, l'activer
with TTable(DbGrid1.DataSource.DataSet) do
IndexFieldNames := Column.FieldName
else
//L'index n'existe pas :
showmessage('l''indexe n''existe pas');
with TTable(DbGrid1.DataSource.DataSet) do
begin
Close;
Exclusive := True;
//créer un index secondaire correspondant
//à la colonne cliquée
try
AddIndex(Column.FieldName, Column.FieldName, []);
//rendre actif l'index créé
IndexFieldNames := Column.FieldName;
Exclusive := False;
Open;
//Réactualiser la liste des index de la table
GetIndexNames(IndexList);
//et l'afficher
ListBox1.Items.Assign(IndexList);
CreatedIndexList.Assign(IndexList);
except
on EDatabaseError do
begin
ShowMessageFmt('Impossible de créer un index'#13'sur le champ %s.',
[Column.FieldName]);
IndexFieldNames := '';
Exclusive := False;
if not Active then
Open;
end;
end;
end;
end;
end;
procedure TForm2.FormDestroy(Sender: TObject);
var
i: integer;
begin
with Table1 do
begin
Close;
Exclusive := True;
for i := 0 to CreatedIndexList.Count - 1 do
try
Table1.DeleteIndex(CreatedIndexList.Strings[i]);
except
//
end;
Exclusive := False;
Close;
end;
end;
procedure TForm2.ListBox1Click(Sender: TObject);
begin
//S'il y a au moins un élément dans la liste
with ListBox1 do
if Items.Count > 0 then
//Rendre actif l'index correspondant à
//l'élément sélectionné
Table1.IndexFieldNames := Items[ItemIndex];
end;
procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.FieldName = Table1.IndexFieldNames then
//Colorer en bleu le titre cliqué
Column.Title.Font.Color := clBlue
else
Column.Title.Font.Color := clTeal;
zerargui
Messages postés65Date d'inscriptionvendredi 24 octobre 2008StatutMembreDernière intervention25 février 2019 5 nov. 2008 à 11:47
Bonjour Cantador,
je n'ai aucun méssage d'erreur ou autres; à chaque fois que je click sur un index rien ne change au niveau du DbGgrid.
et Merci de la réponse.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 7 nov. 2008 à 19:23
Si tu veux faire des tris en cliquant sur le titre de colonne, il y des exemples
(qui marchent bien..) de sources déposés sur le site.
de mémoire, il y en a au moins un de très bon.
si je le trouve, je t'envoie le lien..