Deutsch
Forum

DIMensionierte Bereichsvariable nicht DIMmensioniert

 

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.
KompilierenMarkierenSeparieren
cls
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

10 kB
Hochgeladen:11.02.2009
Ladeanzahl110
Herunterladen
 
XProfan X4; Win10 x64
Der Kuchen ist eine lüge!
11.02.2009  
 



Schau Dir mal String  und String  an.
KompilierenMarkierenSeparieren
declare mem#,mim#
dim mem#,200
dim mim#,200
string mim#,0=Salat
string mem#,0=MeinString+string$(mim#,0)+DeinString
print string$(mem#,0)
waitKey
end
 
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
test# = INSERT INTO bilder (id, name, bild) VALUES (1, Drachen,  + dasbild# + )

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 test#, 1

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)
KompilierenMarkierenSeparieren
cls
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  
 



[...] 
 
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?
 
14.02.2009  
 




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!
 
15.02.2009  
 



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
 
15.02.2009  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.868 Betrachtungen

Unbenanntvor 0 min.

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie