AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Typ eines Blob Feldes Ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Typ eines Blob Feldes Ermitteln

Ein Thema von DrNo · begonnen am 22. Mai 2010 · letzter Beitrag vom 23. Mai 2010
Antwort Antwort
DrNo

Registriert seit: 24. Feb 2007
Ort: Winterberg
3 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Typ eines Blob Feldes Ermitteln

  Alt 22. Mai 2010, 12:32
Datenbank: MS-SQL • Version: 2008 • Zugriff über: SDAC-Komponenten
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
Karl Gross
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#2

Re: Typ eines Blob Feldes Ermitteln

  Alt 22. Mai 2010, 12:38
Zitat von DrNo:
Frage: Wie kann ich den Grafiktyp einer in einem BLOB gespeicherten
Grafik ermitteln ?
Indem du diese ausließt und analysierst, bzw. analysieren läßt.

> 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Typ eines Blob Feldes Ermitteln

  Alt 22. Mai 2010, 12:39
Spendiere der Tabelle mit dem Blob-Feld noch eine Spalte mit dem genauen Typ.
Gruß
Hansa
  Mit Zitat antworten Zitat
DrNo

Registriert seit: 24. Feb 2007
Ort: Winterberg
3 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Typ eines Blob Feldes Ermitteln

  Alt 22. Mai 2010, 12:58
Danke für die ersten Infos,
da die Tabelle aus einer 'Fremdanwendung' ERP-System
stammt kann ich das mit der Typ-Spalte nicht realisieren.
Karl Gross
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Typ eines Blob Feldes Ermitteln

  Alt 22. Mai 2010, 17:18
Doch, auslesen in Hilfstabelle und zusätzlichem eigenem Typ-Feld.
Gruß
Hansa
  Mit Zitat antworten Zitat
DrNo

Registriert seit: 24. Feb 2007
Ort: Winterberg
3 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Typ eines Blob Feldes Ermitteln

  Alt 23. Mai 2010, 06:50
Danke für den Hinweis,
werde es mal auf diese Weise versuchen.
Gruß
DrNo
Karl Gross
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Typ eines Blob Feldes Ermitteln

  Alt 23. Mai 2010, 07:35
Zitat von himitsu:
Zitat von DrNo:
Frage: Wie kann ich den Grafiktyp einer in einem BLOB gespeicherten
Grafik ermitteln ?
Indem du diese ausließt und analysierst, bzw. analysieren läßt.
Ansatz (ungetestet, unvollständig)

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;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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