Einzelnen Beitrag anzeigen

Benutzername

Registriert seit: 18. Apr 2004
7 Beiträge
 
#1

Blob Fehler: Blob nicht geöffnet

  Alt 18. Apr 2004, 11:04
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 = 'Volumethen 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
  Mit Zitat antworten Zitat