Ich bin ein Projekt in Delphi erstellen (RAD Studio). In einigen Zeilen werden Bilder in der Datenbanktabelle gespeichert. Ich möchte Bilder zur Laufzeit extrahieren (für die ich Array of TMemoryStream verwende) und sie im frxReport anzeigen.So speichern Sie mehrere Bilder aus der Datenbank in TMemoryStream zur Laufzeit und entpacken sie später
Schnipsel Mein Code wie folgt
Öffentliche Variable TStream als
erklärtStream2 : Array of TStream; i,k: integer
-Code-Segment für Schaltfläche klicken Ereignisansicht, die auf Mainform gelegt und zeigen frxReport erwartet.
`
procedure TFrmMain.btnViewClick(Sender: TObject);
begin
i := 0;
k := 0;
UniTable1.SQL.Text := 'Select * from userplays order by id';
UniTable1.Execute;
rowcount := UniTable1.RecordCount;
SetLength(myid, rowcount);
SetLength(mydesc, rowcount);
SetLength(myimg, rowcount);
SetLength(Stream2, rowcount);
while not UniTable1.Eof do
begin
try
Stream2[k] := TMemoryStream.Create;
myid[k] := UniTable1.FieldByName('id').Value;
Stream2[k] := UniTable1.CreateBlobStream(TBlobField(UniTable1.FieldByName('image')), bmRead);
mydesc[k] := UniTable1.FieldByName('description').Value;
UniTable1.Next;
inc(k);
finally
//Stream2[k].Free;
end;
end;
frxUserDataSet1.RangeEnd := reCount;
frxUserDataSet1.RangeEndCount := rowcount;
frxReport1.ShowReport;
i := 0;
end;
`
jedoch dieses Verfahren geladen ist kein Bild auf Stream2 Array. Es gibt eine Option jedoch Array von JPEGImage zu verwenden, wenn JPEGImage verwendet Array dann wäre es Problem sei es bei
procedure TFrmMain.frxReport1GetValue(const VarName: string; var Value: Variant);
`
Graphic := TJPEGImage.Create;
Graphic.LoadFromStream(Stream2[j]);
TfrxPictureView(frxreport1.FindObject('Picture1')).Picture.Graphic := Graphic;
` Bitte lassen Sie mich wissen, auf frxRaport anzuzeigen, wie man mach das.
was genau ist Delphi-Version, die Sie verwenden ??? Mein Vorschlag: Verwenden Sie einen Dateicontainer: .TAR oder .ZIP oder was auch immer - fügen Sie Dateien ein und legen Sie die Datei in das Datenbank-BLOB. In Delphi XE2 können Sie z. B. ZIP über TStream erstellen, ohne die Festplatte zu berühren. So können Sie direkt TMemoryStream oder TBLobStream verwenden, um viele Dateien innerhalb von –
zu enthalten. Ich benutze Delphi Version XE-3 –
dann ist das eine Möglichkeit für Sie, in-memory zip über den Stream zu machen und in DB zu setzen. ein sehr entfernter Code, aber erwähnen einige Klassen Methoden für Sie https://github.com/the-Arioch/avemey.com/blob/master/zexmlss/src/zeZippyXE2.pas –