![]() |
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:
Wenn ich jetzt auf dieser Form speicher(UPDATE), mach ich das so...
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;
Delphi-Quellcode:
Im Grunde, funktioniert alles. Ich denke aber, das ich das mit dem UPDATE wahrscheinlich einfacher machen kann. Die Create müsste eigendlich so OK.
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; Für Eure Ansicht dazu würde ich mich interessieren. Also schon mal danke. Gruß Jens |
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] |
Re: UPDATE Funktion SQL mit Firebird
Danke DeddyH, :thumb:
funktioniert, hab ich jetzt so umgebaut.
Delphi-Quellcode:
Ist der Rest vom Code so OK, oder kann man noch was verbessern.
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; Gruß Jens |
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.
|
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:
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.
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; Gruß Jens |
Re: UPDATE Funktion SQL mit Firebird
Du verlierst so nur einen Vorteil von parametrisierten Abfragen, da du die Abfrage jedesmal setzt
|
Re: UPDATE Funktion SQL mit Firebird
Zitat:
Wie verlier ich Vorteile? |
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.
|
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:
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.
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; 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 |
Re: UPDATE Funktion SQL mit Firebird
Wenn du
Delphi-Quellcode:
einmailg z.B. am Anfang zuweist oder fest hinterlegst, brauchst du nur noch die parameter senden.
QryVorgabe.SQL.Text := 'UPDATE ...';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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 by Thomas Breitkreuz