4D v16

BLOBs

Home

 
4D v16
BLOBs

BLOBs    


 

Diese Sequenz zeigt, wie Sie BLOBs programmieren und die Interaktion mit Variablen.

In BLOBs können Sie alle Arten von Informationen speichern und wiederfinden.

Nehmen wir das Beispiel Variablen speichern.
Wir erstellen eine Methode und machen folgendes:

  • Wir weisen Werte in drei Eingabe- und drei Ausgabevariablen zu
  • Initialisieren das BLOB und die Leseposition im BLOB
  • Weisen den Variablen Werte zu
  • Und übertragen diese Variablen in das BLOB
 C_LONGINT($Input_Integer;$Output_Integer)
 C_DATE($Input_Date;$Output_Date)
 C_TEXT($Input_Text;$Output_Text)
 
  //Variablen initialisieren:
 C_BLOB($blob)
 C_LONGINT($BlobOffset)
 TRACE
  //Dateneingabe
 $Input_Integer:=1789
 $Input_Date:=!2012-07-14!
 $Input_Text:="Liberté, Egalité, Fraternité"
 
  //Variableninhalt in Blob übergeben
 $BlobOffset:=0 //Daten speichern bei byte 0 starten
 VARIABLE TO BLOB($Input_Integer;$Blob;$BlobOffset)
 VARIABLE TO BLOB($Input_Date;$Blob;$BlobOffset)
 VARIABLE TO BLOB($Input_Text;$Blob;$BlobOffset)
 
  //Ausgabe des Blob-Inhalts
 $BlobOffset:=0 //Lesen bei byte 0 starten
 BLOB TO VARIABLE($Blob;$Output_Integer;$BlobOffset)
 BLOB TO VARIABLE($Blob;$Output_Date;$BlobOffset)
 BLOB TO VARIABLE($Blob;$Output_Text;$BlobOffset)
 
  //Blob leeren um Speicher freizugeben
 SET BLOB SIZE($blob;0)

Die Operationen sind:

  • Befehl VARIABLE TO BLOB verwenden
  • Variable zum Bearbeiten
  • BLOB zum Speichern
  • Und Position zum Speichern der Variablen im BLOB angeben

Die Variable PositionInBlob arbeitet als Eingabe- und Ausgabevariable, d.h.:

  • Sie gibt an, wo Sie die Variable zuvor speichern wollen
  • Nach Ausführen des Befehls enthält sie die Position im BLOB gleich nach der Variablen, so dass Sie folgende Elemente speichern können.
  • Sind die Daten im BLOB gespeichert, können Sie diese bearbeiten und dann Daten aus dem BLOB extrahieren:
    Wir setzen den Startpunkt im BLOB auf Position 0.
    Entnehmen aus dem BLOB die erste eingegebene Variable.
  • Dann die 2. und 3.
  • Ist die Verwendung des BLOB beendet, können wir es entfernen. Wir setzen die Größe auf Null.

Wir führen die Methode aus und gehen in den Schrittmodus. Hier sehen wir, wie die Methode das BLOB füllt und die Variablen wiederherstellt.

An dieser Stelle:

  • Sind alle Initialisierungen gemacht
  • BLOB ist leer
  • Gehen wir in die 1. Zeile, enthält das BLOB eine bestimmte Anzahl Bytes
  • Und ist schrittweise gefüllt.

Um Daten aus dem BLOB zu entnehmen:

  • Gehen wir auf Position Null
  • Entnehmen den Wert Zahl
  • Datum
  • Und den gespeicherten Text
  • Dann leeren wir das BLOB

Dieses einfache Beispiel veranschaulicht Eingabe und Entfernen von Daten in einem BLOB.

Wir können Ergebnisse aus Statistik-Arrays in einem BLOB speichern, um sie später wieder zu verwenden:

  • Schaltfläche BLOB im Formular STATS erstellen
  • In dieser Schaltfläche ein BLOB erstellen
  • Und die beiden Arrays übertragen

Um den Inhalt der Arrays später wiederzufinden, schreiben wir folgenden Code:

  • Erstes Array initialisieren
  • Dann das andere
  • Position im BLOB setzen
  • Beide Arrays aus dem BLOB wiederfinden
 C_BLOB($blob)
 VARIABLE TO BLOB(Array_Technicians;$Blob;*)
 VARIABLE TO BLOB(Array_NbInterventions;$Blob;*)
 
 ARRAY TEXT(Array_Technicians;0)
 ARRAY LONGINT(Array_NbInterventions;0)
 $BlobOffset:=0
 BLOB TO VARIABLE($Blob;Array_Technicians;$BlobOffset)
 BLOB TO VARIABLE($Blob;Array_NbInterventions;$BlobOffset)

Beim Ausführen mit dem Debugger:

  • Haben die Arrays 7 Elemente
  • Das BLOB ist leer
  • Wir laden das BLOB mit der Information aus den Arrays

