APPEND FROM me cierra VFP

611 views
Skip to first unread message

ultraton500

unread,
Apr 23, 2013, 8:34:36 PM4/23/13
to publice...@googlegroups.com
Hola colegas, estoy solicitando su ayuda porque la línea

APPEND FROM "&archivo" xls

me genera una ventana con el mensaje "Microsoft Visual FoxPro 9.0 SP2 dejó de funcionar" y cierra vfp.

He intentado obtener el error con

TRY
        APPEND FROM "&archivo " xls
CATCH TO oErr
        MESSAGEBOX(STR(oErr.ErrorNo)) 
ENDTRY

pero aparece la misma ventana y vfp se cierra sin mostrar el messagebox.

Probé de eliminarle registros al archivo .xls y ya no aparece la ventana de error pero obtengo el error 1661. Busqué en la ayuda y esta dice:

"El archivo de Microsoft Excel que intentó importar no es de la versión 5.0 o está dañado."

Alguien sabría cómo evitar que vfp se cierre? A alguien le pasó?
Desde ya les agradezco cualquier aporte.

Saludos,
Javier.

Daniel Sánchez

unread,
Apr 23, 2013, 8:38:25 PM4/23/13
to Comunidad de Visual Foxpro en Español
No seria mejor que pruebes de esta manera

append from (archivo) xls

ya que si usas "&archivo" pues toma literalmente lo que dice no es lo mismo &archivo, pero se recomienda donde se pueda usar mejor (archivo) en lugar de &.

Saludos


--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Martin Peveri

unread,
Apr 23, 2013, 8:40:29 PM4/23/13
to publice...@googlegroups.com
Una vez me paso algo parecido. Según el formato de excel que sea no lo importa. Proba poniendo XL5 en lugar de XLS.

ultraton500

unread,
Apr 23, 2013, 8:49:13 PM4/23/13
to publice...@googlegroups.com
Hola, gracias a ambos por su rápida respuesta.
Probé

append from (archivo) xls
append from (archivo) xl5
append from "&archivo" xl5

Pero sigue pasando exactamente lo mismo.
Les agradezco cualquier otra sugerencia.

Saludos,
Javier.

Martin Peveri

unread,
Apr 23, 2013, 8:53:26 PM4/23/13
to publice...@googlegroups.com
Mira si eso no funciono yo utilizaría el objeto excel. Algo como esto, fijate si te sirve

Try
*Instancio la DLL
loExcel = Createobject('Excel.Application')

*Trabajo sobre el objecto
With loExcel.Application
*Invible el archivo a abrir
.Visible = .F.
*Abro el archivo
.workbooks.Open("&lcRutaArh.")
*Cuento las columnas
lnCol = .ActiveSheet.usedrange.Columns.Count
*Le resto uno a la fila (Los nombre de los campos)
lnFil = .ActiveSheet.usedrange.Rows.Count - 1
*Recorro las filas desde la posiciòn 2 (donde empiezan los registros)
For lnj = 2 To lnFil
*Agrego un registro en blanco a la tabla
Select (xTabla)
Append Blank
*Recorro las columnas
For lni = 1 To lnCol
*Nombre del campo de destino
xcampo = .ActiveSheet.cells(1,lni).Value
*Se obtiene de la tabla el tipo de campo
xtipocampo = Type(xcampo)
*Tomo el valor de la celda
xvalor = .ActiveSheet.cells(lnj,lni).Value
Do Case
*Si el campo es fecha
Case xtipocampo="D"
*Si es fecha en blanco o en nulo
If Isnull(xvalor)
Replace &xcampo With Ctod(" / / ") In &xTabla
Else
*Inserto el valor
Replace &xcampo With Ttod(xvalor) In &xTabla
Endif
*Si es un campo char
Case xtipocampo="C"
*Por si en el excel el valor es entero
If Vartype(xvalor) = "N"
Replace &xcampo With Alltrim(Upper(Str(xvalor))) In &xTabla
Else
*Inserto el valor
Replace &xcampo With xvalor In &xTabla
Endif
*Si es numerico
Case xtipocampo="N"
*Si esta vacio inserto 0
If Isnull(xvalor)
Replace &xcampo With 0 In &xTabla
Else
*Inserto el valor
Replace &xcampo With Ttod(xvalor) In &xTabla
Endif
Endcase
Endfor
Endfor
*Cierro el archivo
.workbooks.Close
*Salgo del excel
.Quit
Endwith
*Limpio la variable
loExcel = .Null.
Release loExcel

Daniel Sánchez

unread,
Apr 23, 2013, 8:55:49 PM4/23/13
to Comunidad de Visual Foxpro en Español
Prueba realizando manual la selección del archivo con esto.

APPEND FROM ? type xls

Carlos Miguel FARIAS

unread,
Apr 23, 2013, 9:19:15 PM4/23/13
to Grupo Fox

El archivo excel es de una versión de excel 2003 o anteriores?

ultraton500

unread,
Apr 23, 2013, 11:48:31 PM4/23/13
to publice...@googlegroups.com
Muchas gracias Martín por el código, estoy intentando hacerlo funcionar. Por el momento me sucede que en la línea

xcampo = .ActiveSheet.cells(1,lni).Value

se guarda un valor nulo (.NULL.) en  xcampo y al hacer Type(xcampo) me aparece un error de tipo de datos.
Pero sigo intentando. Gracias nuevamente.

Saludos cordiales,
Javier.

ultraton500

unread,
Apr 23, 2013, 11:49:38 PM4/23/13
to publice...@googlegroups.com
Hola Daniel, gracias por la sugerencia. Probé pero sigue pasando lo mismo.

Saludos cordiales,
Javier.

