[Lazarus] TDBImage -AV [SOLVED] for Jpeg images

Osvaldo Filho arquivostcf at gmail.com
Fri Sep 5 17:48:47 CEST 2008


Thankyou Joost, i will change and test.

2008/9/4 Joost van der Sluis <joost at cnoc.nl>

> Your solution only works if you know for sure that the field contains a
> jpeg-image. The lazarus-code assumes that the blob-fields start with the
> extension from the image, so that it can 'detect' what kind of image it
> is.
> That means offcourse, that you also have to use a TDBEdit to place the
> image into the database. Or else the leading extension won't be there.
>
> But I think I saw something else which is strange.
>
> btw: maybe you could send a patch (diff -u) next time, that's easier to
> read for people who are used to it. This is kind of a puzzle, althoug
> maneagable.
>
> Op woensdag 03-09-2008 om 14:56 uur [tijdzone -0300], schreef Osvaldo
> Filho:
> > The problem, perhaps, is in s.readstring.
> > =================================
> > //dbimage.inc line 135
> >
> > procedure TDBImage.LoadPicture;
> > var //s        : TMemory; // ( lazarus team)
> >     s        : TMemoryStream; // ( mine )
> >     GraphExt : string;
> >     gc       : TGraphicClass;
> >     AGraphic : TGraphic;
> >
> > begin
> >   if not FPictureLoaded then
> >     begin
> >     FUpdatingRecord := True;
> >     if not assigned(FDatalink.Field) then
> > Picture.Assign(FDatalink.Field)
> >     else
> >     if FDatalink.field.IsBlob then
> >       begin
> >       if FDatalink.field is TBlobField then
> >         begin
> >         if FDatalink.Field.IsNull then
> >           begin
> >           Picture.Clear;
> >           exit;
> >           end;
> >     //FDataLink.DataSet.CreateBlobStream(FDataLink.Field,bmRead); //
> > (lazarus team)
>
> I guess this should be S:=FDatalink.Dataset.CreateBlobstream.....etc
> Maybe you also have to add the s.position := 0?
>
> >     s := TMemoryStream.create; // ( mine )
> >         (FDataLink.Field as TBlobField).SaveToStream(s); // ( mine )
> >         s.Position:= 0; // ( mine )
> >
> >         if (S=Nil) or (s.Size = 0) then
> >           begin
> >           Picture.Clear;
> >           exit;
> >           end;
> >         try
> >           //GraphExt :=  s.ReadAnsiString; // (lazarus team)
>
> Add 'gc := nil; AGraphic := nil;' here, as mentioned by someone else.
>
> >           // gc := GetGraphicClassForFileExtension(GraphExt); //
> > (lazarus team)
> >           //  if assigned(gc) then  // (lazarus team)
> >           //  begin   // (lazarus team)
> >
> >       Picture.Jpeg.LoadFromStream(s); // ( mine )
> >
> >       //AGraphic. := gc.Create;  // (lazarus team)
> >       //AGraphic.LoadFromStream(s);  // (lazarus team)
> >       //Picture.Assign(AGraphic);
> >             //end;
> >         finally
> >           //if assigned(AGraphic) then AGraphic.Free;  // (lazarus
> > team)
> >           s.Free;
> >         end {try}
> >
> >         end
> >       else
> >         Picture.Assign(FDataLink.FField);
> >       end;
> >     FUpdatingRecord := False;
> >     end;
> > end;
> > =================================
> >
> > 2008/9/2 Osvaldo TCF - Listas <arquivostcf at gmail.com>
> >         With my image: a .jpg file
> >         ---------------------------
> >         in dbimage.inc, line 163:
> >                try
> >                  GraphExt := s.ReadAnsiString;
> >
> >                  gc := GetGraphicClassForFileExtension(GraphExt);
> >                  if assigned(gc) then
> >                    begin
> >                    AGraphic := gc.Create;
> >                    AGraphic.LoadFromStream(s);
> >
> >                    Picture.Assign(AGraphic);
> >                    end;
> >         -------------------------------------------
> >
> >         gc is not assigned, is it correct?
> >         ==========================================================
> >
> >         The AV ocour here:
> >         dbimage.inc line 175
> >         ----------------------
> >                    Picture.Assign(AGraphic);
> >                    end;
> >                finally
> >         line 175>>  if assigned(AGraphic) then AGraphic.Free;
> >                  s.Free;
> >                end {try}
> >         ----------------------
> >
> >         Em Ter, 2008-09-02 às 10:34 +0200, Joost van der Sluis
> >         escreveu:
> >
> >
> >         > Op maandag 01-09-2008 om 12:05 uur [tijdzone -0300], schreef
> >         Osvaldo
> >         > Filho:
> >         > > I can not use tdbimage, access violation!
> >         > >
> >         > > loadpicture error?
> >         >
> >         > Hmm... I had that working with a few hacks. Maybe that it
> >         doesn't work
> >         > anymore with the latest image changes in Lazarus-svn. So
> >         which fpc and
> >         > lazarus version are you using?
> >         >
> >         > Joost
> >         >
> >         >
> >         > _______________________________________________
> >         > Lazarus mailing list
> >         > Lazarus at lazarus.freepascal.org
> >         > http://www.lazarus.freepascal.org/mailman/listinfo/lazarus
> >
> >
> >
> >
> > _______________________________________________
> > Lazarus mailing list
> > Lazarus at lazarus.freepascal.org
> > http://www.lazarus.freepascal.org/mailman/listinfo/lazarus
> --
>
> _______________________________________________
> Lazarus mailing list
> Lazarus at lazarus.freepascal.org
> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20080905/87eabacc/attachment-0007.html>


More information about the Lazarus mailing list