Copiar cursor a tabla fisica

1,045 views
Skip to first unread message

pepemil

unread,
Mar 28, 2012, 7:55:15 AM3/28/12
to Comunidad de Visual Foxpro en Español
En esta rutina estoy tratando de pasar a una tabla los resultados con
esto pero no funciona cual es el error ?

estoy usando esto

use filtrados
append from cursor destino

INSERT INTO filtrados (n1,n2,n3) ;
SELECT n1,n2,n3 FROM destino

**********************
USE filtrados
USE Destino && tabla o cursor con 6 columnas

crea cursor Destino ( n1 c(2), n2 c(2), n3 c(2), n4 c(2), n5 c(2), n6
c(2) )
LOCAL ARRAY laNumeros[35], laDestino[6]
= ALINES( laNumeros, "05 06 07 09 10 11 15 16 17 ", " " )
laNumeros[1] = 10
laNumeros[2] = 12
laNumeros[3] = 14
laNumeros[4] = 34
laNumeros[5] = 35
laNumeros[6] = 40
laNumeros[7] = 45
laNumeros[8] = 46
laNumeros[9] = 47
*laNumeros[10] = 49

lnQ = ALEN( laNumeros )
FOR I = 1 TO lnQ
FOR J = I+1 TO lnQ
FOR K = J+1 TO lnQ
FOR L= K+1 TO lnQ
FOR M = L+1 TO lnQ
FOR N = M+1 TO lnQ
laDestino[1] = laNumeros[I]
laDestino[2] = laNumeros[J]
laDestino[3] = laNumeros[K]
laDestino[4] = laNumeros[L]
laDestino[5] = laNumeros[M]
laDestino[6] = laNumeros[N]
APPEND BLANK
GATHER FROM laDestino
ENDFOR
ENDFOR
ENDFOR
ENDFOR
ENDFOR
ENDFOR

*****copiar a tabla fisica


use filtrados
append from cursor destino -------no va

INSERT INTO filtrados (n1,n2,n3) ;
SELECT n1,n2,n3 FROM destino -----------este tampoco

Gracias
pepemil

Pablo Daniel Lissa

unread,
Mar 28, 2012, 8:01:16 AM3/28/12
to Comunidad de Visual Foxpro en Español
Hola:

Podrías probar con:
USE filtrados
APPEND FROM DBF("nombreDelCursor")

Saludos.
--------------------------------------------------------------------------------------------

Aldo Valente

unread,
Mar 28, 2012, 8:58:52 AM3/28/12
to publice...@googlegroups.com
DISCULPEN
Y SI SE PRUEBA SELECT * FROM CURSOR INTO TABLE NOMBRETABLA

-----Mensaje original-----
De: publice...@googlegroups.com
[mailto:publice...@googlegroups.com] En nombre de Pablo Daniel Lissa
Enviado el: miércoles, 28 de marzo de 2012 09:01 a.m.
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Re: Copiar cursor a tabla fisica

Hola:

Saludos.
----------------------------------------------------------------------------
----------------


__________ Información de ESET NOD32 Antivirus, versión de la base de firmas
de virus 7005 (20120328) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com


__________ Información de ESET NOD32 Antivirus, versión de la base de firmas
de virus 7005 (20120328) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com


Douglas Sánchez Guillén

unread,
Mar 28, 2012, 9:58:41 AM3/28/12
to publice...@googlegroups.com

Hola que tal, yo probe tu ejemplo y funciona correctamente. claro lo unico malo que veo en tu codigo que dices USE DESTINO
Y abajo declarar create cursor. use no es necesario cuando usas create lo pones en uso en el area 0 o ultima disponible.

create cursor Destino ( n1 c(2), n2 c(2), n3 c(2), n4 c(2), n5 c(2), n6 c(2))
SELECT destino
COPY STRUCTURE TO filtrados &&&&& copio la estructura del cursor asumo que usas la misma
USE filtrados IN 0

SELECT destino
INSERT INTO filtrados (n1,n2,n3) SELECT n1,n2,n3 FROM destino
Wait Windows "Tu codigo funciona" nowait
selec filtrados
brow

TheNewInquirer

unread,
Mar 28, 2012, 11:35:30 AM3/28/12
to Comunidad de Visual Foxpro en Español
Es que a pepemil le gustan las matemáticas. Ya lo mencionó antes
jeje..

Pero quizás hay formas más simples o modernas de hacer lo que desea.

Aunque a mi me gustaría entender bien los arreglos jaja!

Saludos!

Carlos Miguel FARIAS