Um den BLOB Inhalt später wieder zu finden:

  • Starten wir mit 2 leeren Arrays
  • Gehen zum Anfang des BLOB
  • Und laden die Arrays erneut (erst Techniker, dann Einsätze)

Sie sollten zusätzlich folgendes beachten:

Zu Beginn stellen wir uns immer dieselben Fragen:

  • Welchem Zweck kann dies dienen und in welchen Zusammenhängen?
  • Ich weiß, wie ich "Teile" hinein bekomme, aber wie und in welcher Reihenfolge bekomme ich sie wieder heraus?

Befassen wir uns zuerst mit der zweiten Frage:

Auch wenn wir auf jedes Byte des BLOB zugreifen können, verwenden wir in den meisten Fällen das System "First In First Out", kurz FIFO genannt. Das heißt, Sie stellen den Inhalt des BLOB in der Reihenfolge wieder her, in der er in das BLOB gesetzt wurde.
Um das zu verdeutlichen, nehmen wir als Beispiel ein Buchregal, in das wir Objekte von links nach rechts einsortieren. Sie stellen zuerst ein schmales Buch auf der linken Seiten ab, dann ein breites Buch neben das erste Buch, dann ein anderes großes Buch, dann ein Bild Ihrer Schwiegermutter, ein Souvenir aus Ihrem letzten Sommerurlaub, etc. Kommt dann die Zeit zum Abstauben, denken Sie nicht darüber nach, wieviel Zentimeter vom linken Rand weg ein Objekt steht. Sie nehmen es vielmehr in der bestehenden Reihenfolge heraus und passen Staubtuch und Hand an den entstandenen Zwischenraum an.

Dasselbe passiert in einem BLOB, insbesondere weil Sie wissen, was Sie im BLOB abgelegt haben. Legen Sie eine Ganzzahl ab, sind es 2 Bytes. Bei einer langen Ganzzahl sind es 4 Bytes, bei einem Datum 6 Bytes. Für Text geben Sie an, wie Sie ihn ablegen wollen und wie die Textlänge ausgedrückt wird (C String, Pascal String, etc.).

Beim Wiederauslesen nehmen Sie die Information in derselben Reihenfolge wieder heraus und legen sie in Variablen ab, die zum erwarteten Inhalt passen, d.h. korrekt typisiert sind. Auf diese Weise wird das BLOB in kohärenter Weise gelesen.

Kommen wir nun zur ersten Frage, d.h. was ist der Zweck eines BLOB? Sie können es u.a.in folgenden Fällen verwenden:

  • Variablen, hierarchische Listen, Arrays speichern
  • Dokumenten zwischen Client und Server austauschen
  • Vertrauliche Daten in einem verschlüsselten BLOB schützen
  • Variablen mit Plug-Ins sichern
  • Bilder, Texte oder Dokumente an einen Web Browser senden
  • Mit einem Web Server kommunizieren

Der Befehl VARIABLE TO BLOB speichert die Daten in einem 4D internen Format. Deshalb ist der benötigte Speicherplatz etwas größer als die Datengröße selbst. Dieser Befehl hat den Vorteil, dass er "Byte Swapping" (die Position des höherwertigen Byte) beim Arbeiten in Crossplattform verwaltet.

Sie können beim Füllen eines BLOB statt der Variablen $PositionInBlob das Zeichen * verwenden. Damit weisen Sie 4D an, die Variable am Ende des BLOB zu speichern und seine Größe entsprechend zu erweitern.

Nehmen wir an, Sie haben eine Reihe Parameter in Ihrer Datenbank, die für jeden Benutzer zu berücksichtigen sind, nämlich auf jeder Station, wo Ihre Anwendung installiert ist:

  • Startbildschirm
  • Hintergrundfarbe
  • Schrift und Größe der Zeichen
  • usw.
    Dies sind die Benutzereinstellungen.

Es gibt mehrere Möglichkeiten, sie zu bewahren (in einer Tabelle, als Textdatei, XML Datei, etc.).

In unserem Fall bewahren wir diese Einstellungen in einem BLOB, das in einer Datei auf Ihrer Festplatte gespeichert wird.

Die Befehle zum Lesen und Schreiben für BLOBs sind BLOB TO DOCUMENT und DOCUMENT TO BLOB.

Um Platz bzw. Übertragungszeit zu sparen, können Sie Ihre BLOBs auch komprimieren.

Beachten Sie, das 4D BLOBs nur komprimiert, wenn sie größer als 255 Bytes sind.

Beim Dekomprimieren von BLOBs müssen Sie prüfen, ob das BLOB derzeit komprimiert ist. Andernfalls wird beim Versuch, zu entkomprimieren ein Fehler generiert.

 
 

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: BLOBs

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

Self-Training ( 4D v16)