FoxPro/Visual FoxPro - Cerrar un archivo abierto con GETPICT() FOXPRO

 
Vista:

Cerrar un archivo abierto con GETPICT() FOXPRO

Publicado por Domingo Gonzalez (2 intervenciones) el 20/04/2017 18:14:14
Saludos, tengo una aplicacion en visual foxpro, en dicha aplicacion tengo un formulario donde registro al personal de la empresa. Entre los datos del personal se encuentra una imagen tipo carnet que guardo en un directorio llamado fotos

el problema es el siguiente. Digamos que necesitamos actualizar la foto de PEDRO PEREZ, por que la que tenemos ya es muy vieja, entonces procedo a seleccionar una foto nueva y el sistema va y copia la imagen al directorio FOTOS hasta aqui todo bien, pero si de casualidad deseo de nuevo actualizar la foto sin haber cerrado el sistema el foxpro me manda el Siguiente error. ERROR 3 El archivo ya esta en uso.

Paso 1) ubico al la foto en mi computadora capturo la foto usando la funcion GETPiCT()
Paso 2) creo una variable con la ruta del directorio donde deseo guardar mi foto y con el nombre de la foto como la deseo guardar
Paso 3) Copio la imagen del Paso 1 al directorio del Paso 2

Ejemplo

Paso1: Seleccciono la Imagen desde mis documentos la imagen se llama pedro perez.jpg
Paso2: creo una variable con el nombre del DIrectorio y el nombre de Imagen como deseo que se guarde
Variable ="C:\sistema\Fotos\"+Alltrim(Thisform.TxtIdTrabajador.Value)+".jpg"
Paso3: Copio la Imagen a mi directorio Copy File ("&arichivo1") to &archivo2

este es el codigo
xfoto = GETPICT()
Thisform.TxtFoto.Value = xfoto
Thisform.image1.Picture = xfoto

archivo1 = Thisform.TxtFoto.Value
archivo2 = "C:\Sistema\FOTOS\"+ALLTRIM(Thisform.TxtIdTrabajador.Value)+".jpg"
COPY FILE ("&archivo1") to &archivo2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cerrar un archivo abierto con GETPICT() FOXPRO

Publicado por Fidel José (657 intervenciones) el 20/04/2017 22:08:00
Para evitar ese problema, en lugar de asignar la imagen al control, puedes hacer una copia de la imagen a una carpeta temporal y asignar la imagen temporal.
Lo que sigue es un ejemplo. Para la copia de imágenes utilizo ScriptingFileSystemObject para despreocuparme de los espacios que pueda contener el nombre de archivo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
* Se crea en el formulario una propiedad "FILEFOTO" con el método Assign
* Se crea en el formulario una propiedad "FOLDER_PHOTO" que contiene la carpeta de destino de imágenes
* Se crea en el formulario una propiedad "FOLDER_TEMP" que contiene el nombre de la carpeta temporal
*
* Windocum() es una función que devuelve la ruta de Mis Documentos
* ShowError() es una rutina que muestra y guarda los errores capturados por TRY/CATCH/ENDTRY
* Shell_Exec() es una rutina que muestra la imagen en el programa asignado al extensión del archivo imagen.
*
* Metodos del formulario
* FOTO_GET
* FOTO_ADD
* FOTO_QUIT
* FOTO_SHOW
*
* INIT DEL FORM
* ----------------
This.Foto_Get(ADDBS(This.Folder_Photo) + TRIM(Evaluate(lcCursor+"."+lcCampoImagen)))
 
* Method FILEFOTO_ASSIGN
* ----------------------
LPARAMETERS vNewVal
*To do: Modify this routine for the Assign method
LOCAL lREsult
IF !EMPTY(m.vNewVal)
	lResult = FILE(m.vNewVal)
ENDIF
 
* El commandgrup que permite Agregar,Quitar y Ampliar imagen.
with this.Marco1.Pers1.CmFotos
	.Buttons(1).Enabled= !m.lResult
	.Buttons(2).Enabled= m.lREsult
	.Buttons(3).Enabled= m.lREsult
ENDWITH
 
* El control que soporta la imagen
with tHISFORM.Marco1.Pers1
	.Image1.Visible = m.lREsult
	.Image1.Picture = EVL(m.vNewVal,"")
endwith
THIS.filefoto = m.vNewVal
 
 
* Method FOTO_GET
* ----------------
LPARAMETERS tcFile
TRY
	LOCAL loFso as Object,;
		lcTargetFile,;
		loex as Exception
 
	tcFile = ALLTRIM(m.tcFile)
	lcTargetFile = ""
 
	loFso = NEWOBJECT("Scripting.FileSystemObject")
 
	IF loFso.FileExists(m.tcFile)
		lcTargetFile = FORCEEXT(ADDBS(This.Folder_temp)+SYS(2015),JUSTEXT(m.tcFile))
		loFso.Copyfile(m.tcFile,m.lcTargetFile)
	ENDIF
CATCH TO loex
	loex.UserValue = PROGRAM()
	ShowError(loex)
FINALLY
	loFso = null
ENDTRY
RETURN m.lcTargetFile
 
 
* Agregar una Imagen.
thisform.filefoto = thisform.foto_add()
IF !EMPTY(thisform.filefoto)
	SELECT (lcCursor)
	REPLACE (lcCampoImagen) WITH JUSTFNAME(thisform.filefoto)
ENDIF
 
* Method FOTO_ADD
* ----------------
TRY
	LOCAL lcFolder,lcFolderDocum,;
		lcFileImage,;
		lcFileTarget,;
		loFso as Object,;
		loex as Exception
 
	loFso = NEWOBJECT("Scripting.FileSystemObject")
	lcFolder = FULLPATH("")
	lcfolder_Docum = Windocum()
	CD &lcFolder_Docum
	lcFileImage = GETFILE("jpg;png;bmp")
	CD &lcFolder
 
	IF !EMPTY(m.lcfileImage)
		IF LOWER(JUSTPATH(m.lcFileImage)) # LOWER(this.folder_photo)
			lcFileTarget = ADDBS(this.folder_photo)+JUSTFNAME(m.lcfileImage)
			loFso.CopyFile(m.lcfileImage,m.lcfileTarget)
		ELSE
			lcFileTarget = m.lcFileImage
		ENDIF
	ENDIF
CATCH TO loex
	loex.UserValue = PROGRAM()
	ShowError(loex)
FINALLY
 
ENDTRY
RETURN m.lcFileTarget
 
* Method FOTO_QUIT
* ----------------
SELECT (lcCursor)
REPLACE (lcCampoImagen) WITH ""
Thisform.Filefoto=""
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cerrar un archivo abierto con GETPICT() FOXPRO

Publicado por Domingo Gonzalez (2 intervenciones) el 21/04/2017 14:22:26
Gracias por responder tan rapido voy a ajustar todo el codigo el dia de hoy para adoptar tu recomendacion y te notifico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar