Page 1 of 1

De adt a dbf SOLUCIONADO

Posted: Fri Nov 01, 2024 8:46 pm
by D.Fernandez
Hola amigos:
Quisiera pasar mis archivos adt a dbf.

Hay alguna manera rápida?

Gracias

Dario Fernandez

Los resolví exportando el archivo adt a xls y luego lo pase a dbf.
Saludos

Dario Fernandez

Re: De adt a dbf SOLUCIONADO

Posted: Sat Nov 02, 2024 8:39 pm
by Armando
Darío:

Y no es posible de DBT a DBF directamente?

Saludos

Re: De adt a dbf SOLUCIONADO

Posted: Sat Nov 02, 2024 11:22 pm
by carlos vargas
Encontre el codigo..

Code: Select all | Expand

STATIC nServer

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Conectar()
   LOCAL lConectado  := FALSE
   LOCAL hArchivoIni := NIL
   LOCAL cError      := ""
   LOCAL cServidor   := ""
   LOCAL nServidor   := 0
   LOCAL bConectar   := {|| lConectado := AdsConnect60( cServidor, nServidor, "Creditos", "Mulan2013", NIL , @hConexion ) }
   LOCAL bAbrir      := {|| lConectado := Conectar_AbrirTablas() }

   hArchivoIni := HB_ReadIni( Lower( ".\CREDITOS.INI" ) )

   IF HB_IsNil( hArchivoIni )
      MsgStop( "No se pudo leer el archivo de configuración CREDITOS.INI, contacte al desarrollador del programa." )
      RETURN lConectado
   ELSE
      TRY
         nConexion := Val( hArchivoIni[ "DATOS", "Tipo" ] )
      CATCH
         nConexion := 0
      END
      DO CASE
      CASE nConexion==1
         nServer := nServidor := ADS_LOCAL_SERVER
         cServidor := hArchivoIni[ "DATOS", "Conexion1" ]
      CASE nConexion==2
         nServer := nServidor := ADS_REMOTE_SERVER
         cServidor := hArchivoIni[ "DATOS", "Conexion2" ]
      CASE nConexion==3
         nServer := nServidor := ADS_AIS_SERVER
         cServidor := hArchivoIni[ "DATOS", "Conexion3" ]
      OTHERWISE
         MsgStop( "El archivo de conexión esta corrupto, contacte al desarrollador del programa." )
         RETURN lConectado
      ENDCASE
   ENDIF

   IF !Empty( cServidor )
      MsgRun( "Conectando con el servidor de datos, espere un momento.", "CREDITOS", bConectar )
      IF !lConectado
         AdsGetLastError( @cError )
         MsgStop( "No se ha podido realizar la conexión al servidor de datos: " + FINL + cError + FINL + cServidor )
      ELSE
         oSesion:cPC_Servidor := RTrim( cServidor )
         MsgRun( "Abriendo tablas de datos, espere un momento", "CREDITOS", bAbrir )
      ENDIF
   ELSE
      MsgStop( "El archivo de conexión esta corrupto, contacte al desarrollador del programa." )
   ENDIF

RETURN lConectado

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Conectar_AbrirTablas()
   LOCAL lTablasAbiertas := TRUE
   LOCAL oError

   TRY
      Conectar_AbrirTabla( "CONTROL",          "CTRL" )
      Conectar_AbrirTabla( "USUARIOS",         "USUA" )
      Conectar_AbrirTabla( "FERIADOS",         "FERI" )
      Conectar_AbrirTabla( "PLAZOS",           "PLAZ" )
      Conectar_AbrirTabla( "ZONAS",            "ZONA" )
      Conectar_AbrirTabla( "CIUDADES",         "CIUD" )
      Conectar_AbrirTabla( "GESTORES",         "GEST" )
      Conectar_AbrirTabla( "COBRADORES",       "COBR" )
      Conectar_AbrirTabla( "RUTAS",            "RUTA" )
      Conectar_AbrirTabla( "CLIENTES",         "CLIE" )
      Conectar_AbrirTabla( "PROGRAMACION",     "PROG" )
      Conectar_AbrirTabla( "PROGRAMACION_BAK", "PBAK" )
      Conectar_AbrirTabla( "PRESTAMOS",        "PRES" )
      Conectar_AbrirTabla( "DIFERIDOS",        "DIFE" )
      Conectar_AbrirTabla( "MOVIMIENTOS",      "MOVI" )
      Conectar_AbrirTabla( "FLUJOS",           "FLUJ" )
      Conectar_AbrirTabla( "MCOBROSXRUTA",     "MCXR" )
      Conectar_AbrirTabla( "DCOBROSXRUTA",     "DCXR" )
      Conectar_AbrirTabla( "CAJA",             "CAJA" )
      Conectar_AbrirTabla( "COBROXDIA",        "CXDI" )
      Conectar_AbrirTabla( "COBROXDIAC",       "CXDC" )
      Conectar_AbrirTabla( "COBROXDIAT",       "CXDT" )

      Conectar_ConfigurarTablas()

      DBSelectArea( 0 )

   CATCH oError
      lTablasAbiertas := FALSE
      ShowError( oError )
   END

   //Adt2Dbf()

