• Sábado 21 de Diciembre de 2024, 12:51

Autor Tema:  Crear Tabla Desde Otra  (Leído 3813 veces)

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Crear Tabla Desde Otra
« en: Martes 20 de Septiembre de 2005, 15:26 »
0
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:
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

DrakerDG

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
    • http://drakerdg.xbot.es/wordpress/
Re: Crear Tabla Desde Otra
« Respuesta #1 en: Jueves 22 de Septiembre de 2005, 15:20 »
0
:comp: Puedes usar el macro & para ejecutar la instruccion desde un string, de la siguiente manera:

Código: Text
  1.  
  2. LOCAL ARRAY copia(2)  && Arreglo donde se almacenará la tabla original
  3. LOCAL xStg as String  && Variable donde se almacenará la instruccion, en este caso CREATE...
  4. *  Para efectos del ejemplo crea una tabla con un campo llamado Registro.
  5. CREATE TABLE Tabla1&#59;
  6.    (Registro c(50))
  7. SELECT Tabla1  && Selecciona la tabla
  8. APPEND BLANK   && Crea un registro
  9. replace Registro WITH "Tamaño"  && Lo llena con el nombre Tamaño (relativo a tu consulta)
  10. APPEND BLANK   && Crea un registro
  11. replace Registro WITH "Tipo"  && Lo llena con el nombre Tipo (relativo a tu consulta)
  12. USE && Cierra la tabla
  13. *  Consulta la tabla para almacenarla en el arreglo "copia"
  14. SELECT *&#59;
  15.   FROM Tabla1&#59;
  16.   INTO ARRAY copia
  17.  
  18. SELECT tabla1
  19. USE &&  cierra el cursor de la Tabla1 (abierto por la consulta)
  20. *  Crea la instrucción para crear la Tabla2 en un string
  21. xStr = "CREATE TABLE Tabla2 (" + ALLTRIM(copia(1)) + " i," + ALLTRIM(copia(2)) + " c(50))"
  22. &xStr && Ejecuta el macro (Este ejecuta lo que esta almacenado en xStr)
  23. SELECT Tabla2 &&  Selecciona la tabla
  24. USE && Cierra la tabla
  25.  
  26. *NOTA:  Las tablas fueron creadas en el directorio actual por defecto.
  27.  
  28.  
  29.  

Espero te sirva. :hola:
Saludos desde Guatemala, C. A.
Electrobotics

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Crear Tabla Desde Otra
« Respuesta #2 en: Jueves 22 de Septiembre de 2005, 17:59 »
0
Gracias, por tu respuesta DrakerDG!

El codigo quedo así:
Código: Text
  1. LOCAL loCarpeta as String, loCrear as Boolean, loEjecutaCrear as String
  2. DIMENSION GeneraTabla(1,1)
  3.  
  4. IF EMPTY(strTablaActiva)
  5.   MESSAGEBOX("No hay ninguna tabla activa.",64,"Generar Tabla")
  6.   ELSE
  7.   IF BOF() AND EOF()
  8.     MESSAGEBOX("No hay registros para crear la Tabla.",64,"Generar Tabla")
  9.     ELSE
  10.       loCarpeta = GETFILE('DBF','','Crear',1,'Crear tabla')
  11.  
  12.     IF NOT EMPTY(loCarpeta)
  13.       loCrear = .T.
  14.       IF FILE(loCarpeta) = .T.
  15.         Result = MESSAGEBOX("¿Este archivo ya existe desea remplazarlo?",4 + 32)
  16.         IF Result = 6
  17.           loCrear = .T.
  18.           ELSE
  19.           loCrear = .F.
  20.         EndIf
  21.       EndIf
  22.       IF loCrear = .T.
  23.           PosicionB = RATC("\",loCarpeta) && Posicion del primer backslash de derecha a izquierda
  24.         Extencion = LEN(ALLTRIM(loCarpeta)) - (PosicionB + 4) && Para quitar la extencion con s
  25.         strEspacio = SUBSTR(loCarpeta,PosicionB + 1,Extencion)
  26.         IF AT(" ",strEspacio) > 0
  27.           MESSAGEBOX("El nombre de la Tabla no puede contener espacios.",64)
  28.           ELSE
  29.           
  30.           DIMENSION GeneraTabla(RECCOUNT(),3) && Dimensiono el Vector para los Campos
  31.           
  32.           Bmk = RECNO()
  33.           GO TOP
  34.           loEjecutaCrear = "Create Table " + loCarpeta + "("
  35.           I = 1
  36.           DO WHILE NOT EOF()
  37.             loEjecutaCrear = loEjecutaCrear + "'" +  ALLTRIM(nomcampo) + "'";
  38.                     + SPACE(1) + ALLTRIM(tipocampo) + "(" + ALLTRIM(tamcampo) + ")"
  39.             IF I < RECCOUNT()
  40.               loEjecutaCrear = loEjecutaCrear + ", "
  41.               I = I + 1
  42.             EndIf
  43.             Skip
  44.           EndDo
  45.           loEjecutaCrear = loEjecutaCrear + ")"
  46.           &loEjecutaCrear
  47.  
  48.         EndIf
  49.       EndIf
  50.     EndIf
  51.   EndIf
  52. EndIf
  53.  
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

Cyclop

  • Miembro MUY activo
  • ***
  • Mensajes: 323
    • Ver Perfil
    • http://www.geocities.com/icotext/spanish/
Re: Crear Tabla Desde Otra
« Respuesta #3 en: Jueves 22 de Septiembre de 2005, 23:31 »
0
Prueba esto

Código: Text
  1. Use TablaOrigen In 0 Alias Origen
  2. Select Origen
  3. Copy Struc To C:\TablaDestino Production
  4.  
  5.  

Salu2

Cyclopz
Icotext Evolution v0.5 para los amantes del ASCII Art
http]

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Crear Tabla Desde Otra
« Respuesta #4 en: Viernes 23 de Septiembre de 2005, 01:31 »
0
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.
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

