BLOB-Inhalt direkt in Editor-Gadget?
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
BLOB-Inhalt direkt in Editor-Gadget?
Hallo,
ich speichere in einer Datenbank BLOBs in Gestalt von Bildern. Dazu lese ich den BLOB über readData() in den Speicher und lasse ihn über catchImage() in einem Image-Gadget anzeigen. Das klappt wunderbar. (@ts-Soft:Dank für das entsprechende SQLite-Tutoral Teil 2)
Nun möchte ich das Ganze in einer anderen Datenbankspalte mit einem Text-BLOB machen, der in einem EditorGadget angezeigt werden soll. Das bekomme ich nur hin, indem ich den BLOB mit writeData() in ein File schreibe und ihn dort zeilenwiese herauslese und dann ins Editor-Gadget schreibe.
a) Wie schreibe ich den BLOB auch ohne diesen Umweg direkt in das Editor-Gadget? Mir fehlt - entsprechend catchImage- so etwas wie 'catchText'.
b) Wie prüfe ich am einfachsten, ob es sich auch wirklich um Text handelt? Für ein Bild als BLOB gibt es ja das praktische isImage().
Edit: Den gleichen Umweg über ein File müsste ich auch machen, wenn ich den aus einer Datei geladenen (und evtl. im Editorgadget geänderten) Text als BLOB speichern will. Geht das nicht auch hier direkt vom Editor-Gadget direkt ins Memory?
ich speichere in einer Datenbank BLOBs in Gestalt von Bildern. Dazu lese ich den BLOB über readData() in den Speicher und lasse ihn über catchImage() in einem Image-Gadget anzeigen. Das klappt wunderbar. (@ts-Soft:Dank für das entsprechende SQLite-Tutoral Teil 2)
Nun möchte ich das Ganze in einer anderen Datenbankspalte mit einem Text-BLOB machen, der in einem EditorGadget angezeigt werden soll. Das bekomme ich nur hin, indem ich den BLOB mit writeData() in ein File schreibe und ihn dort zeilenwiese herauslese und dann ins Editor-Gadget schreibe.
a) Wie schreibe ich den BLOB auch ohne diesen Umweg direkt in das Editor-Gadget? Mir fehlt - entsprechend catchImage- so etwas wie 'catchText'.
b) Wie prüfe ich am einfachsten, ob es sich auch wirklich um Text handelt? Für ein Bild als BLOB gibt es ja das praktische isImage().
Edit: Den gleichen Umweg über ein File müsste ich auch machen, wenn ich den aus einer Datei geladenen (und evtl. im Editorgadget geänderten) Text als BLOB speichern will. Geht das nicht auch hier direkt vom Editor-Gadget direkt ins Memory?
Zuletzt geändert von ProgOldie am 27.08.2015 10:22, insgesamt 1-mal geändert.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: BLOB-Inhalt direkt in Editor-Gadget?
Den Text kannst du mit PeekS() direkt aus dem Speicherbereich lesen und in eine Variable speichern.
Code: Alles auswählen
Text$ = PeekS(*Speicherpuffer [, Länge [, Format]])Michael Hack
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: BLOB-Inhalt direkt in Editor-Gadget?
Super shs, das funktioniert prima!Text$ = PeekS(*Speicherpuffer [, Länge [, Format]])
Dann kann ich wohl auch den umgekehrten Weg (evt. geänderten Inhalt des EditorGadgets -->BLOB) wie folgt machen:
Gesamten Inhalt des Editorgadgets lesen, zugehörigen Speicherplatz berechnen, Speicher allozieren und dann mit PeekS() in den Speicherbereich schreiben.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: BLOB-Inhalt direkt in Editor-Gadget?
Ja der umgekehrte Weg geht auch, da ist es dann PokeS() 
Michael Hack
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: BLOB-Inhalt direkt in Editor-Gadget?
Aber nicht das Nullbyte am Schluss vergessen. Bei Unicode sind es zwei Nullbytes.
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: BLOB-Inhalt direkt in Editor-Gadget?
Das mit dem Nullbyte habe ich noch nicht ganz verstanden, auch weil ich schon Probleme mit der Größe des für einen String bereitgestellten Bereichs habe. Dazu folgender Code:
Ausgegeben wird immer der richtige im EditorGadget gespeicherte Text, wobei aber die Länge immer 8 ist. Folglich werden auch nur die ersten 8 Zeichen im Blob gespeichert. Mein Fehler liegt an der falschen Verwendung von sizeof(), weil das nur angibt, wieviel Byte für ein(!) Zeichen der Kette berücksichtigt werden.
a) Wie kommt dann die 8 zustande? (eigentlich müsste es doch 1 sein, weil ASCII)
b) wie berechne ich die Länge richtig?
Das wäre doch dann mit dem Faktor 8 viel zu groß. Und was mache ich bei Unicode? (außer dann +2)
Code: Alles auswählen
EditGadText=GetGadgetText(Editgad)
size=SizeOf(EditGadText)
MessageRequester("Speichern",EditGadText+#LF$+"size="+Str(size))
If size
*mem = AllocateMemory(size)
PokeS(*mem,EditGadText,size,#PB_Ascii)
SetDatabaseBlob(DBNr,0,*mem,size)
EndIf
a) Wie kommt dann die 8 zustande? (eigentlich müsste es doch 1 sein, weil ASCII)
b) wie berechne ich die Länge richtig?
Code: Alles auswählen
size=SizeOf(EditGadText)*len(EditgadText)+1
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: BLOB-Inhalt direkt in Editor-Gadget?
Code: Alles auswählen
EditGadText=GetGadgetText(Editgad)
size = StringByteLength(EditGadText, #PB_UTF8) + SizeOf(character)
MessageRequester("Speichern", EditGadText + #LF$ + "size=" + Str(size))
If size
*mem = AllocateMemory(size)
PokeS(*mem, EditGadText, size, #PB_UTF8)
SetDatabaseBlob(DBNr, 0, *mem, size)
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: BLOB-Inhalt direkt in Editor-Gadget?
"SizeOf()" gibt dir die Größe des Datentyps zurück. Ein String ist nichts anderes als ein Pointer zu dem eigentlichen Text. Das heißt "SizeOf()" gibt dir hier die Größe des Pointers zurück. Bei einer 64-Bit-Architektur sind das eben 8 Byte.
Du brauchst "StringByteLength()" um die Länge des Strings zu erfassen.
EDIT:
ts-soft war schneller.
Du brauchst "StringByteLength()" um die Länge des Strings zu erfassen.
EDIT:
ts-soft war schneller.
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: BLOB-Inhalt direkt in Editor-Gadget?
ts-softs Code ist auch nicht korrekt. Natürlich fehlt da noch eine Überprüfung, ob *mem = 0 ist. Und ein 'FreeMemory()' fehlt auch.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: BLOB-Inhalt direkt in Editor-Gadget?
Ich hatte soviel damit zu tun, den Code ästhetischer aufzubauen, z.B. das Leerzeichen nach jedem Komma
,
das ich dann nicht mehr den Code völlig umbauen wollte, um sicherzustellen, das der Memory reserviert ist und auch
wieder freigegeben wird.
Man möge mir verzeihen.
das ich dann nicht mehr den Code völlig umbauen wollte, um sicherzustellen, das der Memory reserviert ist und auch
wieder freigegeben wird.
Man möge mir verzeihen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
