Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Speichern in die Datenbank und nicht nur ins Grid (https://www.delphipraxis.net/52251-speichern-die-datenbank-und-nicht-nur-ins-grid.html)

thomas29h2000 26. Aug 2005 05:48

Datenbank: Mircosoft SQL Server • Zugriff über: ODBC

Speichern in die Datenbank und nicht nur ins Grid
 
Hi Leute,

ich habe ein DBEditFeld in dem ich Daten(zumindes im DBGrid) ändere aber es speichert die daten erst wenn ich im DBgrid die entsprechende Zeile verlasse. wie kann ich machen das beim OnExit Event des DBEditFeldes die Daten sofort in der Datenbank gespeichert sind quasie wie wenn ich beim DBNavigator auf den Speicher (Post)-Button drücke.

Ich hab mir den Quelltext dazu angeschaut :cyclops: aber da ich noch ein neuling :gruebel: :coder2: bin ab ich nicht viel :?: (eingentlich garnichts :oops: ) verstanden.

Ich weis das ist ein klacks für euch :dp: , aber ich komme nicht weiter also danke schonmal für eure hilfe.

mfg
thomas

Sharky 26. Aug 2005 05:55

Re: Speichern in die Datenbank und nicht nur ins Grid
 
Hai Thomas,

Du kannst im Delphi-Referenz durchsuchenOnExit deines Edits prüfen ob sich dein TDataSet im Editmodus befindet und wenn ja ein Delphi-Referenz durchsuchen.Post durchführen. Zum Beispiel:
Delphi-Quellcode:
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
  if Query1.State = dsEdit then
  begin
     Query1.Post;
  end;
end;

thomas29h2000 26. Aug 2005 07:09

Re: Speichern in die Datenbank und nicht nur ins Grid
 
Hi,
erstmal danke für die schnelle antwort, aber leider is das nicht ganz was ich brauche, da es für eine Komponente ist in der ich keinen Query habe. ich bin wie beim DBEdit über DataSource und DataField mit der datenbank verbunden und wenn ich den DBNavigator benutzt und auf speichern klicke wird es auch in die DB eingetragen. Nun würd ich halt nur diese funktion auf OnExit meines Feldes ausführen.

mfg
Thomas

Bernhard Geyer 26. Aug 2005 07:14

Re: Speichern in die Datenbank und nicht nur ins Grid
 
Kein Problem. Such dir halt die Dataset-Komponente die mit dem DBEdit verbunden ist:
Delphi-Quellcode:
procedure TForm1.DBEdit1Exit(Sender: TObject);
var
  Query1: TDataset;
begin
  Query1 := DBEdit1.DataSource.Dataset;

  if Query1.State = dsEdit then
  begin
     Query1.Post;
  end;
end;

Sharky 26. Aug 2005 07:16

Re: Speichern in die Datenbank und nicht nur ins Grid
 
Zitat:

Zitat von thomas29h2000
... in der ich keinen Query habe.

Hai Thomas,

dann lasse das Query doch einfach weg *g*
Delphi-Quellcode:
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
  with (Sender as TDBEdit) do
  begin
    if Assigned(DataSource) then
    begin
      with DataSource.DataSet do
      begin
        if (State = dsEdit) then
        begin
          Post;
        end;
      end;
    end;
  end;
end;
Wenn es eine eigene Komponente ist dann natürlich Sender durch self ersetzen und das Typecasting (Sender as .. ) weglassen.

thomas29h2000 26. Aug 2005 07:44

Re: Speichern in die Datenbank und nicht nur ins Grid
 
Hi Leute,

Ihr seit ja woll total genial :thumb: das hat super geklapt. Danke nochmal. :dp:

:hello: *Freudentanz* :hello:

mfg
Thomas

Thanatos81 26. Aug 2005 08:02

Re: Speichern in die Datenbank und nicht nur ins Grid
 
Wobei du dir auch einige Zeile sparen kannst. Ich würde z.B. kein with ... do machen, wenns nur um ein, zwei Befehle geht:
Delphi-Quellcode:
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
  with (Sender as TDBEdit) do
  begin
    if Assigned(DataSource) then
    begin
      if DataSource.DataSet.State = dsEdit
        then DataSource.DataSet.Post;
    end;
  end;
end;
Die ganzen begin ... end Blöcke könnten im Prinzip auch wegfallen, sind für die Übersicht aber nicht unpraktisch.

Das soll jetzt keine Kritik an sharky sein, jeder hat seinen eigenen Programmierstil!

Ich wollte das nur aufzeigen, da thomas29h2000 ja selber sagte, er hätte noch nicht so viel Ahnung. Vielleicht hilft das ganze ja noch beim Verständnis ;-)

Schönen Gruß,


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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