Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi UPDATE Funktion SQL mit Firebird (https://www.delphipraxis.net/132516-update-funktion-sql-mit-firebird.html)

Jens Hartmann 14. Apr 2009 14:10

Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS

UPDATE Funktion SQL mit Firebird
 
Hallo zusammen,

hab mal wieder eine Frage. Ich habe eine Form, in der ich diverse Daten konfiguriere. Diese Daten werden dann in einer Datenbank gespeichert.

Es gibt in dieser Datenbank zwar mehrere Spalten, aber immer nur mit einem Wert, da es nur Konfigurationseinstellungen sind.

Wenn ich diese Form aus meinem Programm Starte, lese ich beim Form Create die Daten Folgendermaßen ein...

Delphi-Quellcode:
procedure TMailSendenForm.FormCreate(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabe.Close;
  QryVorgabe.SQL.Text := 'SELECT E_MAIL_ANHANG, EIGENE_E_MAIL, EMPFAENGER_E_MAIL1,'+
                         'EMPFAENGER_E_MAIL2,SMTP_SERVER, BENUTZERNAME_E_MAIL,'+
                         'PASSWORT_E_MAIL FROM VORGABE';
  QryVorgabe.Open;

  FileEdit.Text := QryVorgabe.FieldByName('E_MAIL_ANHANG').AsString;
  FromMailEdit.Text := QryVorgabe.FieldByName('EIGENE_E_MAIL').AsString;
  AddMailEdit.Text := QryVorgabe.FieldByName('EMPFAENGER_E_MAIL1').AsString;
  AddMailEdit2.Text := QryVorgabe.FieldByName('EMPFAENGER_E_MAIL2').AsString;
  SMTPEdit.Text := QryVorgabe.FieldByName('SMTP_SERVER').AsString;
  UserEdit.Text := QryVorgabe.FieldByName('BENUTZERNAME_E_MAIL').AsString;
  PasswortEdit.Text := QryVorgabe.FieldByName('PASSWORT_E_MAIL').AsString;

  QryVorgabe.Close;
  ConPSConfig.Disconnect;

  if CheckBox1.Checked then
    begin
    SMTPEdit.Enabled := true;
    SMTPRadioGroup.Enabled := false;
    end
  else
    begin
      SMTPEdit.Enabled := false;
      SMTPRadioGroup.Enabled := true;
    end;
end;
Wenn ich jetzt auf dieser Form speicher(UPDATE), mach ich das so...

Delphi-Quellcode:
procedure TMailSendenForm.SpeichernButtonClick(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabe.Close;
  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET E_MAIL_ANHANG = :ANHANG';
  QryVorgabe.ParamByName('ANHANG').AsString := FileEdit.Text;
  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET EIGENE_E_MAIL = :SEMAIL';
  QryVorgabe.ParamByName('SEMAIL').AsString := FromMailEdit.Text;
  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET EMPFAENGER_E_MAIL1 = :EEMAIL1';
  QryVorgabe.ParamByName('EEMAIL1').AsString := AddMailEdit.Text;
  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET EMPFAENGER_E_MAIL2 = :EEMAIL2';
  QryVorgabe.ParamByName('EEMAIL2').AsString := AddMailEdit2.Text;
  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET SMTP_SERVER = :SMTP';
  QryVorgabe.ParamByName('SMTP').AsString := SMTPEdit.Text;
  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET BENUTZERNAME_E_MAIL = :BENUTZER';
  QryVorgabe.ParamByName('BENUTZER').AsString := UserEdit.Text;
  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET PASSWORT_E_MAIL = :PASSWORT';
  QryVorgabe.ParamByName('PASSWORT').AsString := PasswortEdit.Text;
  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;
  ShowMessage('Daten wurden gespeichert');
end;
Im Grunde, funktioniert alles. Ich denke aber, das ich das mit dem UPDATE wahrscheinlich einfacher machen kann. Die Create müsste eigendlich so OK.

Für Eure Ansicht dazu würde ich mich interessieren. Also schon mal danke.

Gruß Jens

DeddyH 14. Apr 2009 14:20

Re: UPDATE Funktion SQL mit Firebird
 
Du kannst das in einem Befehl zusammenfassen. Pseudo-SQL:
SQL-Code:
UPDATE Tabelle
SET Feld1 = Wert1, Feld2 = Wert2, Feld3 = Wert3,...
[WHERE Bedingung]

Jens Hartmann 14. Apr 2009 14:49

Re: UPDATE Funktion SQL mit Firebird
 
Danke DeddyH, :thumb:

funktioniert, hab ich jetzt so umgebaut.

Delphi-Quellcode:
procedure TMailSendenForm.SpeichernButtonClick(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabe.Close;
  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET E_MAIL_ANHANG = :ANHANG,'+
                         'EIGENE_E_MAIL = :SEMAIL, EMPFAENGER_E_MAIL1 = :EEMAIL1,'+
                         'EMPFAENGER_E_MAIL2 = :EEMAIL2, SMTP_SERVER = :SMTP,'+
                         'BENUTZERNAME_E_MAIL = :BENUTZER,PASSWORT_E_MAIL = :PASSWORT';

  QryVorgabe.ParamByName('ANHANG').AsString := FileEdit.Text;
  QryVorgabe.ParamByName('SEMAIL').AsString := FromMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL1').AsString := AddMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL2').AsString := AddMailEdit2.Text;
  QryVorgabe.ParamByName('SMTP').AsString := SMTPEdit.Text;
  QryVorgabe.ParamByName('BENUTZER').AsString := UserEdit.Text;
  QryVorgabe.ParamByName('PASSWORT').AsString := PasswortEdit.Text;

  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  ShowMessage('Daten wurden gespeichert');

  Close;
end;
Ist der Rest vom Code so OK, oder kann man noch was verbessern.

Gruß Jens

DeddyH 14. Apr 2009 14:51

Re: UPDATE Funktion SQL mit Firebird
 
Ich würde noch einen try-except-Block drumherumsetzen, so dass bei einer Exception automatisch ein Rollback erfolgt. Ansonsten ist das IMHO ok so.

Jens Hartmann 14. Apr 2009 14:59

Re: UPDATE Funktion SQL mit Firebird
 
Da fehlen mir jetzt mal wieder so ein bißchen die Kenntnisse.

ich hab mal sowas gemacht, allerdings per Copy and Paste hier aus dem Forum.

Delphi-Quellcode:
  begin
  QryMB256PLUS.SQL.Clear;
  QryMB256PLUS.SQL.Text := 'SELECT FIRST 4000 * FROM MB100 ORDER BY ID DESC';
  if not QryMB256PLUS.Active then begin
    iError := 0;
    Repeat
      Try
        QryMB256PLUS.Open;
      Except
        on e : Exception Do begin
          sMessage := e.Message;
          Inc(iError);
          Application.ProcessMessages;
          Sleep(1000);
        end;
      end;
    until QryMB256PLUS.Active or (iError > 5); // <- bitte ausprobieren, ob 5 reicht oder eventuell höher sein muss.
    if iError > 5 then begin
      ShowMessage('Die Datenbank konnte mit ' + IntToStr(iError) + ' Versuchen nicht geöffnet werden.'
      + #13 + 'Die letzte Fehlermeldung lautete: ' + sMessage);
      Application.Terminate; // <- oder sonstige Fehlerbehandlung.
    end;
  end;
wie müsste ich das den hier machen. Oder besser, wie mache ich das im allgemeinen. Sollte das ja dann wahrscheinlich immer nach einem INSERT oder UPDATE machen. Evtl. auch bei SELECT.

Gruß Jens

mkinzler 14. Apr 2009 15:01

Re: UPDATE Funktion SQL mit Firebird
 
Du verlierst so nur einen Vorteil von parametrisierten Abfragen, da du die Abfrage jedesmal setzt

Jens Hartmann 14. Apr 2009 16:38

Re: UPDATE Funktion SQL mit Firebird
 
Zitat:

Zitat von mkinzler
Du verlierst so nur einen Vorteil von parametrisierten Abfragen, da du die Abfrage jedesmal setzt


Wie verlier ich Vorteile?

mkinzler 14. Apr 2009 18:08

Re: UPDATE Funktion SQL mit Firebird
 
Weil du bei jedem Update wieder die Abfrage setzt. Diese wird dann an das DBMS übertragen, dort geparst, eine Zugriffsplan erstellt und anschliessend die Parameter übertragen und auf den Plan ausgeführt. Sendest du die Abfrage nur einmal, werden beim 2. Update nur noch die parameter übertragen.

Jens Hartmann 14. Apr 2009 19:34

Re: UPDATE Funktion SQL mit Firebird
 
Sorry Markus,

aber ich versteh noch nicht so ganz was Du meinst. Was der Vorteil ist, habe ich zwar verstanden, aber ich führe ja nur folgende Funktion als UPDATE aus.

Delphi-Quellcode:
procedure TMailSendenForm.SpeichernButtonClick(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabe.Close;
  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET E_MAIL_ANHANG = :ANHANG,'+ 
                         'EIGENE_E_MAIL = :SEMAIL, EMPFAENGER_E_MAIL1 = :EEMAIL1,'+ 
                         'EMPFAENGER_E_MAIL2 = :EEMAIL2, SMTP_SERVER = :SMTP,'+ 
                         'BENUTZERNAME_E_MAIL = :BENUTZER,PASSWORT_E_MAIL = :PASSWORT';

  QryVorgabe.ParamByName('ANHANG').AsString := FileEdit.Text;
  QryVorgabe.ParamByName('SEMAIL').AsString := FromMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL1').AsString := AddMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL2').AsString := AddMailEdit2.Text;
  QryVorgabe.ParamByName('SMTP').AsString := SMTPEdit.Text;
  QryVorgabe.ParamByName('BENUTZER').AsString := UserEdit.Text;
  QryVorgabe.ParamByName('PASSWORT').AsString := PasswortEdit.Text;

  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  ShowMessage('Daten wurden gespeichert');

  Close;
end;
Dabei ist es ja so, das diese Werte ja schon so in den EDIT-Feldern (fertig oder geändert) stehen, und daher führe ich ja keine Abfrage mehr durch.

Eine erneute Abfrage benötige ich ja nur im Hauptformular, wenn diese Daten Notwendig sind, oder wenn ich das Konfiguationsform erneut aufrufe, um wieder Änderungen durchzufüheren.

Gruß Jens

mkinzler 14. Apr 2009 19:37

Re: UPDATE Funktion SQL mit Firebird
 
Wenn du
Delphi-Quellcode:
QryVorgabe.SQL.Text := 'UPDATE ...';
einmailg z.B. am Anfang zuweist oder fest hinterlegst, brauchst du nur noch die parameter senden.

Jens Hartmann 14. Apr 2009 19:56

Re: UPDATE Funktion SQL mit Firebird
 
Soll also heißen,

wenn ich diesen UPDATE Befehl direkt im OI der Query zuweise, brauche ich nur noch die Parameter senden.
Allerdings, wenn ich die Parameter auch direkt der Query zuweise, kommt immer der Fehler, das die Parameter nicht bekannt sind.

mkinzler 14. Apr 2009 19:59

Re: UPDATE Funktion SQL mit Firebird
 
Zitat:

wenn ich diesen UPDATE Befehl direkt im OI der Query zuweise, brauche ich nur noch die Parameter senden.
Ja und auch beim manuellen Zuweisung. Zuweisen und .Prepare() aufrufen, dann wird die Abfrage an den SQL-Server geschickt der ihn dann vorbereitet ( Parsen usw).
Später werden nur noch die Parameter gesendet und auf die vorbereitete Abfrage angewendet. Ohne Prepare erfolgt die Vorbereitung beim 1. Ausführen.

Jens Hartmann 14. Apr 2009 21:20

Re: UPDATE Funktion SQL mit Firebird
 
Ich muss mal wirklich ganz dumm fragen, wie wende ich das an?

mkinzler 14. Apr 2009 21:23

Re: UPDATE Funktion SQL mit Firebird
 
Was?

Jens Hartmann 14. Apr 2009 21:30

Re: UPDATE Funktion SQL mit Firebird
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was du mir versuchst zu erklären.

Ich habe jetzt den UPDATE Befehl direkt in die Query eingetragen und dieser wurden scheinbar automatische aus dem UPDATE Befehl heraus die Params zugewiesen.

Dann habe ich den SQL Befehl in meiner Anweisung entfernt und es getestet. Leider mit dem Fehler im Anhang.


Delphi-Quellcode:
procedure TMailSendenForm.SpeichernButtonClick(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabe.Close;

  QryVorgabe.ParamByName('ANHANG').AsString := FileEdit.Text;
  QryVorgabe.ParamByName('SEMAIL').AsString := FromMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL1').AsString := AddMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL2').AsString := AddMailEdit2.Text;
  QryVorgabe.ParamByName('SMTP').AsString := SMTPEdit.Text;
  QryVorgabe.ParamByName('BENUTZER').AsString := UserEdit.Text;
  QryVorgabe.ParamByName('PASSWORT').AsString := PasswortEdit.Text;

  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  ShowMessage('Daten wurden gespeichert');

  Close;
end;
Gruß Jens

mkinzler 14. Apr 2009 21:35

Re: UPDATE Funktion SQL mit Firebird
 
Im OI siehst du die Parameter?

Jens Hartmann 14. Apr 2009 21:41

Re: UPDATE Funktion SQL mit Firebird
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ja, und die weist mir der OI scheinbar auch allein zu. Lösche ich den SQL String im OI, werden die Params auch automatisch wieder entfernt.

Führe ich erst die Funktion ÜBERNEHMEN aus, geht danach auch SPEICHERN. Der Unterschied der zwei Funktion liegt lediglich daran, das in der einen noch der SQL Text vorhanden ist, und in der anderen, eigendlich der aus dem OI genutzt werden soll.


Delphi-Quellcode:
procedure TMailSendenForm.UebernehmenButtonClick(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabe.Close;
  QryVorgabe.SQL.Text := 'UPDATE VORGABE SET E_MAIL_ANHANG = :ANHANG,'+
                         'EIGENE_E_MAIL = :SEMAIL, EMPFAENGER_E_MAIL1 = :EEMAIL1,'+
                         'EMPFAENGER_E_MAIL2 = :EEMAIL2, SMTP_SERVER = :SMTP,'+
                         'BENUTZERNAME_E_MAIL = :BENUTZER,PASSWORT_E_MAIL = :PASSWORT';

  QryVorgabe.ParamByName('ANHANG').AsString := FileEdit.Text;
  QryVorgabe.ParamByName('SEMAIL').AsString := FromMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL1').AsString := AddMailEdit.Text;
  QryVorgabe.ParamByName('EEMAIL2').AsString := AddMailEdit2.Text;
  QryVorgabe.ParamByName('SMTP').AsString := SMTPEdit.Text;
  QryVorgabe.ParamByName('BENUTZER').AsString := UserEdit.Text;
  QryVorgabe.ParamByName('PASSWORT').AsString := PasswortEdit.Text;

  QryVorgabe.ExecSQL;
  ConPSConfig.Commit;

  ShowMessage('Daten wurden gespeichert');
end;

mkinzler 15. Apr 2009 05:27

Re: UPDATE Funktion SQL mit Firebird
 
Und du verwendest die Komponente zwischenzeitlich auch für keine anderen Abfragen?

Jens Hartmann 15. Apr 2009 06:21

Re: UPDATE Funktion SQL mit Firebird
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein,eigendlich nicht.

Ich häng mal das Unit an.

Das einzige was vorher passiert, ich greife beim Programmstart, allerdings mit einer anderen Connection und auch einer anderen Query Komponente auf die Datenbank zu, um in meinem Hauptformular diese Daten nutzen zu können.

Übrigens, in der jetzt angehangen Unit, ist der UPDATE Befehl, beim Spiechern wieder vorhanden, damit ich diese Funktion habe.

Gruß Jens

mkinzler 15. Apr 2009 06:33

Re: UPDATE Funktion SQL mit Firebird
 
Du verwendest die Querykomponente wie vermutet mehrfach. Verwende verschiedene dafür.

Jens Hartmann 15. Apr 2009 06:42

Re: UPDATE Funktion SQL mit Firebird
 
Du hast recht,

ich habe es schon bemerkt, ich nutze sie auch für´s SELECT. Manchmal dauert es eindfach etwas länger. Muss ich für die UPDATE Funktionen auch verschiedene nutzen?


Gruß Jens

mkinzler 15. Apr 2009 06:58

Re: UPDATE Funktion SQL mit Firebird
 
Sobald du der Eigenschaft .SQL etwas zuweist, werden die Parameter usw. gelöscht

Jens Hartmann 15. Apr 2009 07:10

Re: UPDATE Funktion SQL mit Firebird
 
Ja, das habe ich ja dann jetzt hinbekommen. Also entweder immer zuweisen, oder besser wenn Zuweisung Notwendig, eigene Query.

Jetzt habe ich noch drei Fragen dazu,

1. Wie kann ich ein MEMO in diese Datenbank einfügen. Auch als VARCHAR oder gibt es da was anders.
2. Muss man auch in gewissen Situationen verschieden CONNECTION Kompo´s nehmen.

Außerdem...


Zitat:

Zitat von DeddyH
Ich würde noch einen try-except-Block drumherumsetzen, so dass bei einer Exception automatisch ein Rollback erfolgt. Ansonsten ist das IMHO ok so.

wie geht so was richtig ?

Gruß Jens

mkinzler 15. Apr 2009 07:26

Re: UPDATE Funktion SQL mit Firebird
 
Zitat:

1. Wie kann ich ein MEMO in diese Datenbank einfügen. Auch als VARCHAR oder gibt es da was anders.
(Text-)BLOB

Jens Hartmann 15. Apr 2009 07:44

Re: UPDATE Funktion SQL mit Firebird
 
Das ist genau das was ich in irgendeiner Anleitung gelesen habe. Leider kann ich diesen VariablenTyp in IBExpert nicht finden.
Da gibt es nur CHAR oder VARCHAR

mkinzler 15. Apr 2009 08:08

Re: UPDATE Funktion SQL mit Firebird
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mit gibt es den Typ

Jens Hartmann 15. Apr 2009 08:18

Re: UPDATE Funktion SQL mit Firebird
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir auch, aber nur wenn ich ein neues Feld anlege. Da ich es vorher als VARCHAR hatte, geht das nachträglich nicht mehr. Seltsam, weil ich kann ja auch auf integer umstellen. Muss mit der Größe zu tun haben.

mkinzler 15. Apr 2009 08:21

Re: UPDATE Funktion SQL mit Firebird
 
Das kann sein, denn Blobs sind keine normalen Felder. Leg mal ein neues Feld an

Jens Hartmann 15. Apr 2009 08:49

Re: UPDATE Funktion SQL mit Firebird
 
Ja, sag ich ja.

Ich habe jetzt einfach eine neue Domäne angelegt, und damit geht es auch.

Jens Hartmann 15. Apr 2009 11:08

Re: UPDATE Funktion SQL mit Firebird
 
So, habe das mit dem try/Except Block eventuell doch alleine hinbekommen.

Ist das so OK. :gruebel:

Delphi-Quellcode:
procedure TMailSendenForm.SpeichernButtonClick(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabeUPDATE.Close;

  QryVorgabeUPDATE.ParamByName('VORTEXT').AsString := MemoVortext.Text;
  QryVorgabeUPDATE.ParamByName('ANHANG').AsString := FileEdit.Text;
  QryVorgabeUPDATE.ParamByName('SEMAIL').AsString := FromMailEdit.Text;
  QryVorgabeUPDATE.ParamByName('EEMAIL1').AsString := AddMailEdit.Text;
  QryVorgabeUPDATE.ParamByName('EEMAIL2').AsString := AddMailEdit2.Text;
  QryVorgabeUPDATE.ParamByName('SMTP').AsString := SMTPEdit.Text;
  QryVorgabeUPDATE.ParamByName('BENUTZER').AsString := UserEdit.Text;
  QryVorgabeUPDATE.ParamByName('PASSWORT').AsString := PasswortEdit.Text;

  QryVorgabeUPDATE.ExecSQL;

  Try
    ConPSConfig.Commit;
  Except
    ConPSConfig.Rollback;
    ShowMessage('Daten wurden nicht gespeichert');
  end;

  ShowMessage('Daten wurden gespeichert');

  Close;
end;
Gruß Jens

DeddyH 15. Apr 2009 11:11

Re: UPDATE Funktion SQL mit Firebird
 
Ich würde das eher so machen:
Delphi-Quellcode:
procedure TMailSendenForm.SpeichernButtonClick(Sender: TObject);
begin
  ConPSConfig.Connect;
  QryVorgabeUPDATE.Close;

  QryVorgabeUPDATE.ParamByName('VORTEXT').AsString := MemoVortext.Text;
  QryVorgabeUPDATE.ParamByName('ANHANG').AsString := FileEdit.Text;
  QryVorgabeUPDATE.ParamByName('SEMAIL').AsString := FromMailEdit.Text;
  QryVorgabeUPDATE.ParamByName('EEMAIL1').AsString := AddMailEdit.Text;
  QryVorgabeUPDATE.ParamByName('EEMAIL2').AsString := AddMailEdit2.Text;
  QryVorgabeUPDATE.ParamByName('SMTP').AsString := SMTPEdit.Text;
  QryVorgabeUPDATE.ParamByName('BENUTZER').AsString := UserEdit.Text;
  QryVorgabeUPDATE.ParamByName('PASSWORT').AsString := PasswortEdit.Text;

  Try
    QryVorgabeUPDATE.ExecSQL;
    ConPSConfig.Commit;
    ShowMessage('Daten wurden gespeichert');
  Except
    ConPSConfig.Rollback;
    ShowMessage('Daten wurden nicht gespeichert');
  end;

  Close;
end;

Jens Hartmann 15. Apr 2009 11:23

Re: UPDATE Funktion SQL mit Firebird
 
Danke,

klar, sonst würde Daten gespeichert ja immer kommen, habe ich gerade schon geändert. Aber Grundsätlich ist das richtig, und ich muss nichts weiteres machen. So könnte ich das jetzt bei jedem DatenBlock machen, und bekommen dann somit keiner Exeption mehr, sondern die Meldung das nicht gespeichert worden ist.

Heißt aber auch, wenn ich das beim SELECT mache, könnte ich eine Expetion Behandlung schreiben, wenn die Daten nicht gelesen werden konnten.

Also so...

Delphi-Quellcode:

QryVorgabeCreate.SQL.Text := 'SELECT * FROM VORGABE';

Try
  QryVorgabeCreate.open;
Except
  ShowMessage('Daten konnten nicht gelesen werden');
  QryVorgabeCreate.close;
end;
Gruß Jens

DeddyH 15. Apr 2009 11:29

Re: UPDATE Funktion SQL mit Firebird
 
Kann man so machen, allerdings weiß man so nicht, was da schiefgegangen ist. Vielleicht besser in der Art:
Delphi-Quellcode:
try
  //Code
except
  on E: Exception do
    begin
      ShowMessage(Format('Beim Lesen ist ein Fehler aufgetreten. Meldung:%s%s',[sLineBreak,E.Message]));
      //weiterer Code
    end;
end;

Jens Hartmann 15. Apr 2009 12:04

Re: UPDATE Funktion SQL mit Firebird
 
Danke,

das hat mir jetzt echt gehofen. Ich weiß zwar nicht woran es gelegen hat, aber jetzt habe ich das endlich komplett verstanden. Jetzt weiß ich auch wie das mit der Repeat/Until Schleife in der Exeptionbehandlung aus Post '#5' genau gemacht wird.

Man, manchmal glaubt man was zu verstehen, und hat es doch nicht verstanden. Jetzt aber und vor allem auch so, das ich es woanders umsetzten kann.

Also nochmal herzlichen Dank an alle. Der Groschen ist gefallen. :thumb:

Gruß Jens :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz