Code 1 à tester

cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013 - 16 sept. 2002 à 21:41
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013 - 18 sept. 2002 à 16:22
salut a tous,

je voulais faire un filtrage sur une table en utlisant les numeros d'enregistrements pour marquer les record et ensuite applique une requete sur cette ensemble marqué

mais voila ca n'a pas bien marché.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables;

type
TForm1 = class(TForm)
Table1: TTable;
DataS: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
Procedure SelectAll(leDbGrid : TDBGrid);
end;

var
Form1: TForm1;
RECN1, RECN2, Allrec : longint;
implementation

{$R *.DFM}

Procedure TForm1.SelectAll(leDbGrid : TDBGrid);
var
ABookmark: TBookmark;
begin
if ((dgMultiSelect in leDbGrid.Options) and (dgRowSelect in leDbGrid.Options))
and leDbGrid.DataSource.DataSet.Active then begin
with leDbGrid.DataSource.DataSet do begin
if (BOF and EOF) then Exit;
DisableControls;
try
ABookmark := GetBookmark;
try
recno:=recn1;
//First;
//while not EOF do begin
while not (recno>recn2) do begin
ledbgrid.SelectedRows.currentrowselected:=true;
showmessage(INTTOSTR(RECNO));
Next;
end;
finally
try
begin
//recno:=recn2;
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[recn1]));
//GotoBookmark(ABookmark);
end;
except
end;
FreeBookmark(ABookmark);
end;
finally
EnableControls;
end;
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i : integer;
begin
recn1:=1;
recn2:=recn1+3;
allrec:=6; // par exemple
//table1.recordcount;
while (recn1<=allrec) do
begin
SelectAll(dbgrid1);
showmessage('ca y est c"est fait pour la plage '+IntToStr(recn1)+' à '
+ IntToStr(recn2));
// deselectionner les lignes
for i:=recn1 to recn2 do
begin
dbgrid1.DataSource.DataSet.RecNo:=recn1;
if (dbgrid1.SelectedRows.currentrowselected) then
begin
dbgrid1.DataSource.DataSet.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i-1]));
dbgrid1.SelectedRows.currentrowselected:=false;
end;
end;

recn1:=recn2+1;
recn2:=recn1+3;
end;
end;

end.

qlq peut le tester pour moi et me dire ou se situe la faille ?

Merci.

2 réponses

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
17 sept. 2002 à 23:18
En fait je ne savais pas que c'était possible de sélectionner les lignes d'une DBGrid par programme, comme quoi il y a toujours quelque-chose à apprendre.

Le code est bien compliqué, il suffit juste de faire une boucle pour sélectionner les lignes de la grille. Voici une procédure qui sélectionne une plage de ligne d'une grille :
Procedure TForm1.SelectPlage(leDbGrid : TDBGrid;Debut,Fin:Integer);
var i : Integer;
begin
if ((dgMultiSelect in leDbGrid.Options) and (dgRowSelect in leDbGrid.Options))and leDbGrid.DataSource.DataSet.Active
then begin
with leDbGrid.DataSource.DataSet do
begin
// Supression de la sélection précédente
LeDBGrid.SelectedRows.Clear;
// Sélection des nouvelles lignes
For i:= Debut To Fin Do
Begin
RecNo:=i;
If Not ledbgrid.SelectedRows.currentrowselected Then ledbgrid.SelectedRows.currentrowselected:=true;
End;
end;
end;
end;

Et voici la reprise de la procédure d'essais de la sélection. Comme tu voulais le faire, cette procédure sélectionne toute la grille par bloc de 4 lignes :
procedure TForm1.Button1Click(Sender: TObject);
var RecN1,RecN2 : integer;
begin
With DBGrid2.DataSource.DataSet Do
Begin
recn1:=1;
while (recn1<=RecordCount) do
begin
recn2:=recn1+3;
If RecN2>RecordCount Then RecN2:=RecordCount;
SelectPlage(dbgrid2,RecN1,RecN2);
showmessage('ca y est c"est fait pour la plage '+IntToStr(recn1)+' à '+ IntToStr(recn2));
recn1:=recn2+1;
end;
End;
end;

Une petite remarque concernant ce code : il ne fonctionne que sur des tables Paradox et non filtrées !

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
18 sept. 2002 à 16:22
merci nono40,
0
Rejoignez-nous