Salut tous j'ai un problème pour faire une action dans une sélection multiple dans un DBGrid.
j'affiche un DBGRID grâce a une requête query

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Datamodule1.Query31.SQL.Text := 'SELECT * from adherent.DB' ;
Datamodule1.Query31.Active:=true;
j'affiche le résultat dans un DBGrid avec une case à cocher ,pour l'instant tout est ok.
Je sélectionne mes cases a coché et sur un bouton je veux créer un enregistrement en récupérant l'id le nom et le prénom mais la j'ai une érreur

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 Talloue_cotisation.BitBtn4Click(Sender: TObject);
var
  i: Integer;
begin
 
for  i:=0  to  SMDBGrid1.SelectedRows.Count-1  do
begin
SMDBGrid1.DataSource.DataSet.GotoBookmark(pointer(SMDBGrid1.SelectedRows.Items[i]));
SMDBGrid1.DataSource.DataSet.Edit;
 
//SMDBGrid1.DataSource.DataSet.FieldByName('Lieu_trn').AsInteger := 3;
SMDBGrid1.DataSource.DataSet.FieldByName('Idadherent').AsString;
SMDBGrid1.DataSource.DataSet.FieldByName('Nom').AsString;
SMDBGrid1.DataSource.DataSet.FieldByName('Prenom').AsString;
 
Datamodule1.Table9.Active:=true;
Datamodule1.Table9.Append;
 
Datamodule1.Table9.FieldByName('Idadherent').Value := SMDBGrid1.DataSource.DataSet.FieldByName('Idadherent').AsString;
Datamodule1.Table9.FieldByName('Nom').Value := SMDBGrid1.DataSource.DataSet.FieldByName('Nom').AsString;
Datamodule1.Table9.FieldByName('Prenom').Value := SMDBGrid1.DataSource.DataSet.FieldByName('Prenom').AsString;
 
SMDBGrid1.DataSource.DataSet.Post;
 
Datamodule1.Table9.Post();
 
 end;
  end;
message erreur
Query31:Impossible de modifier un ensemble de données en lecture seule
si mon DBGrid est alimenté par un Ttable tous fonctionne bien .Mais j'ai besoin de faire un critaire de sélection donc une requête il me faut impérativement un query ?

je ne trouve pas la solution merci de votre aide