![]() |
Datenbank: MS-SQL • Version: 2008 • Zugriff über: SDAC-Komponenten
Typ eines Blob Feldes Ermitteln
Hallo Delphi Fans,
als Newbee habe ich folgende Frage: In einer MS-SQL Datenbank sind Bilder verschieden Typ in einem BLOB gespeichert. (.jpg, .gif usw.) Nun muss ich diese per FTP auf eine WebSite hochlden. In einem DBImage kann ich die Bilder wunderbar anzeigen. Nun möchte ich aber ein Bild (z.B. 4000008.GIF) welches sich im BLOB befindet hochladen. Der Name des Bildes ist in diesem Fall eine Artikelnummer, die mir natürlich bekannt ist. Mein Problem ist dass ich keine Ahnung habe von welchem Typ das gespeicherte Bild ist. Frage: Wie kann ich den Grafiktyp einer in einem BLOB gespeicherten Grafik ermitteln ? Danke im voraus für Eure Hilfe |
Re: Typ eines Blob Feldes Ermitteln
Zitat:
> TImage könnte man mißbrauchen und dann schaut man nach, von welchem Typ das Picture ist ... "is TBitMap", "if Assigned(picture.Bitmap)" oder irgendwie so. > oder man schaut sich den Header (die ersten Bytes) der Datei/Daten an ... jedes Grafikformat hat eine bestimmte Signatur > und die Billigvariante schaut sich die Dateiendung an (welche aber nicht zuverlässig stimmen muß) oder du speicherst das Format in einem zusätzlichen Feld, dann mußt du die Datei einmal beim Abspeichern prüfen und brauchst dann nur noch dieses kleine Feld auslesen. |
Re: Typ eines Blob Feldes Ermitteln
Spendiere der Tabelle mit dem Blob-Feld noch eine Spalte mit dem genauen Typ.
|
Re: Typ eines Blob Feldes Ermitteln
Danke für die ersten Infos,
da die Tabelle aus einer 'Fremdanwendung' ERP-System stammt kann ich das mit der Typ-Spalte nicht realisieren. |
Re: Typ eines Blob Feldes Ermitteln
Doch, auslesen in Hilfstabelle und zusätzlichem eigenem Typ-Feld.
|
Re: Typ eines Blob Feldes Ermitteln
Danke für den Hinweis,
werde es mal auf diese Weise versuchen. Gruß DrNo |
Re: Typ eines Blob Feldes Ermitteln
Zitat:
Delphi-Quellcode:
function GetImgFormatFromField(AField: TField): MyImageType;
var fldBLOB: TBlobField; MemStream: TMemoryStream; ImgGraphic: TGraphic; imgFormat: array[1..3] of char; begin MyImageType := ImgUnknown; if (AField is TBlobField) then begin fldBLOB := TBlobField(AField); if not (fldBLOB.IsNull) then begin MemStream := TMemoryStream.Create(); try fldBLOB.SaveToStream(MemStream); MemStream.Position := 0; if (MemStream.Size > 3) then begin MemStream.Read(imgFormat, 3); if (imgFormat[1] = 'B') and (imgFormat[2] = 'M') then MyImageType := // BMP else if (imgFormat[1] = 'G') and (imgFormat[2] = 'I') and (imgFormat[3] = 'F') then MyImageType := // GIF else if (imgFormat[1] = #$FF) and (imgFormat[2] = #$D8) and (imgFormat[3] = #$FF) then MyImageType := // JPEG else if (imgFormat[1] = 'E') and (imgFormat[2] = 'X') and (imgFormat[3] = 'I') then MyImageType := // EXIF else if (imgFormat[1] = #$D7) and (imgFormat[2] = #$CD) and (imgFormat[3] = #$C6) then MyImageType := // WMF else MyImageType := ImgUnknown// anderes Format end; finally MemStream.Free; end; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz