Die Komponentenkette sieht ja so so aus:
[TDataSet]-------[TDataSource]------[TDbGrid]
Wenn Du im DbGrid (durch scrollen hinter den letzten Datensatzeintrag) einen neuen Datensatz "einfügst", wird das DataSet in den Zustand dsInsert versetzt. Erst wenn im Grid dieser Datensatz verlassen wird, wird er tatsächlich eingefügt. Das DbGrid kann diese Aktion nicht verhindern - das DataSet schon. Schau Dir mal das Ereignis "BeforeInsert" des DataSets an. Dort könntest Du ansetzen und zum Beispiel mit
Delphi-Quellcode:
procedure TForm1.Query1BeforeInsert(DataSet: TDataSet);
begin
DatabaseError('Diese Datenmenge kann nur gelesen werden', Self);
end;
verhindern, das ein Datensatz eingefügt wird. Diese Variante verhindert so allerdings das Einfügen eines Datensatzes in dieses DataSets, egal woher die Einfügung stammt. Wenn Du also auf andere Art als über das Grid ein Hinzufügen von Datensätzen zulassen möchtest, müsstest Du entweder checken, wer da gerade einfügen möchte und nur im Falle des Grids den Fehler anzeigen, oder ein anderes Dataset zum einfügen benutzen. Dort müsstest Du dann nach dem Einfügen das Dataset des Grids aktualisieren.
Gruß