Inhalt aus TEdit in Datenbank zurückschreiben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von DL3AD »

Hallo,

ich habe aus einem DBGrid per DblClick eine TEdit befüllt.

Code: Alles auswählen

 
//Daten in ein Editorfeld übertragen
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
   Edit2.Text:= ZQuery1.FieldByName('Nachname').AsString;
//Edit2.Text:= DataSource1.DataSet.FieldByName('Nachname').AsString;
end;           
 

Beide Varianten funktionieren.

Nachdem ich eine Änderung im TEdit gemacht habe möchte ich den geänderten Inhalt von TEdit zurück in die Datenbank schreiben.
Wie macht man dass ? - bzw welche Möglichkeiten gibt es.

Gruß Frank

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von wp_xyz »

Falls ZQuery1 schreibbar ist, musst du den Dataset in den Edit-Zustand versetzen, den neuen Wert ins Feld schreiben und Post aufrufen:

Code: Alles auswählen

  ZQuery1.Edit;
  ZQuery1.FieldByName('Nachname').AsString := Edit1.Text;
  ZQuery1.Post;

Andernfalls musst du ein UpdateSQL erzeugen und ausführen: http://wiki.freepascal.org/Working_With ... parameters), http://forum.lazarus.freepascal.org/ind ... ic=10086.0

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von DL3AD »

Hallo wp_xyz,

vielen Dank - so funktioniert es 8)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von wp_xyz »

Übrigens: Du kannst auch statt TEdit ein TDBEdit nehmen. Dann geht das automatisch.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von DL3AD »

... ja, das mit TDBEdit ist mir bekannt - ich wollte die Änderungen in der DB aber erst nach einer Bestätigung schreiben.

... oder gibt es eine Möglichkeit dem TDBEdit mitzuteilen dass est nach einer Freigabe in dei Datenbank geschrieben werden soll ?

Ich habe ne ganze Menge an Eingabefelder (26Stück) erst wenn ich alles ausgefüllt habe dann soll per Button die Änderung in die DB geschrieben werden.
Wenn ich mit den TDB Komponenten arbeiten könnte dann erspare ich mit einen Haufen Programmiererei.

Gruß Frank

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von wp_xyz »

Es gibt doch noch die Transactions: Vor dem Beginn der Änderungen eine Transaction starten und nach dem Ausfüllen der 256 DBEdit-Felder Commit aufrufen (bzw. Rollback, falls es sich der User anders überlegt hat).

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von DL3AD »

... Transactions kann ich nicht verwenden ich benutze die ZEOS Komponenten - gibt es da was ähnliches ?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von wp_xyz »

Bin eigentlich kein großer User von ZEOS, aber das steht im Source-Code:

Code: Alles auswählen

type
  TZConnection = class(TZAbstractConnection)
  [...]
 
  TZAbstractConnection = class(TComponent)
  [...]
  public
    procedure StartTransaction; virtual;
    procedure Commit; virtual;
    procedure Rollback; virtual;
    procedure PrepareTransaction(const transactionid: string); virtual;
    procedure CommitPrepared(const transactionid: string); virtual;
    procedure RollbackPrepared(const transactionid: string); virtual;
    property InTransaction: Boolean read GetInTransaction;
  published
    [...]
    property AutoCommit: Boolean read FAutoCommit write SetAutoCommit
      default True;
    property OnCommit: TNotifyEvent read FOnCommit write FOnCommit;
    property OnRollback: TNotifyEvent read FOnRollback write FOnRollback;
    property OnStartTransaction: TNotifyEvent
      read FOnStartTransaction write FOnStartTransaction;
  end;

Dazu siehe auch: http://zeoslib.sourceforge.net/viewtopic.php?t=3801

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von DL3AD »

... OK nun ist es klar - Test hat auch Funktioniert DANKE

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Inhalt aus TEdit in Datenbank zurückschreiben

Beitrag von Soner »

Für diesen zweck gibt es die Eigenschft TDataSet.CachedUpdates.

Code: Alles auswählen

//Bei Erstellung von TQuery:
  ZQuery1.CachedUpdates:=true;
 


Code: Alles auswählen

 
  //bei Speichern
  if ZQuery1.UpdatesPending then
    case MessageDlg('Möchten Sie Änderungen speichern?', mtWarning, [mbYes, mbNo, mbCancel],0) of
      mrYes: ZQuery1.ApplyUpdates;
      mrNo : ZQuery1.CancelUpdates;
      //mrCancel: nichts machen, der Benutzer will weiterschreiben
    end;
 

Antworten