unread,
Mar 28, 2012, 12:00:47 PM3/28/12
to publice...@googlegroups.com
En vfp, un arreglo es un conjunto de variables que tienen el mismo
nombre y se diferencian entre si por 1 o 2 subindices.
En fox, cada elemento del arreglo puede contener cualquier cosa
(numeros, texto, fechas, objetos).
Hay muchas funciones que permiten manejar los arreglos como conjunto,
por ejemplo, ordenar los valores, buscar un valor, etc.
Ahora, si vos como programador no manejas arreglos, realmente tu
preparación dista mucho de ser pasable.
Nosotros en un cuatrimestre, cuando en la carrera de CPN se enseñaba
programación, lograbamos que los estudiantes manejaran el concepto de
arreglo (una dimension) y tambien corte de control.
Y lograban codificar esos programas (en Fox).
Saludos: Miguel, La Pampa (RA)


El 28/03/12, TheNewInquirer <thenewin...@gmail.com> escribió:

Carlos Miguel FARIAS

unread,
Mar 28, 2012, 12:04:19 PM3/28/12
to publice...@googlegroups.com
El 28/03/12, Carlos Miguel FARIAS <carlosmig...@gmail.com> escribió:

Walter R. Ojeda Valiente

unread,
Mar 28, 2012, 12:11:56 PM3/28/12
to publice...@googlegroups.com
Estoy de acuerdo con Carlos Miguel, yo uso mucho los arreglos y desde siempre me parecieron una de las construcciones más útiles que tienen los lenguajes de programación. Te facilita la tarea y además la tienes más ordenada y organizada. He visto muchos programas ajenos que no usan arreglos, pudiendo haberlos usado, y realmente dan lástima. O como diríamos por aquí: "vergüenza ajena".

Conocer muy bien los arreglos es fundamental para cualquier buen programador.

Saludos.

Walter.



> Date: Wed, 28 Mar 2012 13:00:47 -0300
> Subject: Re: [vfp] Re: Copiar cursor a tabla fisica
> From: carlosmig...@gmail.com
> To: publice...@googlegroups.com

pepemil

unread,
Mar 28, 2012, 2:17:18 PM3/28/12
to Comunidad de Visual Foxpro en Español
Hola bueno a mi me da error " error de sintaxis " con los otros
también me da errores

Bien os contare un poco de mi :) Por que los arreglos me aturden

Edad 51 años jeje cuando use mi primera Pc era un apple 286 sin disco
duro, había que cargar primero msdos a traves de un disco flexible y
al apagarla zas ,bien estudie cobol y pascal par de años. (ni me
acuerdo jeje) soy mecánico de profesión y me interese en hacer
programas de talleres lo típico, mantenimiento facturación. bien por
ser foxpro ideal para bases de datos y me gusta la forma de
programación me empeñe en aprenderlo apunta de yo mismo.bien eso fue
años luz ya, de cuando se programaba a pie. la época de los get,para
hacer unos filtros te comes media memoria ;) etc pero me gustaba pasar
horas programando mil lineas y despues ver el error uff...
he aprendido htlm , un poco de php ,de java pero me sigue gustando
Foxpro

Por eso os pido un poco de paciencia jejejej pero me gusta programar
no lo puedo evitar y cada ves que regreso a casa me pongo a ello,

gracias a todos por la atencion

pepemil

INSERT INTO filtrados (n1,n2,n3) SELECT n1,n2,n3 FROM destino
Wait Windows "Tu codigo funciona" nowait
selec filtrados
brow

On 28 mar, 15:58, Douglas Sánchez Guillén <douglas...@gmail.com>
wrote:

pepemil

unread,
Mar 28, 2012, 2:42:30 PM3/28/12
to Comunidad de Visual Foxpro en Español
Bueno solucionado gracias Aldo

SELECT * FROM destino INTO TABLE filtrados2


saludos
pepemil

TheNewInquirer

unread,
Mar 28, 2012, 2:54:05 PM3/28/12
to Comunidad de Visual Foxpro en Español
Si me quieren echar una mano y ayudarme a entender los arreglos
échenle un ojito a este hilo donde pregunte cómo se entendían pero
entiendo que son personas muy ocupadas como tambien es mi caso.

http://groups.google.com/group/publicesvfoxpro/browse_thread/thread/89b5f2a98b98afd0/f6065a541877392b?lnk=gst&q=arreglos#f6065a541877392b


Gracias!

TheNewInquirer

unread,
Mar 28, 2012, 2:56:00 PM3/28/12
to Comunidad de Visual Foxpro en Español
Por cierto que eso de los "cortes de control"?...

Es como lo de exit y loop en los bucles?...

Es que me confunde el término..

Carlos Miguel FARIAS

unread,
Mar 28, 2012, 5:22:13 PM3/28/12
to publice...@googlegroups.com
El corte de control en un algoritmo estructurado es la forma de agrupar registros o datos que usas con el GROUP BY de sql.
O sea, si tenes una tabla con por ejemplo idempleado y horastrabajadas y queres el total por empleado. Con sql haces:

 select idempleado, SUM( horastrabajadas ) from Tabla GROUP BY idempleado.

