Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird/Interbase Blobfilter Doku/Tut auch für Delphi? (https://www.delphipraxis.net/39657-firebird-interbase-blobfilter-doku-tut-auch-fuer-delphi.html)

urs.liska 5. Feb 2005 22:23


Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Hallo DPler,

hat jemand schon mal Erfahrungen mit Delphi-programmierten "Blob Filtern" bei Firebird bzw. Interbase gemacht?
Ich bin eher zufällig darauf gestoßen, weil ich auf der Suche nach einer Lösung für mein Problem bin, rtf-Felder in plaintext-Felder umzuwandeln (Thread).
Für das konkrete Problem sind diese Filter wohl nicht geeignet, aber grundsätzlich ist es eine sehr interessante Sache.

Leider habe ich keine Anleitung/Hilfe/Doku gefunden, die sich nicht auf C oder C++ bezieht (in "The Firebird Book" wird man auf die IB6.0-Doku verwiesen und die zielt auf C-Programmierer ab). Und ehrlich gesagt ist die ganze Angelegenheit mit UDFs und Blobs für mich noch so suspekt, dass ich diese Hürde nicht so einfach nehmen kann.

Es wäre also toll, wenn mir jemand einen Hinweis auf geeignete Lektüre für Delphi-Programmierer geben oder mir direkt ein paar Verständnishilfen zum Thema Funktionsdeklaration und Datenübernahme der Blobs geben könnte.

MfG
Urs

P.S. für die, die nicht wissen, was Blobfilter bei Firebird sind
(vielleicht interessiert sich ja dann jemand dafür, beschäftigt sich damit und kann mir dann auf die Sprünge helfen):
Blobfilter sind spezielle UDF-Sonderfälle, die immer dann implizit aufgerufen werden, wenn Firebird es mit verschiedenen Blob Subtypes zu tun hat.
Wenn man also eine Spalte A mit Blob Subtype -1 und eine Spalte B mit Blob Subtype -2 hat und etwa "UPDATE tabelle SET A = B" aufruft, wird B automatisch in Typ A umgewandelt.
Was man wohin umwandelt, hat man völlig in der Hand (man muss natürlich den entsprechenden Algorithmus zur Hand oder entsprechende Programme aufrufbar haben). Ein paar Möglichkeiten:
XML->RTF, HTML, Word...
Kommentierter Quelltext->Dokumentation
Deutsch->Englisch...

Hansa 6. Feb 2005 02:16

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Eventuell könnte bei FIBplus so was drin sein. Dieser Tage kam eine email wegen neuem FIBplus 6.1 und ich erinnere mich noch, daß zumindest die Wörter Blob-Filter und UDF darin vorkamen. Leider wurde die email aber nach einmaligem Lesen sofort vernichtet. :shock: Da der Entwickler Russe ist, ist die Unicode-Unterstützung relativ weit vorangeschritten. Und wenn ich das sehe, wie die mit Zeichensätzen usw. hantieren, dann könnte ich mir vorstellen, daß sich dies auch auf Blobs auswirkt.

Nun verstehe ich allerdings überhaupt nicht, was du da vor hast und wozu ein Blob-Filter gut sein soll, aber wie gesagt, zumindest das Wort kam in der mail vor. :mrgreen:

urs.liska 6. Feb 2005 08:51

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Hallo Hansa,
danke für den Tipp, werde dem mal nachgehen.

Blob-Filter sind ein Mechanismus zur impliziten Typumwandlung.
Wenn ich z.B. den Subtype -10 als "rtf" festlege und einen Blob-Filter von "subtype -10 zu subtype 1(text)" programmiere, kann ich z.B. Folgendes machen: In einer Stored Procedure deklariere ich eine Blob-Variable vom Subtyp 1. Der Befehl "SELECT rtf_feld FROM tabelle into :plaintext_blob" ruft dann implizit den Blob-Filter auf und konvertiert das Blob aus Datenbank- und Applikationssicht transparent.
Denkbar wäre auch, eine gespeicherte Grafikdatei in verschiedenen Grafikformaten auszulesen (denkbar ist alles, was mit Blob-Konvertierung zu tun hat und mit Delphi zu machen ist).

Ich hoffe, das vermittelt einen Eindruck davon, was man mit Blob-Filtern tun kann. Letztlich nichts, was nicht auf anderem Wege auch zu machen ist; aber ich finde es eine sehr elegante Lösung.

MfG
Urs

Lemmy 7. Feb 2005 06:05

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Hi urs,

also von Blob-Filtern habe ich bisher nichts gehört oder gelesen (so weit bin ich mit dem Buch noch nicht), aber es hört sich verdammt gut an. Wenn ich diese Woche mal Zeit habe, schaue ich mir die Doku mal an...

Grüße
Lemmy

urs.liska 7. Feb 2005 07:15

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Liste der Anhänge anzeigen (Anzahl: 2)
@Hansa:
FIBPlus bringt leider nichts, Blob-Filter sind dort etwas anderes :-(
Trotzdem danke fürs Aufpassen.

@Lemmy:
Das wäre prima. In "Helen's Book" wird leider zur Programmierung gar nichts gesagt, sondern eben auf die InterBase-Dokumentation verwiesen.
Ich habe das entsprechende Kapitel mal angehängt...

MfG
Urs

[Edit]. Zweites Kapitel angehängt [/Edit]

Robert_G 7. Feb 2005 11:49

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Zitat:

Zitat von Hansa
Eventuell könnte bei FIBplus so was drin sein. Dieser Tage kam eine email wegen neuem FIBplus 6.1 und ich erinnere mich noch, daß zumindest die Wörter Blob-Filter und UDF darin vorkamen. Leider wurde die email aber nach einmaligem Lesen sofort vernichtet. :shock: Da der Entwickler Russe ist, ist die Unicode-Unterstützung relativ weit vorangeschritten. Und wenn ich das sehe, wie die mit Zeichensätzen usw. hantieren, dann könnte ich mir vorstellen, daß sich dies auch auf Blobs auswirkt.

:shock: Hast du irgendwie zu heiß geduscht heute? Neuronen mögen Temperaturen über 42° nicht sehr gerne. :mrgreen:

Zitat:

Zitat von Hansa
Nun verstehe ich allerdings überhaupt nicht, was du da vor hast und wozu ein Blob-Filter gut sein soll, aber wie gesagt, zumindest das Wort kam in der mail vor. :mrgreen:

Ich würde mal grob schätzen, dass er BinaryLargeOBjects filtern will. :P
Eine Idee wäre eine ÙDF, die einen BLOB und einen String schluckt. In der UDF kannst du ja dann den Suchtext im BLOB suchen und als Rückgabewert meinetwegen die Position ausspucken.

urs.liska 7. Feb 2005 11:55

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Zitat:

Zitat von Robert_G
Zitat:

Zitat von Hansa
Nun verstehe ich allerdings überhaupt nicht, was du da vor hast und wozu ein Blob-Filter gut sein soll, aber wie gesagt, zumindest das Wort kam in der mail vor. :mrgreen:

Ich würde mal grob schätzen, dass er BinaryLargeOBjects filtern will. :P
Eine Idee wäre eine ÙDF, die einen BLOB und einen String schluckt. In der UDF kannst du ja dann den Suchtext im BLOB suchen und als Rückgabewert meinetwegen die Position ausspucken.

Ne, das will ich nicht. Das wäre ungefähr das, was man auch mit FIBPlus oder IBO machen kann.
In meinem zweiten Post dieses Threads habe ich versucht zu erklären, was Blob-Filter bei Firebird sind.

Urs

Robert_G 7. Feb 2005 12:06

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Zitat:

Zitat von urs.liska
Ne, das will ich nicht. Das wäre ungefähr das, was man auch mit FIBPlus oder IBO machen kann.
In meinem zweiten Post dieses Threads habe ich versucht zu erklären, was Blob-Filter bei Firebird sind.

Ok, so weit bin ich mit FB auch noch nicht. ;)
Ich dachte ihr hängt euch immer noch an solchen Problemchen auf.
FB kennt ja zum Bsp. kein CLOB (CharacterLargeOBJect) in dem man mit "like" suchen kann. ;)
Schlagt mich wenn mein Informationsstand schon lange überholt ist...

