FoxPro/Visual FoxPro - De Cursor a DBF

 
Vista:

De Cursor a DBF

Publicado por Foxperto (894 intervenciones) el 28/07/2001 01:05:09
Hola a Todos/as:

Me gustaria pasar todo el Contenido de un Cursor de Memoria a una Tabla en Disco, sin perder la Informacion de la Tabla.

Actualmente lo estoy haciendo con un Scan - EndScan, pero algunas veces es un poco lento, ya que el cursor es muy grande.

Si alguien conoce una Sentencia - SQL o algo parecido que me pueda ayudar se lo agradeceria.

De antemano, muchas Gracias

Saludos
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

RE:De Cursor a DBF

Publicado por Lucy Diana (48 intervenciones) el 28/07/2001 05:54:15
Hola, deberias copiar el contenido del cursor a una tabla dbf temporal, luego haz un append from a tu tabla y finalmente eliminas el dbf temporal. El código es el siguiente :

tablatem = 'C:\USER\tempo.dbf'
SELE TUCURSOR
copy to (tablatem) type fox2x
SELE TUTABLA
APPEND FROM (tablatem)
DELE FILE (tablatem)

Chau, espero te sirva, cualquier duda escríbeme.
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

RE:Otra forma

Publicado por CarlosAL (61 intervenciones) el 28/07/2001 18:36:08
Hola,

Yo lo hago de esta forma y evito crear otra tabla temporal, ademas que si los datos son bastantes seria mas lento. Puedes hacer el append from directamente desde el cursor de esta forma

select mitabla
append from dbf('micursor')

de esta forma se hace el append directo sin necesidad de hacer copia a otra tabla temporal,

Porque la funcion dbf() ??... pq el comando append from busca una tabla con el nombre que le doy como parametro, pero como el cursor temporal tiene un alias pq internamente el genera un archivo tmp de esta forma sabes cual es el nombre de la tabla desde donde se hace el append. Ademas, un cursor no es mas que una tabla temporal, solo que se borra automaticamente cuando lo cierras.

Cualquier duda que tengas escribe.

Carlos

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

RE:De Cursor a DBF

Publicado por Lucy Diana (48 intervenciones) el 28/07/2001 05:56:10
Me olvidaba decirte, debes tener en cuenta que los nombres de los campos en tu cursor deben ser los mismos que los de tu tabla en disco.

Chau, suerte.
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

Gracias por los Comentarios

Publicado por Foxperto (894 intervenciones) el 31/07/2001 19:44:36
Hola:

Gracias a Lucy y a Carlos, por sus comentarios...

Aunque la Respuesta que me dio Carlos era esactamente lo que queria hacer.

Gracias Nuevamente.

Saludos
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
sin imagen de perfil

Gracias por los Comentarios

Publicado por jorge (6 intervenciones) el 04/08/2016 00:16:31
como harias eso mismo pero no para pasar los datos del cursor a un nuevo registro, si no mas bien para modifcar un registro ya existente.

espero me ayuden.
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
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

Gracias por los Comentarios

Publicado por Fidel José (657 intervenciones) el 04/08/2016 02:00:18
Humm, te metiste en un hilo de hace 15 años.
Si hablas de tablas nativas (dbf), te puedes basar en el número de registro (recno())
Si creas el cursor con SELECT SQL, sería algo así:
SELECT *,RECNO() as tb_rec , .F. AS tb_del FROM (lcTabla) WHERE (Condicion) INTO CURSOR (lcCursor) READWRITE

Luego;
Si Agregas un registro al cursor, el campo tb_rec quedará en cero
Si Borras un registro en el cursor, antes de DELETE, va REPLACE TB_DEL WITH .T.

Para grabar los cambios
SELECT (lccursor)
SET DELETED OFF
SCAN
SCATTER TO laDatos

DO CASE
CASE EMPTY(TB_REC) AND TB_DEL
* No hace nada * es un regisro agregado que también se borró en el cursor
CASE EMPTY(TB_REC) AND !TB_DEL
* Es un registro nuevo
INSERT INTO (lcTable) FROM ARRAY laDatos
UNLOCK in select( lcTable)
OTHERWISE
lnGo = TB_REC
lDelete = TB_DEL

SELECT (lcTabla)
go lnGo
if m.lDelete
IF rlock()
DELETE
UNLOCK
ENDIF
ELSE
if rlock()
gather from array laDatos
UNLOCK
ENDIF

ENDIF
ENDCASE


ENDSCAN
SET DELETED ON
FLUSH IN SELECT(lcTabla)
USE IN SELECT(lcCursor)
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

Gracias por los Comentarios

Publicado por Gladys Costa (2 intervenciones) el 16/08/2016 22:02:35
muy útil, esto último es lo que necesitaba.
Muchas Gracias.
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