Vier D HomeArchivSeminareNachrichten - Twitter4D Expertise
Antworten auf Ihre Fragen •
Datenbank-Pflege •
4D Coaching •
OpenDDDD •
Termine •
4D Expert
V11/V12-Service • Konzepte •
Alternativen •
Meine Apps
Gebrauchtes Mac + iPhone: zu verkaufenFinden Geo-Themen + Projekte GoogleMap-Integration • GeoDDDD • Database Publishing • Database PhotographyVerschiedenes |
26. Mai 2009 MySQL dumpDie freundlichen Datenlieferer schicken ein MySQL-Dumpfile. Das ist ein 107 MB Text-Dokument. So stellt BBEdit den MySQL-Dumpfile dar: Alle Tabellen-Beschreibungen und Datensätze in einem einzigen Dokument. Alles in SQL-Syntax als Text. Von Kommentaren getrennt zuerst die Tabellen-Definition, danach die Datensätze. Das Schema wiederholt sich für alle 15 Tabellen. In der Summe sind das 1.170.508 Zeilen. Der Anfang ist hier wie in BBEdit dargestellt. Klasse. Das komprimiert gut (8 MB) und es kann nichts verloren gehen. Wie jetzt die 107 MB auseinanderdröseln, damit ich die Daten in 4D übernehmen und den Mehrwert (in diesem Fall PDF) herstellen kann? Das ist ein guter Anlaß zu testen, wie realitätsnah die SQL-Fähigkeiten der V11 sind. Die ersten Versuche, nur für den Fall das es so einfach wäre:
Nach einigem Rumprobieren blieb nur die Lösung: Zeile für Zeile einzulesen und auf den Zeileninhalt zu reagieren. Das sind 3 mögliche Reaktionen
Tabellen-DeklarationAus den ersten Versuchen und auch vorher schon hatte ich gelernt, daß 4D V11 sehr pingelig* ist bzgl. der Typdefinition. char(15) will es nicht, es muß für 4D V11 varchar(15) heißen, text ist als varchar ohne Längenangabe zu definieren. Auch sonst sind MySQL und 4D V11 bzgl. der SQL-Syntax unterschiedlicher Auffassung: default NULL kann die V11 nicht ab, ebensowenig KEY und TYPE=MyISAM. Also muß die Tabellen-Deklaration, sobald sie eingelesen ist von allem bereinigt werden, an dem sich 4D stört. Dabei nutzte ich die Gelegenheit, den CREATE TABLE Befehl durch CREATE TABLE IF NOT EXISTS zu ersetzen, um den Import mehrfach in dieselbe 4D Struktur ausführen zu können und die Tabellen nur einmal zu erzeugen. Den KEY habe ich mir ganz geschenkt. Zusätzliche "," und ")" und doppelte Leerzeichen " " werfen in 4D V11 SQL-Fehler und werden deshalb mitbereinigt. : ($what="Bereinigen") ` weil 4D mit dem SQL von MySQL nicht harmoniert Der Rest ist einfach. Über EXECUTE IMMEDIATE wird die SQL-Deklaration umgesetzt. Das sieht dann so aus:
SQL-Definition der Tabelle für 4D V11 bereinigen und Tabelle erzeugen, falls nötig, wird so aufgerufen: Datenimport
Die Daten sind in einem einfachen, einzeiligen INSERT INTO abgelegt. Also so: Zuerst war ich versucht, wie schon so häufig, die Zeichen oberhalb Ascii 127 mit einem eigenen Verfahren in MacRoman umzusetzen. Das ist inzwischen vereinfacht durch USE CHARACTER SETUSE ASCII MAP heißt in der V11 USE CHARACTER SET("iso-8859-1";$importFilter_L) und kann mit einer Auswahl der IANA Namen verwendet werden. In diesem Falle für den Import "iso-8859-1" und für den Export USE CHARACTER SET("MacRoman";$exportFilter_L). Einfach - praktisch - gut. PerformanceHinreichend! Die großen Tabellen haben 700.000, 350.000 und 100.000 Datensätze. Der gesamte Import dauerte ca. 20 Minuten. BBEdit braucht zum Öffnen der Original-107 MB-Textdaten bereits einige Minuten. Alles in einer MethodeDas Verfahren hat sich wieder bewährt. Alles was zu diesem Modul gehört
Dreaming of a rich-text-editor in 4D gilt analog für HTML-Editoren. Es ist mühsam, 4D Sprache in HTML darzustellen. Mit CSS und vorbereiteten Code-Schnipseln geht es, aber das Gelbe vom Ei ist es nicht. Besäße 4D einen Richtext-Editor – eingebaut oder über ein PlugIn, hätte ich mir schon lange geholfen. Von einem CSS-fähigen 4D Write wage ich gar nicht zu träumen :-) * ich ziehe Pragmatismus vor. In meinem Code würde ich gegen char oder varchar prüfen und richtig reagieren, dito auf int und int32. Wahrscheinlich ist das zu einfach, zu sehr 4D gedacht. ↵ Sie möchten den Sourcecode haben? Kein Problem! Überweisen Sie, was es Ihnen wert ist auf mein PayPal-Konto: info@mettre.de. Was ist denn üblich? |