Was du da ausgegraben hast klingt aber interessant, solange es keine Performancefalle ist. :gruebel:

Lemmy 7. Feb 2005 12:12

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
HI,

@Robert: Eine Performace-Falle ist das nur, wenn der Programmierer des Filters nen Fehler macht ;-))

Ich habe die DOku mal kurz überflogen. Grundsätzlich scheint das Teil wie ne UDF zu funktionieren, d.h. man definiert den Blobfilter, dieser Filter übergibt den Input-Blob an die Filterfunktion, dort kannst Du dann damit anstellen was auch immer du machen willst und schickst das Ergebnis wieder zurück zum Filter.

Ich werde mir das zuhause mal anschauen, wird aber ien paar Tage dauern....

GRüße
Lemmy

urs.liska 7. Feb 2005 13:02

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Zitat:

Zitat von Lemmy
Grundsätzlich scheint das Teil wie ne UDF zu funktionieren, d.h. man definiert den Blobfilter, dieser Filter übergibt den Input-Blob an die Filterfunktion, dort kannst Du dann damit anstellen was auch immer du machen willst und schickst das Ergebnis wieder zurück zum Filter.

Das stimmt soweit, mir ist nur nicht klar, was ich mit den verschiedenen "Filter-Aktionen" machen muss (ob ich also für die acht Aktionen jeweils einen Code-Abschnitt schreiben muss). Auch verstehe ich nicht, was genau passiert, wenn ein Blob in mehreren Segmenten geladen werden soll. Mir scheint, die Filter-Funktion wird für jedes Segment einzeln aufgerufen - keine Ahnung, wie damit umzugehen ist...
Zitat:

