Wer auf eine MySQL-Datenbank mit unterschiedlichen Anwendungen (Filemaker, phpMyAdmin, Access, Navicat lite, OOoBase) zugreift, muss feststellen, dass Filemaker [Mac] im Zusammenspiel mit den anderen ein eigenes Köpfchen beweist. Als Zeilenumbruch (siehe Zeilenumbruch-Matrix) gibt Filemaker nämlich nur ein Linefeed (LF) aus, wo andere Anwendungen zusätzlich ein Carriage Return (CR) setzen sowie erwarten. Als Ergebnis finden sich in der MySQL-Table Datensätze unterschiedlicher Zeilenumbruch-Codierung. Ein unschöner Umstand, den man bei jedem Report beachten muss. Da wäre es schön, wenn in der Datenbank alle Datensätze einheitlich mit der gewünschten Zeilenumbruch-Codierung eingefügt – und in Filemaker keine überflüssigen Umbrüche ausgegeben würden. Das gelingt – und zwar mit Hilfe von zwei Triggern in der MySQL-Datenbank (1) und einer entsprechenden Funktion in der Filemaker-Anwendung (2).
1. Zwei MySQL-Trigger setzen den Zeilenumbruch immer als CR + LF
Die folgenden Trigger setzen in der MySQL-Datenbank – egal mit welcher Anwendung die Eingabe erfolgt – den Zeilenumbruch automatisch immer als Carriage Return (CR) & Linefeed (LF):
Datenbank: | MySQL |
Tabelle: | t_kontakte |
Felder: | Anschrift_Post Anschrift_RG |
Trigger: | trigger_kontakte_created trigger_kontakte_modified |
Erläuterung:
Da der Zeilenumbruch sowohl beim Anlegen eines neuen Datensatzes als auch beim Ändern eines bestehenden Datensatzes als CR+LF ausgegeben werden soll, sind 2 Trigger erforderlich: INSERT und UPDATE
Trigger 1:
CREATE TRIGGER `trigger_kontakte_created` BEFORE INSERT INTO `t_kontakte` FOR EACH ROW BEGIN IF NEW.Anschrift_Post NOT LIKE "%rn%" THEN SET NEW.Anschrift_Post = REPLACE(NEW.Anschrift_Post,"r","rn"); END IF; IF NEW.Anschrift_RG NOT LIKE "%rn%" THEN SET NEW.Anschrift_RG = REPLACE(NEW.Anschrift_RG,"r","rn"); END IF; END |
Trigger 2:
CREATE TRIGGER `trigger_kontakte_modified` BEFORE UPDATE ON `t_kontakte` FOR EACH ROW BEGIN IF NEW.Anschrift_Post NOT LIKE "%rn%" THEN SET NEW.Anschrift_Post = REPLACE(NEW.Anschrift_Post,"r","rn"); END IF; IF NEW.Anschrift_RG NOT LIKE "%rn%" THEN SET NEW.Anschrift_RG = REPLACE(NEW.Anschrift_RG,"r","rn"); END IF; END |
2. Den doppelten Zeilenumbruch in Filemaker ersetzen
Filemaker verwendet für den Zeilenumbruch den Linefeed, wo andere Programme Carriage Return + Linefeed setzen (siehe Zeilenumbruch-Matrix). So kommt es, dass Filemaker CR + LF als doppelten Zeilenumbruch interpretiert und ausgibt.
Mit den folgenden Funktionen kann man in Filemaker die doppelten Umbrüche ersetzen:
Austauschen ( Anschrift_Post ;[¶ ;" "]; [" ";" "] ) |
besser:
Austauschen ( Anschrift_Post ;[CHAR ( 13 ); CHAR ( 10); CHAR (13)]) |
Pingback: ki-office Blog» Blog Archive » Doppelten Zeilenumbruch in Filemaker ersetzen