Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FireDAC Update durch TFDQuery (https://www.delphipraxis.net/205669-firedac-update-durch-tfdquery.html)

Stefan1286b 4. Okt 2020 11:09

Datenbank: MSSQL • Version: 2017 • Zugriff über: FireDAC

FireDAC Update durch TFDQuery
 
Wenn Ich in Delphi (FMX) FireDAC eine Update einer Tabelle ausführen möchte Friert das ganze Programm ein. Es geht nichts mehr. Ich muss es killen.
Wenn ich eine andere Query welche die selbe Tabelle geöffnet hat auf Active := false setze funktioniert es. Die andere Query ist ReadOnly, aber das mach keinen Unterschied.
LockMode ist überall auf lmNone gestellt und sollte auch nur dann ein Problem sein, wenn Ich in einem anderen Query einen Record bearbeite, dass passiert aber nirgendwo.
In ADO war das noch nie ein Problem.

Code:
procedure TFrmMain.PopupMenuProjekteClick(Sender: TObject);
var
  q: TFDQuery;
begin
  if Sender.ClassNameIs('TMenuItem') and
    (FDQProjekte.RecordCount > GridProjekte.Selected) then
    with Sender as TMenuItem do
    begin
      q := TFDQuery.Create(Self);
      try
        FDQProjekte.RecNo := GridProjekte.Selected + 1;
        q.Connection := DoppData.FDConnection;
        q.SQL.Text := 'SELECT id,Status from dbo.UserProjekt where Id=' +
          FDQProjekteId.AsString;
        q.Active := true;
        q.First;
        q.Edit;
        q.FieldByName('Status').AsInteger :=Tag;
        q.Post;
        q.Active := false;
      finally
        q.free;
      end;
    end;
  UpdateFilter(true);
end;
Ja ich könnte es auch mit UPDATE lösen. Aber nächste Schritt sind Änderungen mit Steuerelementen. Dort wird dann auf jedenfall mit TFDQuery gearbeitet und dass Problem ist wieder da. Bei ADO ging es ohne Probleme.

Ich hatte es gestern schon bei entwickler-ecke.de gepostet (Da Delphi-Praxis gestern nicht erreichbar war.) da konnte mir aber noch nicht geholfen werden.
https://entwickler-ecke.de/viewtopic.php?p=718261#

blawen 4. Okt 2020 12:46

AW: FireDAC Update durch TFDQuery
 
Zitat:

Zitat von Stefan1286b (Beitrag 1474834)
Ich hatte es gestern schon bei entwickler-ecke.de gepostet (Da Delphi-Praxis gestern nicht erreichbar war.) da konnte mir aber noch nicht geholfen werden.
https://entwickler-ecke.de/viewtopic.php?p=718261#

Das Problem ist gelöst
Zitat:

Zitat von Stefan1286b
Ich habe das Problem gelöst:

In der TFDConnection muss in FetchOptions CursorKind := ckStatic sein.

Gelesen in:
https://www.delphipraxis.net/190094-...mt-belegt.html


Stefan1286b 4. Okt 2020 16:21

AW: FireDAC Update durch TFDQuery
 
Ich wollte auch gerade schreiben, dass das. Problem gelöst ist. Ist mir aber jemand zuvor gekommen. :)

haentschman 5. Okt 2020 05:40

AW: FireDAC Update durch TFDQuery
 
Moin...:P
Auch wenn ich mich als alter Meckersack anhören sollte...:oops:

Man sollte:
1. kein WITH mehr verwenden! :warn:
2. die Query nicht mit einem Owner erzeugen aber mit Free wieder freigeben
Zitat:

q := TFDQuery.Create(Self); q.free;
3. kein SQL Statement ohne Parameter schreiben :kotz:
Zitat:

'SELECT id,Status from dbo.UserProjekt where Id=' + FDQProjekteId.AsString;
4. nicht Logik mit GUI mischen (die GUI sollte die Queries nicht kennen) Datenbank "Operationen" gehören in die Logik, nicht in die GUI.

...jetzt geht es mir besser. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.

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