![]() |
AW: JPG im Blob Feld wird extrem groß
Das, was zur Laufzeit in der Filename-Eigenschaft dieses Dialogs steht.
|
AW: JPG im Blob Feld wird extrem groß
Calikey, bevor hier einer der Beteiligten einen Herzinfarkt bekommt, oder entnervt aufgibt: Bitte lies Dir das durch:
![]() Ehrlich! Sherlock |
AW: JPG im Blob Feld wird extrem groß
Bin froh das man soviel gedult hat. Ich muss mich erst mal um meine kleine kümmern und lese mir heute abend denn link durch. Ich schreib dann heute abend weiter. Bedanke mich erst mal ganz herzlich bei allen die bis jetzt geholfen haben.
|
AW: JPG im Blob Feld wird extrem groß
So beim compelieren ist mir eine warnung auf gefallen
[dcc32 Warnung] doku.pas(171): W1036 Variable 'BlobStream' ist möglicherweise nicht initialisiert worden |
AW: JPG im Blob Feld wird extrem groß
nicht initialisiert = nichts zugewiesen
Delphi-Quellcode:
var
i: Integer; begin if i = 0 then ; // nicht initialisiert var i: Integer; begin i := 0; if i = 0 then ; // initialisiert |
AW: JPG im Blob Feld wird extrem groß
Heißt in Deinem Fall: Du greifst anscheinend auf die Variable zu, bevor CreateBlobStream aufgerufen wurde bzw. in bestimmten Fällen kann es sein, dass diese Methode gar nicht aufgerufen wird, Du greifst aber trotzdem auf die Variable zu. Wieso, weshalb, warum, das kannst nur Du wissen, wir kennen den Code ja nicht.
|
AW: JPG im Blob Feld wird extrem groß
So quellcode
bei BlobStream.Free; meldet er denn hinweis
Delphi-Quellcode:
type
TForm2 = class(TForm) Button1: TButton; Button2: TButton; odBlob: TOpenDialog; sdBlob: TSaveDialog; Button3: TButton; frxReport1: TfrxReport; Photo: TImage; procedure btnLoadClick(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure tPhotoAlbumAfterScroll(ClientDataSet1: TClientDataSet); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} uses Unit1, ABOUT; procedure TForm2.btnLoadClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if sdBlob.Execute then BlobStream := nil; FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); begin Form1.clientdataset1.Edit; try BlobStream := Form1.clientdataset1.CreateBlobStream(Form1.clientdataset1.FieldByName('Arbeitsvertragimg')AS TBlobField, bmWrite ); FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position); Form1.clientdataset1.Post; finally BlobStream.Free; // hier ist der hinweis FileStream.Free; Form1.clientdataset1.Post; tPhotoAlbumAfterScroll (Form1.clientdataset1) end; end; end; procedure TForm2.Button12Click(Sender: TObject); begin frxreport1.showreport; end; procedure TForm2.Button13Click(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if (sdBlob.Execute) then begin FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); BlobStream := Form1.clientdataset1.CreateBlobStream(Form1.clientdataset1.FieldByName('Arbeitsvertragimg'),bmRead); FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position); BlobStream.Free; FileStream.Free; end; end; procedure TForm2.FormCreate(Sender: TObject); begin Form1.clientdataset1.Open; end; procedure TForm2.tPhotoAlbumAfterScroll(ClientDataSet1: TClientDataSet); var JpegImage: TJPEGImage; BlobStream: TStream; begin if (not Form1.clientdataset1.FieldByName('Arbeitsvertragimg').IsNull) then begin BlobStream := Form1.clientdataset1.CreateBlobStream(Form1.clientdataset1.FieldByName('Arbeitsvertragimg'),bmRead); JpegImage := TJPEGImage.Create; try JpegImage.LoadFromStream(BlobStream); Photo.Picture.Assign(JpegImage); Photo.Visible := True; finally JpegImage.Free; BlobStream.Free; end; end else Photo.Visible := False; end; END. |
AW: JPG im Blob Feld wird extrem groß
Zitat:
[edit] Kleiner Tipp: drück doch mal STRG+D, damit der Code-Formatter die Einrückungen korrigiert, dann fällt so etwas schon rein optisch auf. [/edit] |
AW: JPG im Blob Feld wird extrem groß
Delphi-Quellcode:
Es fehlen einige begin und end
procedure TForm2.btnLoadClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if sdBlob.Execute then begin // <- BlobStream := nil; FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); begin Form1.clientdataset1.Edit; try BlobStream := Form1.clientdataset1.CreateBlobStream(Form1.clientdataset1.FieldByName('Arbeitsvertragimg')AS TBlobField, bmWrite ); FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position); Form1.clientdataset1.Post; finally BlobStream.Free; // hier ist der hinweis FileStream.Free; end; // <- Form1.clientdataset1.Post; tPhotoAlbumAfterScroll (Form1.clientdataset1) end; end; // <- end; end; |
AW: JPG im Blob Feld wird extrem groß
Ätsch, schneller :tongue:
|
AW: JPG im Blob Feld wird extrem groß
ok der hinweis ist weg danke :-)
nur leider wird immer noch nichts gespeichert. im debugger steht folgendes.
Delphi-Quellcode:
procedure TBlobField.SaveToFile(const FileName: string);
var Stream: TStream; begin Stream := TFileStream.Create(FileName, fmCreate); try SaveToStream(Stream); finally Stream.Free; end; end; procedure TBlobField.SaveToStream(Stream: TStream); var BlobStream: TStream; begin BlobStream := DataSet.CreateBlobStream(Self, bmRead); try Stream.CopyFrom(BlobStream, 0); finally BlobStream.Free; end; end; procedure TBlobField.SaveToStrings(Strings: TStrings); var BlobStream: TStream; begin BlobStream := DataSet.CreateBlobStream(Self, bmRead); try if DataType = ftWideMemo then Strings.LoadFromStream(BlobStream, TEncoding.Unicode) else Strings.LoadFromStream(BlobStream); finally BlobStream.Free; end; end; procedure TBlobField.SaveToStreamPersist(StreamPersist: IStreamPersist); var BlobStream: TStream; Size: Longint; Header: TBytes; GraphicHeader: TGraphicHeader; begin BlobStream := DataSet.CreateBlobStream(Self, bmRead); try Size := BlobStream.Size; if Size >= SizeOf(TGraphicHeader) then begin SetLength(Header, SizeOf(TGraphicHeader)); BlobStream.Read(Header, 0, Length(Header)); Move(Header[0], GraphicHeader, SizeOf(TGraphicHeader)); if (GraphicHeader.Count <> 1) or (GraphicHeader.HType <> $0100) or (GraphicHeader.Size <> Size - SizeOf(GraphicHeader)) then BlobStream.Position := 0; end; StreamPersist.LoadFromStream(BlobStream); finally BlobStream.Free; end; end; |
AW: JPG im Blob Feld wird extrem groß
Der VCL-Code nützt uns nichts, zeig uns lieber die Stelle in Deinem, direkt bevor er in die gezeigte Unit springt.
|
AW: JPG im Blob Feld wird extrem groß
Muss es denn sein die Bilder in der DB zu speichern?
Das ist eigentlich keine so gute Idee. Bilder sollten m.E. auf der Platte und nur der Pfad in der DB gespeichert werden. Gruss KH |
AW: JPG im Blob Feld wird extrem groß
Zitat:
Und ich halte es für besser die Bilder in der DB zu haben. |
AW: JPG im Blob Feld wird extrem groß
Wenn wir noch im letzten Jahrtausend wären, würde ich Dir da zustimmen :roll:
|
AW: JPG im Blob Feld wird extrem groß
Diese Diskussion hatten wir schon öfterst und kann nicht so eindeutig, wie von Dir hier angedeutet beantwortet werden. Das sollten wir auch nicht in diesem Thread.
|
AW: JPG im Blob Feld wird extrem groß
ok dann anderen weg wie muss ich denn um schreiben das ein pfad angelegt wird und der dann in der datenbank kommt. vieleicht funktioniert das dann besser als der blob
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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