Programación General > Visual FoxPro
Crear Tabla Desde Otra
Widark:
Hola a tod@s!
Me pasa lo siguiente, en una tabla tengo como registros los nombres de las columnas, tamaño y tipo, quiero que apartir de estos registros poder crear una tabla, como quien dice los registros pasaran a ser las columnas de otra tabla. Lo pense hacer con vector pero no se como ejecutar la instruccion CREATE con el vector. Muchas gracias por sus comentarios. :blink:
DrakerDG:
:comp: Puedes usar el macro & para ejecutar la instruccion desde un string, de la siguiente manera:
--- Código: Text --- LOCAL ARRAY copia(2) && Arreglo donde se almacenará la tabla originalLOCAL xStg as String && Variable donde se almacenará la instruccion, en este caso CREATE...* Para efectos del ejemplo crea una tabla con un campo llamado Registro.CREATE TABLE Tabla1; (Registro c(50))SELECT Tabla1 && Selecciona la tablaAPPEND BLANK && Crea un registroreplace Registro WITH "Tamaño" && Lo llena con el nombre Tamaño (relativo a tu consulta)APPEND BLANK && Crea un registroreplace Registro WITH "Tipo" && Lo llena con el nombre Tipo (relativo a tu consulta)USE && Cierra la tabla* Consulta la tabla para almacenarla en el arreglo "copia"SELECT *; FROM Tabla1; INTO ARRAY copia SELECT tabla1 USE && cierra el cursor de la Tabla1 (abierto por la consulta)* Crea la instrucción para crear la Tabla2 en un stringxStr = "CREATE TABLE Tabla2 (" + ALLTRIM(copia(1)) + " i," + ALLTRIM(copia(2)) + " c(50))"&xStr && Ejecuta el macro (Este ejecuta lo que esta almacenado en xStr)SELECT Tabla2 && Selecciona la tablaUSE && Cierra la tabla *NOTA: Las tablas fueron creadas en el directorio actual por defecto.
Espero te sirva. :hola:
Widark:
Gracias, por tu respuesta DrakerDG!
El codigo quedo así:
--- Código: Text ---LOCAL loCarpeta as String, loCrear as Boolean, loEjecutaCrear as StringDIMENSION GeneraTabla(1,1) IF EMPTY(strTablaActiva) MESSAGEBOX("No hay ninguna tabla activa.",64,"Generar Tabla") ELSE IF BOF() AND EOF() MESSAGEBOX("No hay registros para crear la Tabla.",64,"Generar Tabla") ELSE loCarpeta = GETFILE('DBF','','Crear',1,'Crear tabla') IF NOT EMPTY(loCarpeta) loCrear = .T. IF FILE(loCarpeta) = .T. Result = MESSAGEBOX("¿Este archivo ya existe desea remplazarlo?",4 + 32) IF Result = 6 loCrear = .T. ELSE loCrear = .F. EndIf EndIf IF loCrear = .T. PosicionB = RATC("\",loCarpeta) && Posicion del primer backslash de derecha a izquierda Extencion = LEN(ALLTRIM(loCarpeta)) - (PosicionB + 4) && Para quitar la extencion con s strEspacio = SUBSTR(loCarpeta,PosicionB + 1,Extencion) IF AT(" ",strEspacio) > 0 MESSAGEBOX("El nombre de la Tabla no puede contener espacios.",64) ELSE DIMENSION GeneraTabla(RECCOUNT(),3) && Dimensiono el Vector para los Campos Bmk = RECNO() GO TOP loEjecutaCrear = "Create Table " + loCarpeta + "(" I = 1 DO WHILE NOT EOF() loEjecutaCrear = loEjecutaCrear + "'" + ALLTRIM(nomcampo) + "'"; + SPACE(1) + ALLTRIM(tipocampo) + "(" + ALLTRIM(tamcampo) + ")" IF I < RECCOUNT() loEjecutaCrear = loEjecutaCrear + ", " I = I + 1 EndIf Skip EndDo loEjecutaCrear = loEjecutaCrear + ")" &loEjecutaCrear EndIf EndIf EndIf EndIfEndIf
Cyclop:
Prueba esto
--- Código: Text ---Use TablaOrigen In 0 Alias OrigenSelect OrigenCopy Struc To C:\TablaDestino Production
Salu2
Cyclopz
Widark:
Gracias Cyclop!
lo que pasa es en la Tabla de origen guardo la estructura de la tabla que voy a generar ej:
Etiqueta | Nomcampo | Tipcampo | Tamcampo
Alguna | campo1 | C | 20
Varias | campo2 | L | 01
La tabla que se generará en resumen seria así: Create Table (Nomcampo Tipcampo(tamcampo)), lo cual quiere decir que seria así: Create Table ('campo1' C(20), 'campo2' L(01)). DrakerDG me sugirio que guardara eso en un string y si no estoy mal el tipo de dato string almacena 255 caracteres.
Navegación
[#] Página Siguiente
Ir a la versión completa