FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
que hago mal?
hola estoy intentando cargar una imagen de un campo blob desde un dataset pero me da error (access violation at adress....),
¿alguien me puede decir que hago mal? esta es la linea que falla: TBlobField(datasource1.DataSet.FieldByName('logo')).SaveToStream(Stream); este es el procedure que falla: procedure TForm1.muestraimagen(); var Stream: TMemoryStream; Jpg: TJpegImage; GraphType: TGraphType; begin Jpg := nil; Stream := nil; try Stream := TMemoryStream.Create; TBlobField(datasource1.DataSet.FieldByName('logo')).SaveToStream(Stream); if Stream.Size > 0 then begin Stream.Position := 0; Stream.Read(GraphType, 1); case GraphType of gtBitmap: Image1.Picture.Bitmap.LoadFromStream(Stream); gtIcon: Image1.Picture.Icon.LoadFromStream(Stream); gtMetafile: Image1.Picture.Metafile.LoadFromStream(Stream); gtJpeg: begin Jpg := TJpegImage.Create; Jpg.LoadFromStream(Stream); Image1.Picture.Assign(Jpg); end else Image1.Picture.Assign(nil); end; end else Image1.Picture.Assign(nil); except on e:exception do begin Image1.Picture.Assign(nil); showmessage(e.Message); end end; jpg.Free; Stream.Free; end; y este es el original que no falla (lo he probado): procedure TForm1.Table1AfterScroll(DataSet: TDataSet); var Stream: TMemoryStream; Jpg: TJpegImage; GraphType: TGraphType; begin Jpg := nil; Stream := nil; try Stream := TMemoryStream.Create; TBlobField(Table1.FieldByName('Graph')).SaveToStream(Stream); if Stream.Size > 0 then begin Stream.Position := 0; Stream.Read(GraphType, 1); case GraphType of gtBitmap: Image1.Picture.Bitmap.LoadFromStream(Stream); gtIcon: Image1.Picture.Icon.LoadFromStream(Stream); gtMetafile: Image1.Picture.Metafile.LoadFromStream(Stream); gtJpeg: begin Jpg := TJpegImage.Create; Jpg.LoadFromStream(Stream); Image1.Picture.Assign(Jpg); end else Image1.Picture.Assign(nil); end; end else Image1.Picture.Assign(nil); except Image1.Picture.Assign(nil); end; jpg.Free; Stream.Free; end; La cosa es que en el original se usa un TTABLE para acceder a la base de datos y en mi programa se asigna un dataset (procedente de un servicio web .net) a un datasource, los datos se muestran correctamente en un DBGRID, pero no consigo ver la imagen que hay en el campo LOGO (blob). muchas gracias!!! |
#2
|
||||
|
||||
Varios comentarios:
- ¿Cuál es la lógica de ese tratamiento de errores? - ¿Cuál es el sentido, de inicializar las variables Jpg y Stream? - ¿Existen garantías de que exista datasource1.DataSet.FieldByName('logo')? ... Este último punto, seguramente es la raíz de tu problema, primero tienes que saber si datasource1 tiene asignado un DataSet y luego si en este DataSet existe el campo ‘logo’: Por otro lado... ¿Seguro que no puedes acceder directamente al DataSet? Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
||||
|
||||
Manteniendo tu lógica:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
|
|
|