DrakerDG

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
    • http://drakerdg.xbot.es/wordpress/
Re: Crear Tabla Desde Otra
« Respuesta #5 en: Viernes 23 de Septiembre de 2005, 09:12 »
0
:comp: El tipo de variable que almacena solo 255 caracteres es la tipo Character.  La variable tipo String puede almacenar miles, creo que la limitante es tu memoria RAM.  Para comprobar que si soporta grandes tamaños declare una variable tipo string en el evento Load de un form, es decir

Código: Text
  1.  
  2. *  En el evento Load del form
  3. PUBLIC sVariable as String   && Declara la variable tipo string
  4. sVariable = ""         && Inicializa la variable con una cadena vacía
  5.  
  6.  
  7.  

Agregue un EditBox, un par de Labels, un CommandButton y un Timer en el Form.

El eneto Timer de Timer1 escribí el siguiente código:

Código: Text
  1.  
  2. *  En el evento Timer del Timer1
  3. sVariable = sVariable + "0123456789"  && Agrega 10 caracteres cada vez.
  4. thisform.edit1.Value  = sVariable     && Estable la propiedad Value del EditBox con el contenido de la variable.
  5. thisform.label2.Caption = STR(LEN(sVariable)) + " Caracteres"  &&  Muestra el tamaño de la variable (Cantidad de caracteres)
  6.  
  7.  
  8.  

Establecí la propiedad enabled de Timer1 a .F. (False), para que no ejecutara el evento Timer al correr el Form.

En el evento Click del CommandButton escribí el código para habilidar y deshabilitar el Timer1.

Código: Text
  1.  
  2. * En el evento Click del CommandButton
  3. IF thisform.timer1.Enabled
  4.   this.Caption = "Iniciar..."
  5.   thisform.timer1.Enabled = .F.
  6. ELSE
  7.   this.Caption = "Parar..."
  8.   thisform.timer1.Enabled = .T.
  9. ENDIF
  10.  
  11.  
  12.  

Puedes utilizar una variable tipo string para almacenar la cantidad de caracteres que necesites.
Adjunte el formulario que te comento (Zip file), revisalo y me cuentas. :D
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Saludos desde Guatemala, C. A.
Electrobotics

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Crear Tabla Desde Otra
« Respuesta #6 en: Viernes 23 de Septiembre de 2005, 15:25 »
0
:lol:, gracias DrakerDG!

solo hize el comentario por que me lo hicieron y no encontre en la ayuda la capacidad de el tipo de variable String, ya lo probe y me deja mucho más tranquilo, gracias por tu respuesta.
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

DrakerDG

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
    • http://drakerdg.xbot.es/wordpress/
Re: Crear Tabla Desde Otra
« Respuesta #7 en: Viernes 23 de Septiembre de 2005, 20:28 »
0
:comp: No hay problema, de hecho hice el ejemplo porque tambien dude y quize asegurarme.  :hola:
Saludos desde Guatemala, C. A.
Electrobotics

Cyclop

  • Miembro MUY activo
  • ***
  • Mensajes: 323
    • Ver Perfil
    • http://www.geocities.com/icotext/spanish/
Re: Crear Tabla Desde Otra
« Respuesta #8 en: Lunes 26 de Septiembre de 2005, 20:43 »
0
Yo tengo un ejemplo bien chevere te lo envio luego
Icotext Evolution v0.5 para los amantes del ASCII Art
http]

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Crear Tabla Desde Otra
« Respuesta #9 en: Martes 27 de Septiembre de 2005, 23:19 »
0
Listo, Cyclop as estare esperando :comp:
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos