hallo ihrs
ich habe in meiner
paradox DB unter anderem bilder (jpegs) in blob feldern abgespeichert.
speichern funktioniert wunderbar. wenn ich mir die bilder aber nach dem speicher anzeigen lassen möchte bekomme ich immer den Fehler "Blob nicht geöffnet"
wenn ich die
DB schließe (alle Tables auf Active = false) und dann wieder öffne (alle Tables Active = true) werden die bilder normal und ohne Fehler angezeigt. füge ich wieder ein bild hinzu bekomme ich wieder den fehler.
hier mal die komplette funktion die die bilder schreibt
Delphi-Quellcode:
function TDB.AddVolume(const Serial: string; const VolumeType: Integer;
const Title, Description, Tags: string; Picture: string;
const IsPrivate: Boolean): Boolean;
var
blob: TStream;
Jpeg: TJpegImage;
begin
Result:= true;
try
Jpeg:= TJpegImage.Create;
try
with FTableVolume do begin
Append;
FieldByName('Serial').AsString:= Serial;
FieldByName('Type').AsInteger:= VolumeType;
FieldByName('Title').AsString:= Title;
FieldByName('Description').AsString:= Description;
FieldByName('Tags').AsString:= Tags;
FieldByName('Private').AsBoolean:= IsPrivate;
blob:= CreateBlobStream(TBlobField(FieldByName('Picture')), bmWrite);
if Length(Picture) > 0 then begin
Jpeg.LoadFromFile(Picture);
ResizeJpeg(Jpeg);
end;
Jpeg.SaveToStream(blob);
Post;
end;
except
Result:= false;
end;
finally
FreeAndNil(blob);
FreeAndNil(Jpeg);
end;
end;
die anzeige procedure ist aus platz und übersichts günden nicht komplett. das wesendliche ist aber zu sehn
Delphi-Quellcode:
procedure THtml.GeneratePage(Params: TStringList;
const Save: Boolean);
var
Page:
string;
Mode:
string;
ID:
string;
cnt: Integer;
Jpeg: TJpegImage;
blob: TStream;
begin
FHtmlPage.New;
Page:= Params.Values['
Page'];
Mode:= Params.Values['
Mode'];
ID:= Params.Values['
ID'];
Jpeg:= TJpegImage.Create;
try
if Page = '
Volume'
then begin
GenerateListPage;
with FHtmlPage
do begin
if (Mode = '
Show')
and (Params.Values['
Type'] <> '
')
and (ID = '
')
then
begin
ClearTmp;
AddLine(1, '
<div id="Text" align="center">Pfad:');
AddLine(2, '
[url="Browse.html?Page=Volume&Mode=Show&Cancel=false"]Datenträger[/url]/' + FDB.VolumeTypeToStr(TVolumeType(StrToInt(Params.Values['
Type']))));
AddLine(1, '
</div>');
AddLine(1, '
<table border="0" width="100%">');
FDB.TableVolume.IndexName:= '
Type';
FDB.TableVolume.SetKey;
FDB.TableVolume.FieldByName('
Type').AsInteger:= StrToInt(Params.Values['
Type']);
if FDB.TableVolume.GotoKey
then begin
FDB.TableVolume.IndexName:= '
Title';
FDB.TableVolume.First;
while not FDB.TableVolume.EOF
do begin
blob:= FDB.TableVolume.CreateBlobStream(TBlobField(FDB.TableVolume.FieldByName('
Picture')), bmRead);
ID:= FDB.TableVolume.FieldByName('
ID').AsString;
AddLine(2, '
<tr>');
AddLine(3, '
<td colspan="4"><div align="center">[img]Images/LineHSmall.jpg[/img]</div></td>');
AddLine(2, '
</tr>');
AddLine(2, '
<tr>');
// ----------------------------------
Jpeg.LoadFromStream(blob);
// <-------------------------- hier wird der Fehler angezeigt
// -----------------------------------
FreeAndNil(blob);
if (Jpeg.Height = 0)
and (Jpeg.Width = 0)
then begin
AddLine(3, '
<td>[img]Images/NoPicture.jpg[/img]</td>');
end else begin
Jpeg.SaveToFile(FApp.AppInfo.Dir + '
\Images\Tmp\Volume' + ID + '
.jpg');
FTmpFiles.Add('
Volume' + ID + '
.jpg');
AddLine(3, '
<td>[img]Images/Tmp/Volume' + ID + '
.jpg[/img]</td>');
end;
AddLine(3, '
<td width="40%">');
AddLine(4, '
<div id="MainText">[url="Browse.html?Page=Volume&Mode=Show&Type=' + Params.Values['
Type'] + '
&ID=' + ID + '
&Cancel=false"]' + FDB.TableVolume.FieldByName('
Title').AsString + '
[/url]</div>');
if FDB.TableVolume.FieldByName('
Private').AsBoolean
then begin
AddLine(4, '
<div id="Text">Privat</div>');
end else begin
AddLine(4, '
<div id="Text">Öffentlich</div>')
end;
AddLine(3, '
</td>');
AddLine(3, '
<td width="50%"><div id="Text">' + FDB.TableVolume.FieldByName('
Description').AsString + '
</div></td>');
AddLine(3, '
<td width="10%">');
AddLine(4, '
<div align="right">[url="Browse.html?Page=Volume&Mode=Edit&ID=' + ID + '
&Cancel=false"][img]Images/GotoEdit.jpg[/img][/url]');
AddLine(4, '
<div align="right">[url="Browse.html?Page=Volume&Mode=Show&Type=' + Params.Values['
Type'] + '
&ID=' + ID + '
&Action=DeleteVolume&Cancel=false"][img]Images/GotoDelete.jpg[/img][/url]');
AddLine(3, '
</td>');
AddLine(2, '
</tr>');
FDB.TableVolume.Next;
end;
end else begin
AddLine(2, '
<tr>');
AddLine(3, '
<td><div align="center">[img]Images/LineHSmall.jpg[/img]</div></td>');
AddLine(2, '
</tr>');
AddLine(2, '
<tr>');
AddLine(3, '
<td><div id="Text" align="center">Keine Elemente in dieser Ansicht</div></td>');
AddLine(2, '
</tr>');
end;
FDB.TableVolume.CancelRange;
AddLine(1, '
</table>');
ReplaceParam('
Bottom', TmpHtml);
end;
end;
end;
FHtmlPage.CloseParams;
if Save
then FHtmlPage.SaveToFile(FApp.AppInfo.Dir + '
\Browse.html');
finally
FreeAndNil(Jpeg);
FreeAndNil(blob);
end;
end;
der fehler wird auch produziert wenn ich den blob mit assigned prüfe. auch wenn ich die größe (mit size) des blobs prüfe oder mit isNull. sobald ich auf das blob zugreife erscheint die fehlermeldung.
ich hoffe jemand hat eine idee oder schon mal einen änlichen fehler gehabt. ich komme einfach nicht dahinter
danke schon mal im vorraus
mfg Benutzername