AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi UPDATE Funktion SQL mit Firebird
Thema durchsuchen
Ansicht
Themen-Optionen

UPDATE Funktion SQL mit Firebird

Ein Thema von Jens Hartmann · begonnen am 14. Apr 2009 · letzter Beitrag vom 15. Apr 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 15:10
Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 15:20
Du kannst das in einem Befehl zusammenfassen. Pseudo-SQL:
SQL-Code:
UPDATE Tabelle
SET Feld1 = Wert1, Feld2 = Wert2, Feld3 = Wert3,...
[WHERE Bedingung]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#3

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 15:49
Danke DeddyH,

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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 15:51
Ich würde noch einen try-except-Block drumherumsetzen, so dass bei einer Exception automatisch ein Rollback erfolgt. Ansonsten ist das IMHO ok so.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 15:59
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 16:01
Du verlierst so nur einen Vorteil von parametrisierten Abfragen, da du die Abfrage jedesmal setzt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#7

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 17:38
Zitat von mkinzler:
Du verlierst so nur einen Vorteil von parametrisierten Abfragen, da du die Abfrage jedesmal setzt

Wie verlier ich Vorteile?
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 19:08
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 20:34
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: UPDATE Funktion SQL mit Firebird

  Alt 14. Apr 2009, 20:37
Wenn du QryVorgabe.SQL.Text := 'UPDATE ...'; einmailg z.B. am Anfang zuweist oder fest hinterlegst, brauchst du nur noch die parameter senden.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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