Copiar estructura de una tabla sin usar COPY STRUCTURE

2,765 views
Skip to first unread message

fasm

unread,
May 29, 2016, 4:15:39 PM5/29/16
to Comunidad de Visual Foxpro en Español
Parecería en vano hacer algo como esto; pero he migrado del VFP6 al VFP9 y me estan dando unos mensajes de 'tabla dañada' sin estarlo.
Por alli lei que es debido a manipular tablas creadas en el VFP6 con la última versión del Fox; y lo que debería hacer es volver a crearlas en el VFP9.

Ya hice una copia de todas las tablas usando el COPY STRUCTURE, pero aun sigue saliendo dicho mensaje, ojo, que sale en cualquier tabla de las que estan en uso, incluso no tienen campo memo.

Por lo tanto solo atino a pensar que la solución es usar un CREATE TABLE pero no tengo una idea clara de como hacerlo, creo que hay que usar Array para eso; a ver si alguien se anima a darme un ejemplo de crear una copia de una tabla de 2 campos.  Gracias por su ayuda.

Edgar Acevedo

unread,
May 29, 2016, 7:39:10 PM5/29/16
to publicesvfoxpro
  * Primero, abres tu tabla vieja:
USE OldTable
  * a veces me sacaba un mensaje de error de código de página y me dejaba elegir ponerle el Code Page: 850 
  * luego, ya con la tabla abierta simplemente le daba:
COPY TO NewTable WITH PRODUCTION 
  * y TODO  funcionó sin problemas.  Eso si, lo hice de una en una.

Si lo anterior falla (que sería muy raro, pues a mi no me falló cuando hice la migración de mis tablas en Foxpro 2.6 para DOS), podrías intentar creando tablas de estructuras intermedias

  * Primero, abres tu tabla vieja:
USE OldTable
  * Ahora deberás crear una tabla temproal con la estructura descriptiva de la tabla vieja:
COPY STRUCTURE EXTENDED to TmpTable
  * Finalmente deberás crear la nueva tabla partiendo de la estructura descriptiva de la tabla vieja:
CREATE NewTable FROM TmpTable


Si nada de esto te sirve, el problema va por otro lado totalmente insospechado...

Saludos,   Edgar Acevedo.


Message has been deleted

Luiz Alexandre Ruiz

unread,
May 29, 2016, 8:36:00 PM5/29/16
to Comunidad de Visual Foxpro en Español
Este é um pequeno exemplo, para ficar mais completo utilize o DO CASE para os tipos de campos (C, N, D...)
Espero que te ajude.

LOCAL laCampo[1] as Array, lnQtd as Integer, lsStringAux as String
CREATE TABLE Teste (DescFabr C(10), Abert N(5,3), Demonst N(1,0))
lnQtd = AFIELDS(laCampo)
lsStringAux = ""
FOR lnAux = 1 TO lnQtd
lsStringAux = lsStringAux + IIF(!EMPTY(lsStringAux),", ", "")
lsStringAux = lsStringAux + laCampo[lnAux,1] + " " + laCampo[lnAux,2] + "(" + TRANSFORM(laCampo[lnAux,3]) + IIF(laCampo[lnAux,2]="N", "," + TRANSFORM(laCampo[lnAux,4]), "") + ")"
NEXT
CREATE TABLE Teste1 (&lsStringAux)

Jorge L. Florez C.

unread,
May 30, 2016, 10:45:43 AM5/30/16
to publice...@googlegroups.com
Hola como estas, y porque no usar lo siguiente

use tabla1
x=afields(estructura)
create cursor temporal from array estructura
sele temporal
copy to tablafinal 

Saludos
Jorge Florez
Lima - Perú

Fernando D. Bozzo

unread,
May 31, 2016, 2:29:30 AM5/31/16
to Comunidad de Visual Foxpro en Español
Hola:

Si tu tabla VFP 6 la abris con VFP 9 en exclusiva y le agregás un campo (MODI STRU), guardás y volvés quitarle ese campo, la estructura final será la de VFP 9.

Si tiene índices, no olvides reindexar

Saludos.-

fasm

unread,
May 31, 2016, 4:49:05 PM5/31/16
to Comunidad de Visual Foxpro en Español
Bueno amigos, gracias por los ejemplos y las explicaciones, ahora mismo hago las pruebas y les cuento.


Reply all
Reply to author
Forward
0 new messages