Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [erledigt] PNG in Datenbank SQLLite ablegen (https://www.delphipraxis.net/148080-%5Berledigt%5D-png-datenbank-sqllite-ablegen.html)

matashen 22. Feb 2010 09:47

Datenbank: SQLLite • Version: 3 • Zugriff über: dll

[erledigt] PNG in Datenbank SQLLite ablegen
 
Hallo,

ich hab mir das SQLLite Tutorial angesehen und möchte Datensätze, sowie Bilder in eine lokale Datenbank speichern.

Die Datensätze kann ich auch gut schreiben und lesen.

Sobald ich aber ein Bild ablegen will, bekomm ich eine Exception "Abstrakter Fehler".

Ich will dabei die Datei als PNG ablegen wegen Speicherplatzbedarf.

Delphi-Quellcode:
     
     sldb := TSQLiteDatabase.Create(DBFile);
     pngpic:=TPNGObject.Create;
     PNGpic.Assign(TBitmap(planmarker.image.Picture.bitmap));
     fs:=TStream.Create;
     pngpic.SaveToStream(fs);
woran könnte das liegen das der stream (fs) nicht in die Datenbank geschrieben wird und einen Abstrakten Fehler meldet??

Gruß Matthias

Bernhard Geyer 22. Feb 2010 09:53

Re: PNG in Datenbank SQLLite ablegen
 
TStream ist eine abstrakte Basisklasse. Nimm TMemoryStream.

xZise 22. Feb 2010 09:54

Re: PNG in Datenbank SQLLite ablegen
 
Moin,
das Problem ist, dass TStream eine abstrakte Klasse ist. Deshalb bekommst du den Fehler. Stattdessen solltest du ein Delphi-Referenz durchsuchenTFileStream oder Delphi-Referenz durchsuchenTMemoryStream nehmen. Da musst du mal gucken, was die SQLite Klasse den gerne hätte um darin Daten abzuspeichern.

MfG
Fabian

matashen 22. Feb 2010 09:59

Re: PNG in Datenbank SQLLite ablegen
 
Das Tutorial nimmt TFilestream, aber ich dachte immer ich muss dann auch eine Datei angeben die geladen wird. Wenn ich ein TFileStream.Create schreibe wird doch ein Dateiname erwartet?

DeddyH 22. Feb 2010 10:04

Re: PNG in Datenbank SQLLite ablegen
 
Dann nimm TMemoryStream, der wurde doch auch genannt.

xZise 22. Feb 2010 10:29

Re: PNG in Datenbank SQLLite ablegen
 
Um ausführlicher zu werden: TMemorystream ist quasi wie eine große Variable. Das heißt dort kannst du in den RAM dein Dateiinhalt schreiben oder daraus lesen.

MfG
Fabian

matashen 22. Feb 2010 15:03

PNG in Datenbank SQLLite ablegen
 
OK, Danke

mit TMemorystream funzt das.


Thema damit erledigt


Gruß Matthias


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz