![]() |
Blob Fehler: Blob nicht geöffnet
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:
die anzeige procedure ist aus platz und übersichts günden nicht komplett. das wesendliche ist aber zu sehn
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;
Delphi-Quellcode:
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.
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; 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 |
Re: Blob Fehler: Blob nicht geöffnet
hallo benutzername,
willkommen in der delphipraxis. :cheers: versuche mal deine daten direkt mirt der bde api zu speichern:
Delphi-Quellcode:
if dbisavechange(table1.handle)= dbierr_none then showmessage('daten gesichert');
paradox hat nämlich die angewohnheit nur zu speichern, wenn sie will :mrgreen: raik |
Re: Blob Fehler: Blob nicht geöffnet
Danke für die Antwort
gespeichert werden die Bilder problemlos. nur wenn ich sie nach dem speichern anzeigen will bekomme ich die meldung. wenn ich die DB öffne ohne ein bild zu speichern bekomme ich keine meldung und die bilder werden korrekt angezeigt. speichere ich wieder ein bild kommt der fehler. schließe ich die DB und öffne sie weider werden die bilder wieder korrekt angezeigt. :wink: ich schnall nur nicht warum?!? |
Re: Blob Fehler: Blob nicht geöffnet
mit der api von oben, wird die Table garantiert gespeichert, paradox speichert z.b. beim beenden des programmes.ansonsten wird es physikalisch nicht gespeichert. speichere mit der api ab und das blob ist garantiert in der db, so wird es immer im speicher gehalten .
raik |
Re: Blob Fehler: Blob nicht geöffnet
oki danke dir!
|
Re: Blob Fehler: Blob nicht geöffnet
Hallo Benutzername,
habe die gleiche Fehlermeldung und komme da nicht weiter. Benutze D5 und Dbase Tabelle. mit nachfolgendem Code sollte es doch funktionieren. Wo liegt da mein Fehler? Für Lösung wäre ich dankbar. Fritz01
Delphi-Quellcode:
procedure TDemoForm.WriteButtonClick(Sender: TObject);
var s: TStream; jpeg:TJpegImage; begin try Jpeg:=TJpegImage.Create; try with Table do begin Append; s:= CreateBlobStream(TBlobField(FieldByName('jpg')), bmWrite); Jpeg.SaveToStream(s); Post; end; except ShowMessage('Bild nicht gespeichert'); end; finally FreeAndNil(s); FreeAndNil(jpeg); ShowMessage('Bild gespeichert'); end; end; |
Re: Blob Fehler: Blob nicht geöffnet
Hallo,
neben dem erwähnten DbiSaveChanges(Table.Handle) würde ich noch ein Table.Refresh machen. Heiko PS: Oder besser gleich weg von Paradox ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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-2025 by Thomas Breitkreuz