Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TDataset im editmodus durchsuchen (https://www.delphipraxis.net/203442-tdataset-im-editmodus-durchsuchen.html)

MyRealName 18. Feb 2020 08:33

AW: TDataset im editmodus durchsuchen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1457739)
Zitat:

Zitat von MyRealName (Beitrag 1457712)
Oder geht das über Cloned Cursor (mit denen habe ich nie gearbeitet)

Das wäre auch mein Ansatz, aber probiert habe ich das auch noch nicht.

Jo, da muss ich mal ein wenig mehr suchen dazu.

Zitat:

Zitat von Uwe Raabe (Beitrag 1457739)
Zitat:

Zitat von haentschman (Beitrag 1457734)
Zitat:

arbeite mit CachedUpdates, kann also nicht durch SQL in der DB nachfragen.
...das gilt nur die aktuelle Query. :stupid: Eine separate Query, vorzugsweise dynamisch erzeugt, holt sich die Menge für die Prüfung.

Eine solche Query berücksichtigt aber nicht die noch im Cache liegenden neuen Records.

Genau da liegt das Problem.

Das mit dem Index im TDataSet kann ich auchmal probieren, hört sich interessant an.

haentschman 18. Feb 2020 08:41

AW: TDataset im editmodus durchsuchen
 
Zitat:

Eine solche Query berücksichtigt aber nicht die noch im Cache liegenden neuen Records.
...ok, ok. Daran hatte ich nicht gedacht. :?

MyRealName 18. Feb 2020 09:50

AW: TDataset im editmodus durchsuchen
 
Hier die Lösung, welche ich im Endeffekt programmiert habe :

Code:
procedure TForm1.qryDataBeforePost(DataSet: TDataSet);
var
  ADataSet: TFDMemTable;
  bCanPost : Boolean;
  StartDate1, StartDate2, EndDate1, EndDate2 : TDate;
begin
  StartDate1 := qryDatagueltigab.AsDateTime;
  EndDate1 := qryDatagueltigbis.AsDateTime;
  bCanPost := True;
  ADataSet := TFDMemTable.Create(Self);
  try
    ADataSet.CloneCursor(qryData);
    ADataSet.First;
    while Not ADataSet.Eof do
    begin
      StartDate2 := ADataSet.FieldByName('gueltigab').AsDateTime;
      EndDate2 := ADataSet.FieldByName('gueltigbis').AsDateTime;
      if ((DateInRange(StartDate1, StartDate2, EndDate2)) Or (DateInRange(EndDate1, StartDate2, EndDate2))) then
      begin
        bCanPost := False;
        Break;
      end;
      ADataSet.Next;
    end;
  finally
    ADataSet.Free;
  end;
  if Not bCanPost then
  begin
    MessageDlg('Fehler im Gültigkeitszeitraum', mtWarning, [mbOk], 0);
    Abort;
  end;
end;
Ich hoffe, es hilft jemandem, der mal ein ähnliches Problem hat :)

himitsu 18. Feb 2020 10:44

AW: TDataset im editmodus durchsuchen
 
Alternativ ohne CachedUpdates und mit einer Transaktion um alles.
Da kannst dann mit dem zweiten Query in der selben Transaktion in der DB suchen, weil die ja schon alles kennt.

MyRealName 18. Feb 2020 11:11

AW: TDataset im editmodus durchsuchen
 
Zitat:

Zitat von himitsu (Beitrag 1457763)
Alternativ ohne CachedUpdates und mit einer Transaktion um alles.
Da kannst dann mit dem zweiten Query in der selben Transaktion in der DB suchen, weil die ja schon alles kennt.

Ja, aber wir haben halt diesen expliziten Speichern Button, an den ich mich klemmen muss. Und dann müsste ich entweder die Transaction (um beim Speichern dann das Commit zu machen) sehr lange offen lassen oder aber eben ChachedUpdates nutzen.

Es funktioniert ja jetzt, vielen Dank an alle :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Seite 2 von 2     12   

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