Ir al contenido


Foto

Mostrar imagen BLOB de tabla SQLite3


  • Por favor identifícate para responder
4 respuestas en este tema

#1 Gil47

Gil47

    Newbie

  • Miembros
  • Pip
  • 8 mensajes

Escrito 15 julio 2012 - 01:00

Hola amigos,

Tengo basededatos SQLite3, con una tabla en la que una de sus columnas se llama Foto, tipo BLOB, y ya tiene fotos en formato JPEG.

En Lazarus, tengo TDBGrid1 y abajo TDBImage1 (donde se desea aparecezca la imagen BLOB).

Para TDBImage1, DataSource es DataSource1 (al igual que para el TDBGrid1).

Al abrir la basededatos, las columnas de la tabla se muestran correctamente, y en la columna Foto aparece la palabra (blob).

Usando el evento DBGrid1ColEnter, estoy tratando esto:



delphi
  1. procedure TForm1.DBGrid1ColEnter(Sender: TObject);
  2. VAR
  3.   L_FieldDataType : TLabel; //una Label, tambien en Form1, que visualmente verifica el tipo de dato del campo actual, y aparte para actuar codigo.
  4.  
  5. Begin
  6.  
  7.   L_FieldDataType.Caption:=Fieldtypenames[dbgrid1.SelectedField.DataType];  {capta el tipo de dato correctamente, y lo muestra}
  8.  
  9.     if L_FieldDataType.Caption = 'Blob' then
  10.  
  11.     begin
  12.  
  13.           DBImage1.Datafield := DBGrid1.SelectedColumn.FieldName; //No es suficiente esto para que se reciba la imagen de la tabla?
  14.  
  15. //Ideas tratadas, basadas en:  DBImage1.Picture := ?
  16.  
  17.       DBImage1.Picture := DBGrid1.SelectedColumn.Picture;
  18.             // error: SelectedColumn no tiene propiedad Picture
  19.  
  20.       DBImage1.Picture := DBGrid1.SelectedColumn.Field.CurValue;
  21.       // error: quiere Picture y no Variant
  22.  
  23.       // Que hacer, pues?
  24.  
  25. end; 
  26. End;



Si hay manera mas facil y mejor, de lograr esto, por supuesto lo agradezco, aunque tambien me interesa mucho saber como lograrlo de esta manera.

Gracias de antemano!




  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 15 julio 2012 - 07:51

¿El TLabel es para mostrar visualmente el tipo de campo ó sólo es para hacer la comparación?, pregunto porque en ningún momento creas el TLabel ni le asignas la posición, si es para hacer la comparación es mejor asignar la variable como del tipo string, así evitas usar componentes como variable:



delphi
  1. procedure TForm1.DBGrid1ColEnter(Sender: TObject);
  2.     VAR
  3.       L_FieldDataType : String; //Variable del tipo String no visual
  4.    
  5.     Begin
  6.    
  7.       L_FieldDataType := Fieldtypenames[dbgrid1.SelectedField.DataType];  {capta el tipo de dato correctamente, y lo muestra}
  8.       ShowMessage(L_FieldDataType); //Con esto verificamos si la variable obtiene algún valor
  9.  
  10.         if L_FieldDataType = 'Blob' then
  11. ......



Saludos.
  • 0

#3 Gil47

Gil47

    Newbie

  • Miembros
  • Pip
  • 8 mensajes

Escrito 15 julio 2012 - 03:13

¿El TLabel es para mostrar visualmente el tipo de campo ó sólo es para hacer la comparación?, pregunto porque en ningún momento creas el TLabel ni le asignas la posición, si es para hacer la comparación es mejor asignar la variable como del tipo string, así evitas usar componentes como variable:



delphi
  1. procedure TForm1.DBGrid1ColEnter(Sender: TObject);
  2.     VAR
  3.       L_FieldDataType : String; //Variable del tipo String no visual
  4.    
  5.     Begin
  6.    
  7.       L_FieldDataType := Fieldtypenames[dbgrid1.SelectedField.DataType];  {capta el tipo de dato correctamente, y lo muestra}
  8.       ShowMessage(L_FieldDataType); //Con esto verificamos si la variable obtiene algún valor
  9.  
  10.         if L_FieldDataType = 'Blob' then
  11. ......



Saludos.


El TLabel se pegó en Forma1 de un componente standard, y es tanto para mostrar el tipo de dato, como para comparar en codigo.

Todo funciona bien. La cuestion es como mostrar la imagen en el TDBImage cuando el dato actual del grid es tipo blob.

Ya tengo buen rato tratando de resolver esto.

Gracias.
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 15 julio 2012 - 03:19

A ver, ¿la imagen está en otra tabla?, ¿está en la misma tabla?, si es éste último, ¿el TDBImage está enlazado al mismo TDataSource del DBGrid?. No te podemos dar una solución definitiva si no nos das esos detalles y si exise algo más decírnoslo, soluciones hay bastantes, pero una u otra es más efectiva.

Saludos.
  • 0

#5 Gil47

Gil47

    Newbie

  • Miembros
  • Pip
  • 8 mensajes

Escrito 15 julio 2012 - 03:39

A ver, ¿la imagen está en otra tabla?, ¿está en la misma tabla?, si es éste último, ¿el TDBImage está enlazado al mismo TDataSource del DBGrid?. No te podemos dar una solución definitiva si no nos das esos detalles y si exise algo más decírnoslo, soluciones hay bastantes, pero una u otra es más efectiva.

Saludos.


Enecumene,

Aquí repito parte de la pregunta original. Creo que ahi aclara tus preguntas?


"Tengo basededatos SQLite3, con una tabla en la que una de sus columnas se llama Foto, tipo BLOB, y ya tiene fotos en formato JPEG.

En Lazarus, tengo TDBGrid1 y abajo TDBImage1 (donde se desea aparecezca la imagen BLOB).

Para TDBImage1, DataSource es DataSource1 (al igual que para el TDBGrid1).

Al abrir la basededatos, las columnas de la tabla se muestran correctamente, y en la columna Foto aparece la palabra (blob)."

Ojala me ayuden a resolver esto.

Gracias!

  • 0




IP.Board spam blocked by CleanTalk.