Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Stored Procedure mit Delphi und FirebirdSQL (https://www.delphipraxis.net/200345-stored-procedure-mit-delphi-und-firebirdsql.html)

erich.wanker 11. Apr 2019 11:55

Datenbank: Firebird • Version: 2.5 • Zugriff über: ZEOSLIB

Stored Procedure mit Delphi und FirebirdSQL
 
Hallo,

Wie kann ich eine Stored Procedure in Delphi erstellen, die verschiedene Textbausteine und Feldinhalte in ein neues Feld schreibt?


Beispiel:
Tabelle mit Felder: HTML_TEXT, NACHNAME, VORNAME, STRASSE, PLZ .....

Ich möchte via Stored-Procedure das Feld "HTML_TEXT" automatisch befüllen, wenn ein Datensatz neu erstellt wurde oder bearbeitet wurde. Das Feld "HTML_TEXT" soll aber aus ausgewählten Feldern und Textelementen (HTML Formatierung und Zeilenumbrüche) erstellt werden.

Der User soll die Möglichkeit haben, die zu verwendeten Felder (für das Feld HTML_TEXT) via Checkbox anzuwählen und die HTML-Texte vor-und nach dem Tabellenfeld-Wert definieren können

[TCheckbox: Aktiv] [TEDIT: Vortext-HTML] Datenbankfeld: NACHNAME [TEDIT: Nachtext HTML]
[TCheckbox: Aktiv] [TEDIT: Vortext-HTML] Datenbankfeld: VORNAME [TEDIT: Nachtext HTML]
[TCheckbox: Aktiv] [TEDIT: Vortext-HTML] Datenbankfeld: STRASSE [TEDIT: Nachtext HTML]


Beispiel:
Vortext-HTML= <b>
Datenbankfeld: NACHNAME
Nachtext-HTML= </b>

Vortext-HTML= <b>&nbsp;
Datenbankfeld: Vorname
Nachtext-HTML= </b><BR>

Vortext-HTML=
Datenbankfeld: STRASSE
Nachtext-HTML=

Ergebnis-Beispiel im Feld "HTML-TEXT": "<b>Mustermann</b>&nbsp;Karl</b><BR>Musterstasse 123"


und noch eine Frage:
Wie kann ich einer StoredProcedure sagen, dass sie ALLE Records noch mal "durcharbeiten" soll (Falls Änderungen bei den zu verwendeten Felder sind)?

Vielen Dank für Hinweise und Vorschläge
Erich



P.S.: Bis dato hab ich überall kreuz und quer - wo man die Kundenadresse neu erstellen oder ändern kann - folgende Zeilen verteilt:


das_query.Edit;
{ ! } gunst.FieldByName('HTML_TEXT').asString := '<p style="margin: 0px;font-size: 12px">' + query[1].FieldByName('EINTRAG').asString + '<br></p><p style="margin: 0px;font-size: 10px">' + query[1].FieldByName('STRASSE').asString + '<br>' + query[1].FieldByName('PLZ').asString + '-' + query[1].FieldByName('ORT').asString + '</p>';
das_query.Post;

hoika 11. Apr 2019 12:38

AW: Stored Procedure mit Delphi und FirebirdSQL
 
Hallo,
geht es jetzt prinzipiell um

Frage 1: "Wie schreibe ich eine SP in Firebird?" oder

Frage 2: "Wie schreibe eine SP, die genau das macht, was du hier willst?"


Die Frage "wie alle noch mal durch gehen" gehört zu Frage 1?


Strings werden über || verknüpft.

mkinzler 11. Apr 2019 12:51

AW: Stored Procedure mit Delphi und FirebirdSQL
 
Hier würde sich ein Trigger anbieten, der bei Änderung einer der Felder die Änderung anstösst.

SQL-Code:
CREATE TRIGGER UpdateHTML_Text
FOR <Tabelle>
BEFORE INSERT OR UPDATE
AS
BEGIN
  new.HTML_TEXT := '<p style="margin: 0px;font-size: 12px">' || new.EINTRAG || '<br></p><p style="margin: 0px;font-size: 10px">' || ne.STRASSE || '<br>' || new.PLZ || '-' + new.ORT || '</p>';
END

erich.wanker 11. Apr 2019 13:26

AW: Stored Procedure mit Delphi und FirebirdSQL
 
Hallo Heiko, hallo mkinzler ...

Sorry für meine etwas verwirrende Fragestellung :-)

Die Antwort von mkinzler (ein dickes Dankeschööööön) ist - denke ich - die perfekte Lösung.

ZUSATZFRAGE: Wie kann ich diesen Trigger wieder löschen? (und durch einen neuen Ersetzen?)








Im Moment verwende ich folgende Zeilen:



Wenn ein User einen PERSONEN-Datensatz neu erstellt oder ändert (Query[1]-OnDataChange) werden folgende Zeilen ausgeführt:

Delphi-Quellcode:

Query -> tabelle = PERSONEN
query[1] -> tabelle = PERSONEN


query.SQL.Clear;
query.SQL.Append('SELECT * FROM PERSONEN WHERE INR = ' +query[1].FieldByName('INR').AsString );
query.open;

query.Edit;
query.FieldByName('HTML_TEXT').asString := '<p style="margin: 0px;font-size: 12px">' + query[1].FieldByName('EINTRAG').asString + '<br></p><p style="margin: 0px;font-size: 10px">' + query[1].FieldByName('STRASSE').asString + '<br>' + query[1].FieldByName('PLZ').asString + '-' + query[1].FieldByName('ORT').asString + '</p>';
query.Post;

Genau diese Zeilen habe ich in 8 verschiedenen Fenstern..
Diese Art der "HTML-Text Erstellung" habe ich für verschiedene Tabellen..
... also ein Vielfaches dieser Zeilen verteilt in div. Units :-(

Delphi.Narium 11. Apr 2019 13:41

AW: Stored Procedure mit Delphi und FirebirdSQL
 
Zitat:

Zitat von erich.wanker (Beitrag 1430094)
ZUSATZFRAGE: Wie kann ich diesen Trigger wieder löschen? (und durch einen neuen Ersetzen?)

https://firebirdsql.org/file/documen...iggers-de.html

Pro Tabelle ein Trigger, der die jeweiligen Tabellenbesonderheiten (Spaltennamen ...) berücksichtigt.


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