Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi automatisches post bei scroll verhindern (https://www.delphipraxis.net/74773-automatisches-post-bei-scroll-verhindern.html)

sancho1980 8. Aug 2006 14:58

Datenbank: firebird • Version: 1.5 • Zugriff über: fibplus

automatisches post bei scroll verhindern
 
hi

habe folgendes problem: wenn ich in meinem prog einen datensatz ändere (also wenn in edit-modus gegangen wird) und ich - ohne explizit mit dem navigator zu posten - im dataset scrolle, dann wird automatisch die änderung die ich gemacht habe gepostet. das will ich aber nicht...die änderung soll dann gecancelt werden.

hatte mir batürlich gedacht im handler des beforescroll-ereignisses einfach folgendes einzubauen:

Delphi-Quellcode:
procedure TDataModule1.DataSetDicEntriesBeforeScroll(DataSet: TDataSet);
begin
  try
    Dataset.Cancel();
  except
  end;
end;
aber der post findet schon statt bevor dieses ereignis abgefeuert wird, und da isses ja schon zu spät :-(

marabu 8. Aug 2006 15:39

Re: automatisches post bei scroll verhindern
 
Hallo Martin,

du kannst das Speichern im Ereignis OnBeforePost() durch eine silent exception (Abort) verhindern. Allerdings solltest du dann ein Flag einführen, welches dir noch ein gewolltes Speichern erlaubt:

Delphi-Quellcode:
procedure TDataModule1.DataSetDicEntriesBeforePost(DataSet: TDataSet);
begin
  with DataSet do
    if Tag = 0 then
      Cancel();
end;
Grüße vom marabu

sancho1980 8. Aug 2006 19:06

Re: automatisches post bei scroll verhindern
 
Zitat:

Zitat von marabu
Hallo Martin,

du kannst das Speichern im Ereignis OnBeforePost() durch eine silent exception (Abort) verhindern. Allerdings solltest du dann ein Flag einführen, welches dir noch ein gewolltes Speichern erlaubt:

Delphi-Quellcode:
procedure TDataModule1.DataSetDicEntriesBeforePost(DataSet: TDataSet);
begin
  with DataSet do
    if Tag = 0 then
      Cancel();
end;
Grüße vom marabu

OnBeforePost..das Ereignis gibt es leider nicht :-( Gibt OnPostError, aber das wohl was anderes :(

Hansa 8. Aug 2006 19:16

Re: automatisches post bei scroll verhindern
 
Du mußt Dir die Dokumentation von FIBplus unbedingt genauer ansehen ! Es gibt zum Bsp. gerade mit dem Scrollen ein Zeitintervall, das man einstellen kann. Da geht es allerdings um das "Nachladen" von Detail-Datensätzen. Könnte trotzdem in dem Fall sogar hilfreich sein. So viele Tutos, wie die mittlerweile haben sind echt sehr selten zu finden !

sancho1980 8. Aug 2006 19:23

Re: automatisches post bei scroll verhindern
 
kunststück, nach den dokus hatt ich schon mehrmals gesucht...in meinem fib-verzeichnis gibs lediglich die verzeichnisse examples, source und tools. und in der readme steht auch nix weltbewegendes.
bin ich zu blöd? sag jetz bitte nicht google, da hab ichs natürlich auch schon versucht?
echt? da gibs viele tutos zu? wo?

Hansa 8. Aug 2006 21:15

Re: automatisches post bei scroll verhindern
 
Hechel, was ? :mrgreen: Neben Google gibt es viel interessantere Homepages, z.B. die von Devrace, dem Hersteller von FIBplus. :zwinker: Und dort sind zig Downloads von Artikeln zu finden. Bei mir liegen bestimmt 200 ausgedruckte Seiten rum. Ca. das 10fache ist noch gezippt oder nur kurz überflogen. Den Rest habe ich noch nicht mal gesichtet.

Falls das hier doch stimmen sollte :

Zitat:

Zitat von sancho1980
bin ich zu blöd?

www.devrace.com

:duck:

sancho1980 9. Aug 2006 21:17

Re: automatisches post bei scroll verhindern
 
hmmm
okay, die hilfe hab ich gefunden, tutos immer noch net
naja, trotzdem hab ich immer noch keine lösung für mein problem gefunden :-(
kennt sich da echt keiner aus?

marabu 10. Aug 2006 14:54

Re: automatisches post bei scroll verhindern
 
Hallo Martin,

ich bleibe bei meinem Vorschlag von neulich - siehe Beitrag #2. Deine Komponente DatasetDicEntries (TFIBDataSet?) erbt laut Produktdokumentation (fibplus6_45) das Ereignis OnBeforePost() von TDataSet. Warum findest du dieses Ereignis nicht im Object Inspector?

Grüße vom marabu

sancho1980 10. Aug 2006 15:50

Re: automatisches post bei scroll verhindern
 
reden wir von der gleichen sache?

Zitat:

In TFIBDataSet

AfterCancel
AfterClose
AfterDelete
AfterEdit
AfterInsert
AfterOpen
AfterPost
AfterRefresh
AfterScroll
BeforeCancel
BeforeClose

BeforeDelete
BeforeEdit
BeforeEndUpdateTransaction
BeforeInsert
BeforeOpen
BeforePost
BeforeRefresh
BeforeScroll

Derived from TFIBCustomDataSet
AfterEndTransaction

AfterEndUpdateTransaction
AfterFetchRecord
AfterStartTransaction
AfterStartUpdateTransaction
BeforeEndTransaction

BeforeFetchRecord
BeforeStartTransaction
BeforeStartUpdateTransaction
DatabaseDisconnected
DatabaseDisconnecting

DatabaseFree
OnCompareFieldValues
OnDisableControls
OnEnableControls
OnEndScroll
OnFieldChange

OnFillClientBlob
OnGetRecordError
OnUpdateError
OnUpdateRecord
TransactionEnded
TransactionEnding

TransactionFree

Derived from TDataSet
OnCalcFields
OnDeleteError
OnEditError
OnFilterRecord
OnNewRecord
OnPostError
Aber die Idee mit dem Flag war gut. Was ich momentan gemacht habe, ist im BeforeAction des Navigators folgenden Code einzuführen:

Delphi-Quellcode:
procedure TWBWin.DBNavigator4BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button = nbPost then
    TDataModule1(self.Owner).DicentriesMayPost := true;
end;
Das Posten sieht dann folgendermaßen aus:

Delphi-Quellcode:
procedure TDataModule1.DataSetDicEntriesBeforePost(DataSet: TDataSet);
begin
      if (not self.DicentriesMayPost) then
      begin
        self.DataSetDicEntries.Cancel();
        abort();
      end
      else
        self.DicentriesMayPost := false;
end;
Der einzige Nachteil, den das hat, ist natürlich, dass wenn ich durch das Dataset scrolle während es im Edit-Mode ist, dann wird einfach nurgecancelt und dann abgebrochen (also der Pointer bleibt auf dem Eintrag); ich muss dann noch ein zweites Mal scrollen, damit's dann wirklich zum nächsten oder vorherigen Eintrag geht... :|

marabu 10. Aug 2006 16:33

Re: automatisches post bei scroll verhindern
 
Zitat:

Zitat von sancho1980
reden wir von der gleichen sache?

Aber sicher doch. Die von dir zitierte Auflistung gehorcht eigenen Gesetzen - OnBeforePost() wird definitiv von TDataSet eingeführt.

Hättest du nur gleich den DBNavigator erwähnt. Wenn der record pointer ausschließlich über diesen Navigator bewegt wird, dann kannst du sogar ohne Flag arbeiten:

Delphi-Quellcode:
procedure TDemoForm.DBNavigatorBeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  with (Sender as TDBNavigator).DataSource.DataSet do
    if (Button in [nbFirst, nbLast, nbPrior, nbNext])
    and (State <> dsBrowse) then
      Cancel;
end;
Getippt und nicht getestet.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz