Actualización de Bases de Datos

Actualización de Bases de Datos

Postby dobfivewin » Tue Feb 05, 2008 8:41 am

Hola amigos, soy nuevo en el foro: David Barrio (Argentina)
Tengo armada una aplicación para la actualización de las bases de datos de los sistemas y NO la puedo hacer andar, se las dejo para que la vean, o bien si tienen alguna para sugerirme

muchas gracias

David Barrio
davidbarrio_arg@hotmail.com

Code: Select all  Expand view
#include 'Directry.ch'

Function ActuArchivos()
local oDlgSe
local ORIGEN :=SPACE(60)  , oORIGEN ,;
         DESTINO:=SPACE(60) , oDESTINO
local oICOCMOV

DEFINE DIALOG oDlgSe FROM 0,0 TO 10,99 TITLE 'Actualización de BASES de DATOS'

   @  0.875, 1 SAY 'Ubicación ORIGEN:' of oDlgSe
   @     13,85 BTNBMP oICOCMOV of oDlgSe ;
                      FILE 'LUPA2.BMP' ;
                                 SIZE 10,10 ;
                      ACTION(ORIGEN:=DIRECMain() ,;
                             ORIGEN:=ORIGEN+'' ,;
                             oORIGEN:refresh() )
   @     01,13 GET oORIGEN var ORIGEN of oDlgSe

   @ 1.750, 1 SAY 'Ubicación DESTINO:' of oDlgSe
   @     26,85 BTNBMP oICOCMOV of oDlgSe;
                      FILE 'LUPA2.BMP';
                                 SIZE 10,10 ;
                                 ACTION(DESTINO:=DIRECMain() ,;
                             DESTINO:=DESTINO+'' ,;
                             oDESTINO:refresh() )
   @     02,13 GET oDESTINO var DESTINO of oDlgSe


   @ 3,08 BUTTON '&Actualizar' of oDlgSe ACTION ( ActArch(ORIGEN,DESTINO) , oDlgSe:End() ) SIZE 40, 10
   @ 3,28 BUTTON '&No Actualizar' of oDlgSe ACTION ( oDlgSe:End() ) SIZE 40, 10

ACTIVATE DIALOG oDlgSe CENTERED

dbcloseall()
RETURN NIL


Function ActArch(ORIGEN,DESTINO)

local x:=DIRECTORY('*.dbf'),;
      NOM_DBF:={}
     
local TR_1:=1
local Paso
local C1,C2,C3,C4,C5,C6,C7
local AC1,AC2,AC3,AC4,AC5,AC6,AC7
local Campos

If ORIGEN=='' .or. DESTINO==''
  MsgStop( 'Error de Directorio ORIGEN o DESTINO' )
  Return .t.
EndIf
*-------------------------- Carga archivos DBF en Directorio de ORIGEN

X:=DIRECTORY(ORIGEN+'*.DBF')
AEVAL(X,{|FILE|AADD(NOM_DBF,FILE[F_NAME])})

* NOM_DBF = Nombres de Archivos DBF que se deben agregar/reemplazar en carpeta de DESTINO
* C1 = Nombre de Archivos DBF A Cambiar  (En directorio de ORIGEN)
* C3 = Nombre de Archivos DBF de Transferencia  (En directorio de DESTINO) Cambia 1° x '_'
* C4 = Nombre de Archivos DBF en Directorio de ORIGEN
* C5 = Nombre de Archivo que debe renombrar el archivo DBF  => DB (En directorio de ORIGEN)
* C6 = Nombre de Archivo DBT (En directorio de ORIGEN)
* C7 = Nombre de Archivo que debe renombrar el archivo DBT  => DT (En directorio de ORIGEN)

dbcloseall()