RETURN lTablasAbiertas

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Conectar_AbrirTabla( cTabla, cAlias )

   USE ( cTabla ) NEW ALIAS ( cAlias ) SHARED

   IF nServer == ADS_AIS_SERVER
      AdsCacheRecords( 100 )
   ENDIF

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROC Adt2Dbf()

   SELECT CTRL
   Mig("control")
   SELECT USUA
   Mig("usuarios")
   SELECT FERI
   Mig("feriados")
   SELECT PLAZ
   Mig("plazos")
   SELECT ZONA
   Mig("zonas")
   SELECT CIUD
   Mig("ciudades")
   SELECT GEST
   Mig("gestores")
   SELECT COBR
   Mig("cobradores")
   SELECT RUTA
   Mig("rutas")
   SELECT CLIE
   Mig("clientes")
   SELECT PROG
   Mig("programacion")
   SELECT PBAK
   Mig("programacion_bak")
   SELECT PRES
   Mig("prestamos")
   SELECT DIFE
   Mig("diferidos")
   SELECT MOVI
   Mig("movimientos")
   SELECT FLUJ
   Mig("flujos")
   SELECT MCXR
   Mig("mcobrosxruta")
   SELECT DCXR
   Mig("dcobrosxruta")
   SELECT CAJA
   Mig("caja")
   SELECT CXDI
   Mig("cobroxdia")
   SELECT CXDC
   Mig("cobroxdiac")
   SELECT CXDT
   Mig("cobroxdiat")

   RddSetDefault( "ads" )

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROC Mig(cTabla)
   LOCAL cOldAlias := Alias()
   LOCAL xT,xT1
   LOCAL aTab
   LOCAL n,o,i

   aTab := DBStruct()

   FOR x:=1 TO Len( aTab )
      IF aTab[ x, 2 ]="D"
         aTab[ x, 3 ]=8
      ENDIF
   NEXT

   DbCreate( "d:\dbc\" + (cTabla), aTab, "DBFCDX", .T. )

   USE ( "d:\dbc\" + (cTabla) ) ALIAS TEMP VIA "dbfcdx"

//   SELECT (cAlias)
//
//   n:=1
//   DO WHILE .T.
//      IF Empty( OrdName(n) )
//         EXIT
//      ENDIF
//      TRY
//         TEMP->( OrdCondSet((cAlias)->( OrdFor(n)),,.t.,,,, nil, nil, nil, nil,, nil, .F., .F., .F., .F.))
//         TEMP->( dbGoTop() )
//         TEMP->( ordCreate(,(cAlias)->( OrdName(n) ), (cAlias)->( OrdKey(n) ), &("{||"+(cAlias)->( OrdKey(n) )+"}") ))
//      CATCH o
//         SELECT (cAlias)
//         ?cTabla,(cAlias)->( OrdName(n) ), (cAlias)->( ordKey(n) )
//      END
//      ++n
//   ENDDO

   SELECT ( cOldAlias )

   WaitOn("Procesando: " + cTabla )

   i:=0
   GO TOP
   DO WHILE !Eof()
      TEMP->( DBAppend() )
      FOR x:=1 TO FCount()
         xT := FieldGet( x )
         TEMP->( FieldPut( x, xT ) )
      NEXT
      SKIP
      IF Mod( ++i, 100 )=0
         SysRefresh()
      ENDIF
   ENDDO

   WaitOff()

   TEMP->( DBCloseArea() )

   SELECT (cOldAlias)

RETURN

Re: De adt a dbf SOLUCIONADO

Posted: Thu Nov 14, 2024 4:44 pm
by D.Fernandez
Hola Carlos, Excelente.

Funcionó, casi todo. Menos una tabla .adt que tiene campos memo.

Igualmente me sirvio, muy bueno.

Gracias, gracias.

Saludos

Ruben Dario Fernandez.

Re: De adt a dbf SOLUCIONADO

Posted: Sat Nov 16, 2024 6:20 pm
by carlos vargas
Verifica el tipo de esa columna en la tabla adt.
Esto hice para aplicar fix en caso de tipo de dato fecha que es un poco diferente en adt (el ltamaño era de 4bits en lugar de 8 como en los dbf), has lo mismo, muestra el
Tipo y tamaño, y corrige...

Code: Select all | Expand

...
aTab := DBStruct()

Fwdbg aTab

   FOR x:=1 TO Len( aTab )
      IF aTab[ x, 2 ]="D"
         aTab[ x, 3 ]=8
      ENDIF
   NEXT
...
 
Muestra la lista de la estructura por fa...

Re: De adt a dbf SOLUCIONADO

Posted: Sat Nov 16, 2024 11:35 pm
by D.Fernandez
Hola Carlos, aqui lo muestro.

Gracias...
https://imgur.com/h0YbsZk