Autor Beitrag
Stefan1286b
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 03.10.20 19:03 
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.

ausblenden Delphi-Quelltext
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:
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;
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Sa 03.10.20 23:24 
user profile iconStefan1286b hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
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;
Firebird kenne ich von der praktischen Anwendung her nicht, insofern kann ich diesbezüglich keine qualifizierte Antwort geben.

Was mir pers. auffällt, bzw. was ich (unter MySQL) anders machen würde:
- Parameter einsetzen
- Das ganze als Update umsetzen

Sinngemäss so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
quSpeichern.SQL.Text := 'UPDATE MITARBEITER SET                ' +
                        'GUTHABEN             = :Guthaben      ' +
                        'WHERE MITARBEITER_ID = :Mitarbeiter_ID';
quSpeichern.ParamByName('GUTHABEN').AsFloat         := rGuthaben;
quSpeichern.ParamByName('MITARBEITER_ID').AsInteger := iMitarbeiter_ID;
quSpeichern.Execute;

_________________
Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro ;-)
Stefan1286b Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 04.10.20 10:54 
Nicht Firebird sondern FireDAC anstatt von ADO.
Datenbank ist MSSQL
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.
Stefan1286b Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 04.10.20 11:55 
Ich habe das Problem gelöst:

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

Gelesen in:
FireDAC und Fehler: Verbindung mit "hstmt" belegt

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 04.10.20 12:20 
user profile iconStefan1286b hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe das Problem gelöst:

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

Gelesen in:
FireDAC und Fehler: Verbindung mit "hstmt" belegt
:zustimm:

_________________
Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro ;-)