While TR_1<=LEN(NOM_DBF)
  *
  C1:=NOM_DBF[TR_1]        // Nombre de Archivo en DESTINO
  *
  C4:=NOM_DBF[TR_1]         // Nombre de Archivo en ORIGEN

   C1:=FilNomArc(C1)
   C4:=FilNomArc(C4)

  Paso := .f.
  If .NOT. FILE(C1)                       // NO existe el archivo en Destino

    If MsgNoYes(oemtoansi('Base de Dato NUEVA: '+C1+;
                             ', Realiza la Actualización ?'),;
                                oemtoansi('Elija opcion SI/NO') )

      PathSet(ORIGEN)
      AC4:=ER_3(C4,1,1)

         COPY TO &(C1)

         Paso := .t.
       Else
         Paso := .f.
      EndIf

  ElseIf FILE(C1)                         // EXISTE el Archivo en Destino

      * En C3 coloco el NOMBRE archivo a reemplazar cambiando
      * la 1° letra del Nombre por el 1(UNO)
      * ejemplo 'CUENTA.DBF' pasa a '_UENTA.DBF'

    If MsgNoYes(oemtoansi('Base de Dato a Actualizar: '+C1+;
                             ', Realiza la Actualización ?'),;
                                oemtoansi('Elija opcion SI/NO') )

      C3:='_'+SUBSTR(NOM_DBF[TR_1],2,LEN(NOM_DBF[TR_1]))

      MsgWait( 'Guardando Información de Base de Dato de DESTINO de: '+C1+' en '+C3 )

      PathSet(DESTINO)
         use &(C1)
         pack
         COPY TO &(C3)
         DBCLOSEALL()
         use &(c3)
         DBCLOSEALL()

      MsgWait( 'Copiando Nueva Base de Dato en DESTINO: '+C4 )

      PathSet(ORIGEN)
      use &(C4)
      PathSet(DESTINO)
         COPY TO &(DESTINO+C1)
         DBCLOSEALL()
      PathSet(DESTINO)
         use &(c1)
         ZAP
         pack
         DBCLOSEALL()

      MsgWait( 'Copiando Información Base de Dato: '+C3+' en '+C1 )
      PathSet(DESTINO)
      AC1:=ER_3(C1,1,1)
      AC3:=ER_3(C3,1,1)
        Campos := FCOUNT()
      
        While !eof()
        DbSelectArea(AC1)
        &(AC1)->( DBAPPEND() )
           FOR x = 1 TO Campos
         &(AC1)->&(FIELDNAME(x)) := &(AC3)-> &(FIELDNAME(x))
        NEXT x
        DbSelectArea(AC3)
        DBSKIP()
      EndDo
        Paso := .t.
      Else
      Paso := .f.
      EndIf

   Else
    MsgStop( 'Error de Actualización de Archivos: '+C4 )
      Paso := .f.
  EndIf

   If Paso
    MsgInfo( 'Archivo ACTUALIZADO: '+C1 )
   
    PathSet(ORIGEN)
     *-------------------------
     * Renombrar los archivos DBF y DBT de ORIGEN para que NO los transfieran de nuevo
                   * Carga en C5 el nombre como debe renombrar el archivo de ORIGEN (de DBF a DB)
    C5:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DB'
                  * Carga en C6 el nombre del posible archivo DBT
    C6:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DBT'
                  * Carga en C7 el nombre como debe renombrar el archivo de ORIGEN (de DBT a DT)
    C7:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DT'

      If FILE(C5)       // Si Existe el archivo DB (en ORIGEN) se BORRA
      If FERASE(&(C5)) == -1
        MsgStop( 'Archivo: '+C5+' NO Borrado' )
         EndIf
      EndIf
      If FILE(C7)       // Si Existe el archivo DT (en ORIGEN) se BORRA
      If FERASE(&(C7)) == -1
        MsgStop( 'Archivo: '+C7+' NO Borrado' )
         EndIf
      EndIf

    MsgWait( 'Renombrando Base: '+C4+' a: '+C5 )
    If FRENAME(C4,C5) == -1                       // Renombre el Archivo DBF de ORIGEN (DBF a DB)
      MsgStop( 'Archivo: '+C4+' NO Renambrado' )
      EndIf
     If FILE(C6)                          // SI Existe DBT
      MsgWait( 'Renombrando Base: '+C6+' a: '+C7 )
      If FRENAME(C6,C7) == -1                     // Renombre el Archivo DBT de ORIGEN (DBT a DT)
        MsgStop( 'Archivo: '+C4+' NO Renambrado' )
         EndIf
     EndIf
     *-------------------------
   EndIf
   dbcloseall()
  TR_1:=++TR_1
EndDo

MsgInfo( 'Archivo Actualizados: '+str(len(NOM_DBF),2) )

dbcloseall()
RETURN NIL
*-----------------------------------
Function FilNomArc(NomArc)
local x,NomFil:=''
For x = 1 to len(NomArc)
   If substr(NomArc,x,1) == '.'
      exit
   EndIf
   NomFil := NomFil + substr(NomArc,x,1)
Next x
Return NomFil
dobfivewin
 
Posts: 325
Joined: Sun Feb 03, 2008 11:04 pm
Location: Argetnina

Re: Actualización de Bases de Datos

Postby dobfivewin » Sat Feb 16, 2008 10:39 am

GRACIAS


dobfivewin wrote:Hola amigos, soy nuevo en el foro: David Barrio (Argentina)
Tengo armada una aplicación para la actualización de las bases de datos de los sistemas y NO la puedo hacer andar, se las dejo para que la vean, o bien si tienen alguna para sugerirme

muchas gracias

David Barrio
davidbarrio_arg@hotmail.com

Code: Select all  Expand view
#include 'Directry.ch'

Function ActuArchivos()
local oDlgSe
local ORIGEN :=SPACE(60)  , oORIGEN ,;
         DESTINO:=SPACE(60) , oDESTINO
local oICOCMOV

DEFINE DIALOG oDlgSe FROM 0,0 TO 10,99 TITLE 'Actualización de BASES de DATOS'

   @  0.875, 1 SAY 'Ubicación ORIGEN:' of oDlgSe
   @     13,85 BTNBMP oICOCMOV of oDlgSe ;
                      FILE 'LUPA2.BMP' ;
                                 SIZE 10,10 ;
                      ACTION(ORIGEN:=DIRECMain() ,;
                             ORIGEN:=ORIGEN+'' ,;
                             oORIGEN:refresh() )
   @     01,13 GET oORIGEN var ORIGEN of oDlgSe

   @ 1.750, 1 SAY 'Ubicación DESTINO:' of oDlgSe
   @     26,85 BTNBMP oICOCMOV of oDlgSe;
                      FILE 'LUPA2.BMP';
                                 SIZE 10,10 ;
                                 ACTION(DESTINO:=DIRECMain() ,;
                             DESTINO:=DESTINO+'' ,;
                             oDESTINO:refresh() )
   @     02,13 GET oDESTINO var DESTINO of oDlgSe


   @ 3,08 BUTTON '&Actualizar' of oDlgSe ACTION ( ActArch(ORIGEN,DESTINO) , oDlgSe:End() ) SIZE 40, 10
   @ 3,28 BUTTON '&No Actualizar' of oDlgSe ACTION ( oDlgSe:End() ) SIZE 40, 10

ACTIVATE DIALOG oDlgSe CENTERED

dbcloseall()
RETURN NIL


Function ActArch(ORIGEN,DESTINO)

local x:=DIRECTORY('*.dbf'),;
      NOM_DBF:={}
     
local TR_1:=1
local Paso
local C1,C2,C3,C4,C5,C6,C7
local AC1,AC2,AC3,AC4,AC5,AC6,AC7
local Campos

If ORIGEN=='' .or. DESTINO==''
  MsgStop( 'Error de Directorio ORIGEN o DESTINO' )
  Return .t.
EndIf
*-------------------------- Carga archivos DBF en Directorio de ORIGEN

X:=DIRECTORY(ORIGEN+'*.DBF')
AEVAL(X,{|FILE|AADD(NOM_DBF,FILE[F_NAME])})

* NOM_DBF = Nombres de Archivos DBF que se deben agregar/reemplazar en carpeta de DESTINO
* C1 = Nombre de Archivos DBF A Cambiar  (En directorio de ORIGEN)
* C3 = Nombre de Archivos DBF de Transferencia  (En directorio de DESTINO) Cambia 1° x '_'
* C4 = Nombre de Archivos DBF en Directorio de ORIGEN
* C5 = Nombre de Archivo que debe renombrar el archivo DBF  => DB (En directorio de ORIGEN)
* C6 = Nombre de Archivo DBT (En directorio de ORIGEN)
* C7 = Nombre de Archivo que debe renombrar el archivo DBT  => DT (En directorio de ORIGEN)

dbcloseall()

While TR_1<=LEN(NOM_DBF)
  *
  C1:=NOM_DBF[TR_1]        // Nombre de Archivo en DESTINO
  *
  C4:=NOM_DBF[TR_1]         // Nombre de Archivo en ORIGEN

   C1:=FilNomArc(C1)
   C4:=FilNomArc(C4)

  Paso := .f.
  If .NOT. FILE(C1)                       // NO existe el archivo en Destino

    If MsgNoYes(oemtoansi('Base de Dato NUEVA: '+C1+;
                             ', Realiza la Actualización ?'),;
                                oemtoansi('Elija opcion SI/NO') )

      PathSet(ORIGEN)
      AC4:=ER_3(C4,1,1)

         COPY TO &(C1)

         Paso := .t.
       Else
         Paso := .f.
      EndIf

  ElseIf FILE(C1)                         // EXISTE el Archivo en Destino

      * En C3 coloco el NOMBRE archivo a reemplazar cambiando
      * la 1° letra del Nombre por el 1(UNO)
      * ejemplo 'CUENTA.DBF' pasa a '_UENTA.DBF'

    If MsgNoYes(oemtoansi('Base de Dato a Actualizar: '+C1+;
                             ', Realiza la Actualización ?'),;
                                oemtoansi('Elija opcion SI/NO') )

      C3:='_'+SUBSTR(NOM_DBF[TR_1],2,LEN(NOM_DBF[TR_1]))

      MsgWait( 'Guardando Información de Base de Dato de DESTINO de: '+C1+' en '+C3 )

      PathSet(DESTINO)
         use &(C1)
         pack
         COPY TO &(C3)
         DBCLOSEALL()
         use &(c3)
         DBCLOSEALL()

      MsgWait( 'Copiando Nueva Base de Dato en DESTINO: '+C4 )

      PathSet(ORIGEN)
      use &(C4)
      PathSet(DESTINO)
         COPY TO &(DESTINO+C1)
         DBCLOSEALL()
      PathSet(DESTINO)
         use &(c1)
         ZAP
         pack
         DBCLOSEALL()

      MsgWait( 'Copiando Información Base de Dato: '+C3+' en '+C1 )
      PathSet(DESTINO)
      AC1:=ER_3(C1,1,1)
      AC3:=ER_3(C3,1,1)
        Campos := FCOUNT()
      
        While !eof()
        DbSelectArea(AC1)
        &(AC1)->( DBAPPEND() )
           FOR x = 1 TO Campos
         &(AC1)->&(FIELDNAME(x)) := &(AC3)-> &(FIELDNAME(x))
        NEXT x
        DbSelectArea(AC3)
        DBSKIP()
      EndDo
        Paso := .t.
      Else
      Paso := .f.
      EndIf

   Else
    MsgStop( 'Error de Actualización de Archivos: '+C4 )
      Paso := .f.
  EndIf

   If Paso
    MsgInfo( 'Archivo ACTUALIZADO: '+C1 )
   
    PathSet(ORIGEN)
     *-------------------------
     * Renombrar los archivos DBF y DBT de ORIGEN para que NO los transfieran de nuevo
                   * Carga en C5 el nombre como debe renombrar el archivo de ORIGEN (de DBF a DB)
    C5:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DB'
                  * Carga en C6 el nombre del posible archivo DBT
    C6:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DBT'
                  * Carga en C7 el nombre como debe renombrar el archivo de ORIGEN (de DBT a DT)
    C7:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DT'

      If FILE(C5)       // Si Existe el archivo DB (en ORIGEN) se BORRA
      If FERASE(&(C5)) == -1
        MsgStop( 'Archivo: '+C5+' NO Borrado' )
         EndIf
      EndIf
      If FILE(C7)       // Si Existe el archivo DT (en ORIGEN) se BORRA
      If FERASE(&(C7)) == -1
        MsgStop( 'Archivo: '+C7+' NO Borrado' )
         EndIf
      EndIf

    MsgWait( 'Renombrando Base: '+C4+' a: '+C5 )
    If FRENAME(C4,C5) == -1                       // Renombre el Archivo DBF de ORIGEN (DBF a DB)
      MsgStop( 'Archivo: '+C4+' NO Renambrado' )
      EndIf
     If FILE(C6)                          // SI Existe DBT
      MsgWait( 'Renombrando Base: '+C6+' a: '+C7 )
      If FRENAME(C6,C7) == -1                     // Renombre el Archivo DBT de ORIGEN (DBT a DT)
        MsgStop( 'Archivo: '+C4+' NO Renambrado' )
         EndIf
     EndIf
     *-------------------------
   EndIf
   dbcloseall()
  TR_1:=++TR_1
EndDo

MsgInfo( 'Archivo Actualizados: '+str(len(NOM_DBF),2) )

dbcloseall()
RETURN NIL
*-----------------------------------
Function FilNomArc(NomArc)
local x,NomFil:=''
For x = 1 to len(NomArc)
   If substr(NomArc,x,1) == '.'
      exit
   EndIf
   NomFil := NomFil + substr(NomArc,x,1)
Next x
Return NomFil
dobfivewin
 
Posts: 325
Joined: Sun Feb 03, 2008 11:04 pm
Location: Argetnina


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 18 guests