AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi JPG als blob in firebird-table speichern
Thema durchsuchen
Ansicht
Themen-Optionen

JPG als blob in firebird-table speichern

Ein Thema von Meta777 · begonnen am 2. Mai 2005 · letzter Beitrag vom 3. Mai 2005
Antwort Antwort
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

JPG als blob in firebird-table speichern

  Alt 2. Mai 2005, 17:52
Datenbank: Firebird • Version: 1.5 • Zugriff über: Delphi 7
Huhu DP-ler,

wie kann man ein jpg in ein Blob-Feld speichern und lesen?
Habe schon einiges hier und dort gelesen, auch die OH bietet ja ein Beispiel, aber alle benutzen ein TClientDataSet oder TTable oder ähnliches. Ich bin jedoch auf der Suche nach einer Möglichkeit das ganze über eine einfache TIBQuery zu realisieren.
Falls ihr eine Idee, nen Tut oder sonstiges habt, bitte posten!

Danke & Gottes Segen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: JPG als blob in firebird-table speichern

  Alt 2. Mai 2005, 21:21
Zitat:
Habe schon einiges hier und dort gelesen
Hättest du mal nur die Erbgeschichte von TIBQuery studiert. Was mit TTable funktioniert, funktioniert auch mit TIBQuery, da beide mit TFields arbeiten. Na ja, du bist zu faul zum Lesen und ich bin zu faul zum Testen - ich denke wir sind quitt.

Delphi-Quellcode:
function LoadJpeg(dbField: TField; jpeg: TJPegImage): boolean;
var
  s: TStream;
begin
  s := dbField.DataSet.CreateBlobStream(dbField, bmRead);
  Result := false;
  try
    jpeg.LoadFromStream(s);
    Result := true;
  finally
    s.Free;
  end;
end;

function SaveJpeg(dbField: TField; jpeg: TJPegImage): boolean;
var
  s: TStream;
begin
  s := dbField.DataSet.CreateBlobStream(dbField, bmWrite);
  Result := false;
  try
    jpeg.SaveToStream(s);
    Result := true;
  finally
    s.Free;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#3

Re: JPG als blob in firebird-table speichern

  Alt 3. Mai 2005, 06:39
Könntest Du das mal als kleines Beispiel mit dem: LoadJpeg und SaveJpeg
in einer query aufzeigen ???

tät mich escht interessieren... danke für Deine Geduld


Andreas
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: JPG als blob in firebird-table speichern

  Alt 3. Mai 2005, 11:13
Zitat von marabu:
Hättest du mal nur die Erbgeschichte von TIBQuery studiert. Was mit TTable funktioniert, funktioniert auch mit TIBQuery, da beide mit TFields arbeiten. Na ja, du bist zu faul zum Lesen und ich bin zu faul zum Testen - ich denke wir sind quitt.

Also, dass du mich besser kennst als ich mich selbst überrascht mich fast ein wenig...
Aber wahrscheinlich hät ich zu meinen posting einfach noch ein paar Details schreiben sollen.
Nuja, also soweit war ich auch schon. Dein source geht nicht. Jedenfalls nicht ohne weiteres.
Ich hab der SaveJpg noch "dbField.DataSet.Edit;" und "dbField.DataSet.Post;" hinzugefügt.
der query hab ich auch dem "UpdateObject" ein TIBUpdateSQL zugewiesen (und auch das SQL generieren lassen). Hier mal das SQL für "insert":
SQL-Code:
insert into BLOBLTEST
  (ID, TEXT, PIC)
values
  (:ID, :TEXT, :PIC)
Aufrufen tu ich die SaveJPG wie folgt:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  pic: TJPEGImage;
begin
  pic := TJPEGImage.Create;
  pic.LoadFromFile('d:\test.jpg');
  try
    if SaveJpeg(ibqBlob.FieldByName('PIC'), pic) then begin
      ibqBlob.Transaction.Commit;
    end;
  finally
    pic.Free;
  end;
end;
Zum lesen benutz ich:
Code:
procedure TForm1.Button2Click(Sender: TObject);
var
  pic: TJPEGImage;
begin
  pic := TJPEGImage.Create;
  if LoadJpeg(ibqBlob.FieldByName('PIC'), pic) then begin
    pic.SaveToFile('D:\t.jpg');
  end;
end;
Es gibt keinerlei Exceptions aber wenn ich das Bild wieder lade ist d:\t.jpg 0 Byte groß!?
Was mach ich falsch?

Bin für jeden Hinweis dankbar.

PS: Hier das Script für die Test-Tabelle:
SQL-Code:
CREATE TABLE BLOBLTEST (
    ID INTEGER NOT NULL,
    TEXT VARCHAR(10),
    PIC BLOB SUB_TYPE 0 SEGMENT SIZE 2048
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: JPG als blob in firebird-table speichern

  Alt 3. Mai 2005, 11:42
Hi,

habe jetzt doch mal getestet. Dabei musste ich zu meiner Schande feststellen, dass ich den Code für den ADO/OLEDB Zugriff einfach angepasst hatte, ohne das Handbuch vorher zu lesen. Im Gegensatz zu AdoQuery ist IbQuery eine Nur-Lesen-Komponente. Die Vorgehensweise unterscheidet sich dann etwas. Hoffentlich kommst du mit meinem Code klar.

Zerknirschte Grüße vom marabu

Delphi-Quellcode:
procedure ibLoadJpeg(q: TIBQuery; fieldName: string; jpeg: TJpegImage);
var
  s: TStream;
begin
  s := q.CreateBlobStream(q.FieldByName(fieldName), bmRead);
  jpeg.LoadFromStream(s);
  s.Free;
end;

function ibSaveJpeg(q: TIBQuery; paramName: string; jpeg: TJpegImage): boolean;
var
  s: TMemoryStream;
begin
  s := TMemoryStream.Create;
  jpeg.SaveToStream(s);
  q.ParamByName(paramName).LoadFromStream(s, TBlobType(0));
end;

procedure TMainForm.LoadBtnClick(Sender: TObject);
begin
  Q.SQL.Text := 'SELECT passphoto FROM s3gallery WHERE persnr = 123';
  Q.Open;
  ibLoadJpeg(q, 'passphoto', photo);
  Q.Close;
end;

procedure TMainForm.SaveBtnClick(Sender: TObject);
begin
  Q.SQL.Text := 'UPDATE s3gallery SET passphoto = :passphoto WHERE persnr = 123';
  ibSaveJpeg(Q, 'passphoto', photo);
  Q.ExecSQL;
end;
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: JPG als blob in firebird-table speichern

  Alt 3. Mai 2005, 14:53
Danke!

Gottes Segen
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#7

Re: JPG als blob in firebird-table speichern

  Alt 3. Mai 2005, 15:21
Ich werfe mal einen MySQL FAQ Link rein, der sich aber sicher auf alle Datenbanken bezieht, wäre hier sicher ein
interessanter Artikel.

16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  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 21:06 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