Actualización de Bases de Datos

Post Reply
dobfivewin
Posts: 325
Joined: Sun Feb 03, 2008 11:04 pm
Location: Argetnina

Actualización de Bases de Datos

Post by dobfivewin »

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

#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

Post by dobfivewin »

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

#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
Post Reply