Como puedo grabar una imagen que tengo en un campo "General" a un "Archivo" (Ej: mi_imagen.jpg)

917 views
Skip to first unread message

NY

unread,
Nov 4, 2014, 4:28:50 PM11/4/14
to publice...@googlegroups.com
Hola todos

Recurro nuevamente a uds. porque no doy con la solución;

tengo una tabla con varios campos de tipo general, los que contienen distintas imagenes

necesito guardar esas imagenes en archivos (.jpg) en el Disco Duro, las que despues seran visualizadas por los usuario

con algun editor de imagenes.

(Trabajo en VisualFoxPro 7,0,  Windos XP y/o Windos 7)

Si me pueden ayudar,    Gracias     y si no      Tambien

Saludos

José Enrique Llopis

unread,
Nov 4, 2014, 4:53:00 PM11/4/14
to publice...@googlegroups.com

** Puedes grabar un campo general de la siguiente forma

 

x = FILETOSTR(GETFILE())

REPLACE template WITH x

 

*** Haciendo un append blank previamente, claro

 

 

*** Y recuperarlo es muy sencillo

 

SELECT ;

Template ;

FROM ;

      CATemplates ;

WHERE ;

      RefTemplate = 1 ;

INTO ;

      CURSOR csrCATemplates

 

Y después con, por ejemplo, un strtofile las puedes grabar a disco y tratarlas.

 

Ahora bien, si lo que pretendes es guardar imágenes en tablas VFP, en mi opinión, eso no es una buena idea, lo que pasa es que cuando guardas muchas imágenes las tablas pesan muchísimo y todo se vuelve muy, muy lento.

 

Lo que yo hago, no digo que sea lo mejor, solo lo que yo hago, es guardar el nombre del archivo de imagen en un campo de texto y recuperar la foto en dinámico.

 

Ten en cuenta de no grabar la ruta, solo el nombre, de esa forma puedes parametrizar el sitio donde vas a almacenar las imágenes y cambiarlo rápidamente, sin tener que hacer un proceso que modifique toda la tabla.

 

Un saludo,

Pepe Llopis

 

 

 

 

 


NY

unread,
Nov 4, 2014, 9:49:08 PM11/4/14
to publice...@googlegroups.com
Gracias José.  al probar lo que me indicas no funciona, aquie te dejo el codigo


* PRIMERA PARTE *
* ------------- *

CLOSE DATABASES
SELECT 0
    IF !FILE('c:\paso_2\imagenes.dbf')
       CREATE CURSOR imagenes( folio n(2), imagen g)
       else      
         USE c:\paso_2\imagenes
    ENDIF

x = FILETOSTR(GETFILE())
APPEND BLANK
REPLACE imagenes.folio  WITH RECNO()
REPLACE imagenes.imagen WITH x                   && Aqui da error TIPO DE DATO NO CORRESPONDE  (Ignoro para seguir)

                                                 && Si uso esta instruccion
APPEND GENERAL imagenes.imagen data getfile()    && No da error, agrega folio = 1 pero no agrega la imagen
browse

*copy to c:\paso_2\imagenes_2.dbf                && Para probar la segunda parte
CLOSE DATABASES



* SEGUNDA PARTE *                                && Aqui abro el cursor (imagenes_2)y agrego a mano la imagen con copy paste
* ------------- *                                && Lo que no seria necesario si la 1ra. parte funcionara


SELECT imagen FROM c:\paso_2\imagenes_2 WHERE  folio = 1 INTO CURSOR cursor_imagen

STRTOFILE(cursor_imagen->imagen,'c:\paso_2\Mi_imagen.jpg')     && Aqui da error TIPO DE DATO NO CORRESPONDE

ZeRoberto

unread,
Nov 4, 2014, 9:57:21 PM11/4/14
to publicesvfoxpro
Revisa el comando APPEND GENERAL

lcArchivo = GETFILE()
APPEND BLANK  && Add a blank record
APPEND GENERAL imagen FROM lcArchivo

ManVas

unread,
Nov 5, 2014, 9:40:28 AM11/5/14
to publice...@googlegroups.com
Pregunta: Es necesario que guardes la imagen? Esto hará que sea muy pesada tu tabla... Por qué no guardas únicamente la ruta (y nombre) de la imagen? Lo podrás visualizar en algun Form y/o editar con algún otro programa.

NY

unread,
Nov 5, 2014, 10:55:44 PM11/5/14
to publice...@googlegroups.com
Si uso  APPEND GENERAL imagen FROM lcArchivo  No funciona ya que al hacer doble click en el campo general NO MUESTRA la imagen sino que solo una referencia a ella

Por otro lado mi requerimiento dice claramente deseo guardar un archivo tipo "xxx.JPG" a partir de una imagen guardada en un campo general.  El GETFILE()obtiene el archivo del DD. y no del campo genera.



 
El martes, 4 de noviembre de 2014 23:57:21 UTC-3, Ze Roberto escribió:

ZeRoberto

unread,
Nov 5, 2014, 11:09:12 PM11/5/14
to publicesvfoxpro
Haber prueba esto

APPEND GENERAL imagen FROM lcArchivo CLASS "Microsoft Imager 2.0 Picture"

Saludos

José Enrique Llopis

unread,
Nov 6, 2014, 2:30:32 AM11/6/14
to publice...@googlegroups.com

Dependiendo del escenario puedes simular tú mismo la funcionalidad que deseas, por ejemplo imaginemos que estás mostrando la foto en un campo de imagen, puedes en el evento clic hacer lo siguiente:

 

Obtienes con un select o como quieras el stream de la imagen

Lo grabas a un archivo de trabajo con strtofile y sys(2023) para obtener el path temporal, realmente si lo estás mostrando ya tendrás este paso hecho.

A continuación lo editas con tu programa favorito, lo más sencillo es con macrosustitución, por ejemplo imagina que usas el paint:

 

lcComand = "RUN /n mspaint "+CHR(34)+lcNombrearchivoTemporalFoto+CHR(34)

&lcComando

 

También puedes codificar esto en un commandbutton o donde mejor te apañe.

 

En fin, soluciones hay, solo es cuestión de darle un par de vueltas al tema.

 

Un abrazo,

Pepe Llopis

 

 

 

 


Víctor Hugo Espínola Domínguez

unread,
Nov 6, 2014, 2:01:39 PM11/6/14
to publice...@googlegroups.com
Hola NY

Si no son muy numerosas las imágenes puede que este programa te sirva:

loForm = Createobject("EditGeneral")

loForm.Show(1)

loForm = Null

Release loForm

Define Class EditGeneral As Form

Top = 0
Left = 0
Height = 286
Width = 244
AutoCenter = .T.
DoCreate = .T.
Caption = "Form1"
Name = "Form1"

Add Object olbphoto As OleBoundControl With ;
Top = 37, ;
Left = 38, ;
Height = 180, ;
Width = 168, ;
TabIndex = 2, ;
ControlSource = "Photo", ;
Stretch = 2, ;
AutoActivate = 0, ;
Name = "olbPhoto"

Add Object command1 As CommandButton With ;
Top = 241, ;
Left = 80, ;
Height = 27, ;
Width = 84, ;
Caption = "\<Editar", ;
TabIndex = 1, ;
Name = "Command1"

Procedure Init
Use (_Samples + "Tastrade\Data\Employee")

Go Top
Endproc

Procedure command1.Click
Thisform.olbphoto.Refresh()
Thisform.olbphoto.DoVerb("Edit")
Skip
If Eof()
Messagebox("Fin del archivo")
Go Top
Endif
Endproc

Enddefine

Saludos,
Víctor.
Lambaré - Paraguay.
P.D.: Que te sirva de lección y jamás vuelvas a usar campos tipo General ;-)

Reply all
Reply to author
Forward
0 new messages