Programación General > Visual FoxPro

 Crear Tabla Desde Otra

(1/2) > >>

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&#59;   (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 *&#59;  FROM Tabla1&#59;  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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa