Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Blob Fehler: Blob nicht geöffnet (https://www.delphipraxis.net/20453-blob-fehler-blob-nicht-geoeffnet.html)

Benutzername 18. Apr 2004 11:04


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:
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

kiar 18. Apr 2004 15:28

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

Benutzername 18. Apr 2004 16:48

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?!?

kiar 18. Apr 2004 16:51

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

Benutzername 23. Apr 2004 15:22

Re: Blob Fehler: Blob nicht geöffnet
 
oki danke dir!

Fritz01 18. Jul 2006 21:39

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;

hoika 19. Jul 2006 08:11

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 08: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