| |
|
|
Thomas Zielinski | Hallo Leute, ich sitze gerade an Dietmars Problem und beim rumspielen erzählt mir Profan das die Bereichsvariable test# nicht dimensioniert sei, obwohl ich sie eindeutig zwei Zeilen drüber dimensioniere. KompilierenMarkierenSeparierencls
var sql& = sqlinit(DSN=Firebird;UID=SYSDBA;PWD=masterkey;DBNAME=E:\Data\KURSDB.GDB;)
print sql&
Set(SQLFile, E:\Data\blobausgabe.jpg)
Declare dasbild#, bild$, groesse%, test#
bild$ = E:\Data\Drache.jpg
groesse% = FileSize(bild$)
Dim dasbild#, groesse%+2
Dim test#, groesse%+500 <-----Dimensionieren
BlockRead(bild$, dasbild#, 0, groesse%+1)
test# = INSERT INTO bilder (id, name, bild) VALUES (1, Drachen, + dasbild# + ) <----- nicht mehr dimensioniert
sqlExec test#,1
Dispose test#
Dispose dasbild#
end
|
|
|
| XProfan X4; Win10 x64 Der Kuchen ist eine lüge! | 11.02.2009 ▲ |
|
|
|
|
| |
|
| |
|
|
|
RGH | Hallo,
die Fehlermeldung ist in der Tat etwas irreführend, aber das kleine Programm enthält einige weit gröbere Fehler: KompilierenMarkierenSeparieren Was soll das bewirken? Das Ergebnis eines SQLExec-Befehles ist immer ein Text! KompilierenMarkierenSeparieren 1. Einer Bereichsvariablen kann kein String zugewiesen werden. 2. String + Bereichvariable + String funktioniert natürlich auch nicht. Aber warum gibt es hier keinen Fehler? Hier schlägt die automatische Typumwandlung 2 mal zu: 1. Bei String + Bereich + String wird die Adresse der Bereichsvariablen automatisch per Str$ in einen String umgewandelt. Hinter dem = steht also ein String. 2. Der Bereichsvariable kann ja durchaus ein numerischer Wert als neue Adresse zugewiesen werden, also wird der Ausdruck hinter dem = als numerischer Ausdruck interpretiert. Der Stringt wird daher automatisch intern mit VAL in einen Wert umgewandelt und ergibt dann exakt 0. Eine Bereichsvariable mit der ungültigen Adresse 0 gilt als nicht dimensioniert. Die Fehlermeldung ist also letztlich korrekt. Durch die falsche Programmlogik wird test# tatsächlich zu einer undimensionierten Bereichsvariablen. KompilierenMarkierenSeparieren sqlExec erwartet einen String als Parameter und keine Bereichsvariable!
Folgede Tipps: 1. Das geladene Bild mi Encode64() in einen String umwandeln. dasBild# -> dasBild$ 2. Test# daher durch Test$ ersetzen und dasBild$ einfügen 3 Zum Auslesen des Bildes: Das SQL-Ergebnis ist ein String. Diesen mit Decode64() wieder in einen Bereich umwandeln und als JPG speichern.
Das hier als (ungetestete) Anregung: (Ich habe hier kein FireBird) KompilierenMarkierenSeparierencls
var sql& = sqlinit(DSN=Firebird;UID=SYSDBA;PWD=masterkey;DBNAME=E:\Data\KURSDB.GDB;)
print sql&
Declare dasBild#, dasBild$, bild$, groesse%, test$
bild$ = E:\Data\Drache.jpg
groesse% = FileSize(bild$)
Dim dasbild#, groesse% + 2
BlockRead(bild$, dasbild#, 0, groesse% + 1)
dasBild$ = Encode64(dasBild#, 0, sizeOf(dasBild#))
test$ = INSERT INTO bilder (id, name, bild) VALUES (1, Drachen, + dasbild$ + )
sqlExec test$, 1
Dispose dasbild#
end
(Vielleicht finde ich heute Abend Zeit für ein kurzes Beispiel, aber ich will nichts versprechen, da ich noch auf einen Elternabend muß.)
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 11.02.2009 ▲ |
|
|
|
|
Thomas Zielinski | Ich schieb das jetzt einfach mal auf meine Grippe und das Fieber. Ich danke euch gruß Thomas |
|
|
| XProfan X4; Win10 x64 Der Kuchen ist eine lüge! | 11.02.2009 ▲ |
|
|
|
|
Dietmar Horn | Thomas Zielinski
... ich sitze gerade an Dietmars Problem ...
Der Weg über das Speichern einer Datei als String (Encode64) in ein VARCHAR ist meiner Meinung nach ein Holzweg, der nicht weiter verfolgt werden braucht. In ein VARCHAR-Feld passen bei IB/FB maximal 32 KB Daten - also ist dieses schon von daher nicht zum Speichern beliebiger Dateien geeignet, weil diese meist wesentlich größer sind (PDF, JPG, MP3, MPEG, AVI, ...).
In einem BLOB-Feld dagegen wird nicht die Datei selber abgelegt, sondern nur ein Verweis darauf, wo genau in der Datenbank die Datei gespeichert ist. Siehe auch [...]
Es geht also darum, mit irgendeinem SQL-INSERT-Befehl (o.ä.) diesen Verweis (und evtl. weitere Angaben, wie Dateigröße, etc.?) im BLOB irgendwie unterzukriegen. Und genau an dieser Stelle fehlt mir dafür bisher leider ein Stück Film.
Das Rauskrümeln der Dateien aus der Datenbank dürfte dann rückwärts vermutlich nicht mehr allzu schlimm sein, wenn sie erst mal ohne Schäden in die DB reingeschubst worden sind.
Doch wie geht das Reinschubsen der Dateien in die BLOBs?
Inzwischen träume ich nachts schon bald von BLOBs ... Im Traum sehen diese BLOB-Kreaturen wirklich echt furchterregend aus ...
Gruß Dietmar |
|
|
| Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 14.02.2009 ▲ |
|
|
|
|
| |
|
| |
|
|
|
Dietmar Horn | Ich warte eigentlich eher auf fachliche Antworten zum BLOB-Problem (IB/FB betreffend) und weniger auf bunte Klicki-Bilderchen zur evtl. Deutung / Interpretation meiner nächtlichen BLOB-Träume ...
Gruß Dietmar |
|
|
| Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 14.02.2009 ▲ |
|
|
|
|
| Wollte nur zeigen, den Film gibts bereits. (schon lange)
@Fachlich: Was erwartest Du von mir? |
|
|
| |
|
|
|
Dietmar Horn | iF
@Fachlich: Was erwartest Du von mir?
Aktuell:
Hilfe, Anregungen, Unterstützung in Richtung SQL mit Interbase/Firebird, u.ä. - keinesfalls jedoch kauderwelsche Formulierungen, oder eine Sammlung Google-Bilderchen für pubertierende Kinder / Jugendliche ...
Gruß Dietmar |
|
|
| Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 14.02.2009 ▲ |
|
|
|
|
| Dietmar Horn
iF @Fachlich: Was erwartest Du von mir?
keinesfalls jedoch kauderwelsche Formulierungen, oder eine Sammlung Google-Bilderchen für pubertierende Kinder / Jugendliche ... Gruß Dietmar
Irgendwie hast Du keinerlei Plan davon, was wirklich hilft! |
|
|
| |
|
|
|
| Dietmar, du bist sicher nicht allein mit deinem Problem. Auf der Herstellerseite gibt es einen interessanten Artikel, wie man VERSCHIEDENE BLOB-ARTEN in Firebird zu behandeln hat. Ganz unten auch mit Beispielen: [...] Vielleicht bringt ja das weiter. Gruss, Specht |
|
|
| |
|
|