![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: Delphi 7
JPG als blob in firebird-table speichern
Huhu DP-ler,
wie kann man ein jpg in ein Blob-Feld speichern und lesen? :stupid: 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 |
Re: JPG als blob in firebird-table speichern
Zitat:
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: JPG als blob in firebird-table speichern
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 |
Re: JPG als blob in firebird-table speichern
Zitat:
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:
Aufrufen tu ich die SaveJPG wie folgt:
insert into BLOBLTEST
(ID, TEXT, PIC) values (:ID, :TEXT, :PIC)
Code:
Zum lesen benutz ich:
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;
Code:
Es gibt keinerlei Exceptions aber wenn ich das Bild wieder lade ist d:\t.jpg 0 Byte groß!?
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; 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 |
Re: JPG als blob in firebird-table speichern
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; |
Re: JPG als blob in firebird-table speichern
Danke!
Gottes Segen |
Re: JPG als blob in firebird-table speichern
Ich werfe mal einen MySQL FAQ Link rein, der sich aber sicher auf alle Datenbanken bezieht, wäre hier sicher ein
interessanter Artikel. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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 by Thomas Breitkreuz