Italia
Foro

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#
10 kB
Hochgeladen:11.02.2009
Downloadcounter110
Download
 
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
>
 
11.02.2009  
 




RGH
Ciao,

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 naturalmente 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#
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 circa das Speichern einer File 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 File geeignet, weil diese meist wesentlich größer sind (PDF, JPG, MP3, MPEG, AVI, ...).

In einem BLOB-Feld dagegen wird nicht die File selber abgelegt, sondern nur ein Verweis darauf, wo genau in der Datenbank die File 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 File aus der Datenbank potrebbe dann rückwärts presumibilmente nicht mehr allzu schlimm sein, wenn sie erst mal ohne Schäden in die DB reingeschubst worden sind.

Doch wie geht das Reinschubsen der File in die BLOBs?

Inzwischen träume ich nachts schon bald von BLOBs ... Im Traum sehen diese BLOB-Kreaturen wirklich echt furchterregend aus ...

Saluto
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 ...

Saluto
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:

Aiuto, Anregungen, Unterstützung in Richtung SQL mit Interbase/Firebird, u.ä. - keinesfalls jedoch kauderwelsche Formulierungen, oder eine Sammlung Google-Bilderchen per pubertierende Kinder / Jugendliche ...

Saluto
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 per pubertierende Kinder / Jugendliche ...

Saluto
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  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

4.944 Views

Untitledvor 0 min.

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Informativa sulla privacy


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