Entwickler-Ecke
Datenbanken - FireDAC Update durch TFDQuery
Stefan1286b - Sa 03.10.20 20:03
Titel: 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.
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 - So 04.10.20 00:24
Stefan1286b hat folgendes geschrieben : |
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:
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; |
Stefan1286b - So 04.10.20 11: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.
Blawen - So 04.10.20 13:20
:zustimm:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!