En un algoritmo estructurado...
USE Tabla
empleadoanterior = idempleado
totalHoras = 0
GO TOP
SCAN
   IF idempleado<>empleadoanterior && aca se produce el corte de control
      ? empleadoanterior, totalHoras
      empleadoanterior = idempleado
      totalHoras = 0
   ENDIF
   totalHoras = totalHoras + horastrabajadas
ENDSCAN
? empleadoanterior, totalHoras

Saludos: Miguel, Santa Rosa (LP)

Víctor Hugo Espínola Domínguez

unread,
Mar 28, 2012, 7:42:13 PM3/28/12
to publice...@googlegroups.com
Otro enfoque, con dos cortes de control:

USE Tabla

GO TOP
TotalHorasEmpresa = 0
DO WHILE ! EOF()
   TotalHorasDepartamento = 0
   DepartamentoAnterior   = IdDepartamento
   DO WHILE DepartamentoAnterior = IdDepartamento
     TotalHorasEmpleado     = 0
     EmpleadoAnterior       = IdEmpleado
          DO WHILE EmpleadoAnterior = IdEmpleado AND DepartamentoAnterior = IdDepartamento 
               TotalHorasEmpleado = TotalHorasEmpleado + HorasTrabajadas
        SKIP
     ENDDO
     ? EmpleadoAnterior, TotalHorasEmpleado
     TotalHorasDepartamento = TotalHorasDepartamento + TotalHorasEmpleado
   ENDDO
   ? DepartamentoAnterior, TotalHorasDepartamento
   TotalHorasEmpresa = TotalHorasEmpresa + TotalHorasDepartamento
ENDDO
? "Total Empresa: ", TotalHorasEmpresa

Saludos, Víctor

Walter R. Ojeda Valiente

unread,
Mar 28, 2012, 8:33:43 PM3/28/12
to publice...@googlegroups.com
No.

Corte de control se llama cuando tienes muchos datos ordenados, repitiéndose varias veces y al pasar de un registro al siguiente cambia el valor. Por ejemplo:

Vendedor    Importe
-----------------------
    01            2560
    01            3120
    01            1840
    02            2500
    02            3200
    03            1920

En este caso, el corte de control se haría por el código del Vendedor ya que los datos están ordenados según ese criterio.

Saludos.

Walter.



> Date: Wed, 28 Mar 2012 11:56:00 -0700
> Subject: [vfp] Re: Copiar cursor a tabla fisica
> From: thenewin...@gmail.com
> To: publice...@googlegroups.com

TheNewInquirer

unread,
Mar 28, 2012, 10:49:14 PM3/28/12
to Comunidad de Visual Foxpro en Español
Gracias por el curso sobre cortes de control! Nunca tuve maestros tan
buenos de programación.

Entonces, si no me equivoco, es lo que se usaría para agrupar datos y
generar subtotales por "categoría", en el ejemplo de Walter, el número
del vendedor.

Sería casi como la función de subtotales de excel, no?..

Recuerdo que ya una vez pregunte de eso.. pero entiendo que son
personas ocupadas, como es mi caso.

https://groups.google.com/group/publicesvfoxpro/browse_thread/thread/48f133691ef30b2b/e48b9eb1e680a2f6?hl=es&lnk=gst&q=subtotales#e48b9eb1e680a2f6

Saludos!

Carlos Miguel FARIAS

unread,
Mar 29, 2012, 8:39:43 AM3/29/12
to publice...@googlegroups.com
Si, es equivalente a esa función de excel, pero si tenes que hacer
cortes de control para sumar o contar, lo mejor es trabajar con
agrupamientos de SQL
En varios SGBD, los multiples cortes de control son automáticos, o sea
que con indicar una palabra clave adicional (por ejemplo rollup en
mysql) obtener con una sola select, totales generales y subtotales por
cada uno de los campos indicados en el agrupamiento.
En caso de vfp, se unen los select para cada grupo, te crea un cursor completo

SELECT idDepartamento, idEmpleado, SUM( HorasTrabajadas );
FROM Tabla GROUP BY idDepartamento, idEmpleado;
UNION;
SELECT idDepartamento, 99999, SUM( HorasTrabajadas );
FROM Tabla GROUP BY idDepartamento;
UNION
SELECT 99999, 99999, SUM( HorasTrabajadas );
FROM Tabla;
ORDER BY 1, 2

Te crea un cursor con todos los datos calculados y ordenados, y si
queres textos aclaratorios, se pueden agregar.


Saludos: Miguel, La Pampa (RA)


El 28/03/12, TheNewInquirer <thenewin...@gmail.com> escribió:

Reply all
Reply to author
Forward
0 new messages