*---- El campo PROCESAR lo utilizo en la grilla para tildar/destildar las tablas que quiero que me genere el SCRIPT de estructura.
*---- El campo NOPROC en cambio, lo tengo por si por algún inconveniente (error de apertura o lo que fuese) no pude procesar alguna tabla requerida.
ThisForm.GrdTablas.Refresh()
---------------------------------------------------------------
O sea, básicamente obtengo del DBC todas las tablas que posee, y las cargo en la grilla para decidir si procesarlas o no. Una vez presionado ese botón, la grilla me queda como la que se ve en la imagen.
Bien, ahora ESTO HAGO EN EL BOTÓN ACEPTAR.
*----------------------------
lnInicio = SECONDS()
lnTablaProc = 0
lcBaseDatos = ALLTRIM(This.Parent.CboBaseDatos.Value)
lcDirSQL = gcDirPrinc + "SQL\"
lnManejador = FCREATE(lcDirSQL + lcBaseDatos + ".sql")
SELECT curtablas
GO TOP
SCAN
lnRegistro = ABS(RECNO("curtablas"))
SCATTER MEMVAR
m.ubicacion = ALLTRIM(LOWER(m.ubicacion))
m.tabla = ALLTRIM(LOWER(m.tabla))
USE (m.ubicacion + m.tabla) ALIAS tabla SHARED IN 0
IF USED("tabla")
lnCampos = AFIELDS(laTabla,"tabla")
USE IN tabla
lcOrden = "CREATE TABLE `" + lcBaseDatos + "`.`" + m.tabla + "` (" + CHR(13)
i = 1
lcPrimaria = ALLTRIM(LOWER(laTabla[1,1]))
FOR i = 1 TO ALEN(laTabla,1)
lcOrden = lcOrden + "`" + ALLTRIM(LOWER(laTabla[i,1])) + "` "
DO CASE
CASE laTabla[i,2] = "C" &&Character
lcOrden = lcOrden + "VARCHAR(" + ALLTRIM(STR(laTabla[i,3])) + ")"
CASE laTabla[i,2] = "Y" &&Currency
lcOrden = lcOrden + "DOUBLE"
CASE laTabla[i,2] = "D" &&Date
lcOrden = lcOrden + "DATE"
CASE laTabla[i,2] = "T" &&Datetime
lcOrden = lcOrden + "DATETIME"
CASE laTabla[i,2] = "B" &&Double
lcOrden = lcOrden + "DOUBLE"
CASE laTabla[i,2] = "F" &&Float
lcOrden = lcOrden + "FLOAT"
CASE laTabla[i,2] = "I" &&Integer
lcOrden = lcOrden + "INTEGER"
CASE laTabla[i,2] = "L" &&Logical
lcOrden = lcOrden + "BIT(1)"
CASE laTabla[i,2] = "M" &&Memo
lcOrden = lcOrden + "TEXT(65535)"
CASE laTabla[i,2] = "N" &&Numeric
lcOrden = lcOrden + "FLOAT"
ENDCASE
lcOrden = lcOrden + IIF(laTabla[i,2] $ "DTM", ", "," NOT NULL, ") + CHR(13)
ENDFOR
lcOrden = lcOrden + " PRIMARY KEY (`" + lcPrimaria + "`));" + CHR(13) + CHR(13)
IF lnManejador >= 0
lnTablaProc = lnTablaProc + 1
ThisForm.LblTablasProc.Caption = "Tablas procesadas: " + ALLTRIM(STR(lnTablaProc))
ThisForm.LblTablasProc.Visible = .T.
= FWRITE(lnManejador,lcOrden)
SELECT curtablas
REPLACE curtablas.noproc WITH .F.
GO TOP
GO (lnRegistro)
This.Parent.GrdTablas.Refresh()
ENDIF
ENDIF
SELECT curtablas
ENDSCAN
= FCLOSE(lnManejador)
lnFin = SECONDS()
lcTiempo = Seg2DHMS(lnFin - lnInicio,.F.,.F.,.T.)
ThisForm.LblTiempoProc.Caption = "Tiempo de proceso: " + lcTiempo
ThisForm.LblTiempoProc.Visible = .T.
*-----------------------------
Esto genera un archivo de texto de bajo nivel, con extensión .SQL, que es un SCRIPT DE SQL con TODAS LAS ESTRUCTURAS leídas de tus tablas DBF.
Después, en el administrador SQL, hacés lo siguiente:
- Abris y entrás
- Ponés la base de datos que deseás como contenedor como activa.
- Corrés este script y voilá, te generó todas las estructuras dentro de la BD SQL.