ultraton500

unread,
Apr 24, 2013, 12:02:15 AM4/24/13
to publice...@googlegroups.com
Hola Miguel, por lo que me dice el excel se trataría de una versión 2003 o inferior.

Saludos cordiales,
Javier.

Martin Peveri

unread,
Apr 24, 2013, 8:37:11 AM4/24/13
to publice...@googlegroups.com
SI mal no recuerdo la primera linea del excel, tendría que tener los nombres de los campos de la tabla a la que se va a importar. Esto lo hice para un sistema que tuve que hacer y era de esa manera. Lo podes modificar a tu gusto.

En que registro te da null, en muchos o solamente en el primero?.

Saludos 

ultraton500

unread,
Apr 24, 2013, 11:14:23 AM4/24/13
to publice...@googlegroups.com
Hola Martín, saqué del excel una línea que había antes de la línea del nombre de las columnas y ahora, al ejecutar el código se me cuelga vfp.
Luego pude hacer que funcione  sin error al eliminarle varios registros al excel pero importa registros en blanco.
Espero poder solucionar este problema exigiendole al cliente que se importen archivos generados con versiones mas recientes de excel.
Te agradezco mucho por tu colaboración.

Saludos cordiales,
Javier.

Martin Peveri

unread,
Apr 24, 2013, 11:27:08 AM4/24/13
to publice...@googlegroups.com
Hola Mira esta linea :  

*Le resto uno a la fila (Los nombre de los campos)
lnFil = .ActiveSheet.usedrange.Rows.Count - 1

Es la que le resta el primer registro. Va directamente a la segunda.

Al debuguearlo, cuando toma el valor de la columna, tiene valor?.

Sino pasame el excel y lo reviso a ver que puede ser. Te digo yo tuve un problema muy similar y con esto lo pude resolver.

Saludos

German Abdala (g)

unread,
Apr 24, 2013, 2:17:04 PM4/24/13
to publice...@googlegroups.com
Gente, bs ts, espero q anden ok, por pedido de uno de mis hijos quiere
aprender a programar, estoy evaluando sobre que lenguaje, plataforma,
etc.. la idea es "jugar" un poco con resolucion de algoritmo, graficas,
matematicas,etc.-si alguien tiene una punta, alguna propuesta, muchas
gracias.- mi hijo tiene 15 años

Saludos, German

Carlos Alfaro

unread,
Apr 24, 2013, 3:04:59 PM4/24/13
to publice...@googlegroups.com
Podes bajar el siguiente documento en pdf, es sobre algoritmos.

https://dl.dropboxusercontent.com/u/40195551/AlgoritmosProgramacion%20-%20Guia%20para%20docentes.pdf

Bendiciones.

Carlos Alfaro

Carlos Miguel FARIAS

unread,
Apr 24, 2013, 3:32:39 PM4/24/13
to Grupo Fox

Le pegue una mirada pero lo veo excelente.
También, para programar, podes usar python (vi en python muchos de los conceptos de logo).
Es más, el mismo vfp, aun sin usar tablas, es muy bueno porque te permite usar cualquier paradigma.
Y si quiere dibujitos, no es tan difícil crear objetos de lineas u objetos imágenes y hacerlos bailar por la pantalla.
Saludos: Miguel, La Pampa (RA)

Ariel D'Alfeo

unread,
Apr 24, 2013, 4:00:36 PM4/24/13
to publice...@googlegroups.com
con visual studio 2010 trae un tutorial muy fácil para hacer un laberinto y otras cosas entretenidas.
-- 
Ariel D'Alfeo
Córdoba, Argentina

Moises Daniel Vilchez Tello

unread,
Apr 24, 2013, 4:06:05 PM4/24/13
to Comunidad de Visual Foxpro en Español
prueba con visual prolog
--
Moises Daniel Vilchez Tello
Chiclayo - Lambayeque - Peru

ultraton500

unread,
Apr 24, 2013, 4:29:40 PM4/24/13
to publice...@googlegroups.com
German, seguramente has cambiado el asunto de un correo para crear un tema nuevo pero existe un problema con eso, tu entrada queda dentro del hilo al que le cambiaste el asunto en lugar de crear un nuevo hilo. Lo puedes ver en:
Para crear un tema nuevo debes enviar un correo nuevo en lugar de reenviar uno cambiandole el asunto.

Saludos,
Javier.

Analyzer

unread,
Apr 24, 2013, 4:36:22 PM4/24/13
to Comunidad de Visual Foxpro en Español
Tanto VFP9 SP2 como Vb.net 2010 Express serían buenas opciones.

VFP es muy bueno para aprender, pero dile que tenga cuidado con la "Foxmanía" y que aprenda otros lenguajes también, para que no se envicie mucho con Fox, porque luego cualquier otro lenguaje lo verá dificil sin siquiera hacer el intento de aprenderlos, por aquello de que en Fox "todo es más fácil"..

En .Net basta con poner en uso el ensamblado para matemáticas o gráficos, para tener disponibles las funciones matemáticas que se deseen.

Con C#

using System.Math; 


Con Vb.net

Imports  System.Math; 


Para la programación web, javascript sería lo indicado, con html y css (eso porque el html y las css son lenguajes de etiquetas que no tienen las prestaciones de un lenguaje de programación standard como ciclos, etc, pero sí puede el html embeber lenguajes script como el js, perl, ruby, etc.)



Saludos!

German Abdala (g)

unread,
Apr 24, 2013, 5:08:12 PM4/24/13
to publice...@googlegroups.com
Javier, bs, tienes razon, disculpas.-

Gracias x todas las respuestas..

Saludos,
German
Reply all
Reply to author
Forward
0 new messages