Zitat von Lemmy
Ich werde mir das zuhause mal anschauen, wird aber ien paar Tage dauern....

Würde mich freuen :)
Urs

P.S. Ich habe jetzt noch einen weiteren Beispielcode gefunden, der die Sache etwas klarer werden lässt. Trotzdem bin ich leider nicht in der Lage, das nach Delphi zu übersetzen. Vieles geht ja, aber bei manchem bin ich doch sehr unsicher.

urs.liska 7. Feb 2005 21:38

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von urs.liska
P.S. Ich habe jetzt noch einen weiteren Beispielcode gefunden, der die Sache etwas klarer werden lässt. Trotzdem bin ich leider nicht in der Lage, das nach Delphi zu übersetzen. Vieles geht ja, aber bei manchem bin ich doch sehr unsicher.

@Lemmy:
Ich habe mich doch daran gemacht, das Beispiel nach Delphi zu übertragen. Angehängt sind meine bisherigen Ergebnisse; darin ist der Original-C-Code auskommentiert und - hoffentlich übersichtlich - mit dem Delphi-Code versetzt.
Einiges konnte ich problemlos machen; Probleme kommen eigentlich immer dann, wenn ich mir nicht sicher war, wie die Variablendeklarationen und die ganze Zeiger-Bezeichnung funktioniert (ich habe nur vor vielen Jahren, als ich noch keine Ahnung vom Programmieren hatte, ein Buch über C++ gelesen).

Aus so einem übersetzten Codebeispiel könnte sicher leicht ein kleines Tutorial werden ;-)

MfG
Urs

Lemmy 8. Feb 2005 05:21

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Guten Morgen,

Zitat:

Zitat von urs.liska
Aus so einem übersetzten Codebeispiel könnte sicher leicht ein kleines Tutorial werden ;-)

irgendwie kommt es mir so vor, als ob Du mir damit irgend was mitteilen willst ;-))

Grüße
Lemmy

urs.liska 8. Feb 2005 10:58

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Zitat:

Zitat von Lemmy
Guten Morgen,

irgendwie kommt es mir so vor, als ob Du mir damit irgend was mitteilen willst ;-))

Grüße
Lemmy

Nein, ähm, wieso, wie kommst Du darauf :oops:
[ablenk]Was ich Dich schon immer mal fragen wollte: Wie kommt es eigentlich zu den haarsträubenden Uhrzeiten Deiner Postings?[/ablenk]

Nein im Ernst:
Ich fände es schön, dieses Codebeispiel zu übertragen und dann wieder öffentlich zu machen (am besten auf ibphoenix.com). Ich finde nämlich, dass es eher (zu) wenig Dokumentation für [Firebird + Delphi] gibt, was wiederum Einige davon abhalten könnte, sich mit dieser guten Kombination zu beschäftigen. Insbesondere die Serverprogrammierung mit UDFs ist ja relativ ungewohnt und auch etwas umständlich.
Darüber hinaus fände ich es auch schön, daraus ein (deutsches) Tutorial entstehen zu lassen, das dann auch mit einem - oder mehreren - richtigen Beispielen aufwartet (der Beispielcode implementiert ja praktisch nur eine Dummy-Funktion). Gerade die zip-/unzip-Möglichkeit dürfte ja großen praktischen Nutzen haben. Als weitere Beispiele könnte ich mir einen rtf-plaintext-Filter (der mich aktuell eigentlich interessiert) und einen XML-Transformationsfilter oder einen Grafikfilter vorstellen.

Aber ehrlich gesagt weiß ich nicht, ob es bei mir nicht wieder einmal an der Zeit scheitern wird, ein solches Projekt (auch wenn es überschaubar scheint) abzuschließen.

MfG
Urs

Lemmy 8. Feb 2005 11:11

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Hi,

Zitat:

Zitat von urs.liska
Nein, ähm, wieso, wie kommst Du darauf :oops:

Na eine mehr oder weniger Aufforderung zum Tutorial schreiben.... *gg*

Zitat:

Zitat von urs.liska
[ablenk]Was ich Dich schon immer mal fragen wollte: Wie kommt es eigentlich zu den haarsträubenden Uhrzeiten Deiner Postings?[/ablenk]

was ist daran ungewöhnlich...?? OK, heute bin ich etwas früher als sonst aufgestanden (4:35), aber was ist daran ungewöhnlich ;-)



Zitat:

Zitat von urs.liska
Aber ehrlich gesagt weiß ich nicht, ob es bei mir nicht wieder einmal an der Zeit scheitern wird, ein solches Projekt (auch wenn es überschaubar scheint) abzuschließen.

Einige Filter werden wohl nicht drin sein, ein Tutorial aber auf alle Fälle, speziell weil es mich interessiert. Ich werde mich vermutlich am Do mal dransetzen, dann werde ich mich nochmals melden.

Grüße
Lemmy

urs.liska 8. Feb 2005 13:38

Re: Firebird/Interbase Blobfilter Doku/Tut auch für Delphi?
 
Zitat:

Zitat von Lemmy
Hi,
<snip>
Einige Filter werden wohl nicht drin sein, ein Tutorial aber auf alle Fälle, speziell weil es mich interessiert. Ich werde mich vermutlich am Do mal dransetzen, dann werde ich mich nochmals melden.

Grüße
Lemmy

Wir können das gerne zusammen machen.
Ich denke, einen guten Teil der Übertragungsarbeit habe ich doch schon geleistet (so weit eben meine Vorstellungen von C-Code reichen).
Sofern Du mir mit dem übrigen Teil hilfst, könnte ich auf jeden Fall eine umfassende Kommentierung der Unit machen.

Grundsätzlich müsste man klären, wie der Filter-Code zu verallgemeinern ist. Es glaube es ist möglich, die allgemeine Filter-Verwaltung (das Laden und Speichern der blobs und die Kommunikation mit Firebird) in eine Unit auszulagern, so dass dann für den speziellen Filter nicht so viel Quelltext nötig ist. Vielleicht braucht man dafür auch eine Callbackfunktion (um aus der allgemeinen Unit wieder in die spezielle zu kommen).

Es wäre aber vielleicht vernünftig, zunächst einmal von der Referenzimplementierung auszugehen und diese als Grundlage für ein Tutorial zu nehmen. In einem zweiten Schritt kann man dann - auch später - das eben Genannte ergänzen.

Sollte ich vor Donnerstag noch etwas machen, melde ich mich bei Dir.

MfG
Urs


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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-2025 by Thomas Breitkreuz