Copiado a toda máquina !

Copiado a toda máquina !

Postby hmpaquito » Fri Mar 23, 2012 5:44 pm

Vamos a intentar poner aquí un pequeño artículo, de unas pocas entregas, de un proceso que se repite mucho en los programas. La cosa va por la optimización del código enseñándole a pensar, al código digo :shock:

** Según posterior comentario de sambomb, modifico un poco el bucle para que no sea equivalente
a un simple COPY FILE o un APPEND FROM y asi poder ver mejor la situación donde aplicar el sistema.
Teniendo un bucle tal que así:
Code: Select all  Expand view  RUN

SELECT (cAli)
SET SOFTSEEK ON
SEEK cClave1
SET SOFTSEEK OFF
DO WHILE !Eof()  .AND. Campo1 >= cClave1 .AND. Campo1 <= cClave2
   IF Campo2 == "x"
       SKIP
       LOOP
   ENDIF
   SELECT (cAliTmp)
   APPEND BLANK
   REPLACE Campo1 WITH (cAli)-> Campo1,;
                 Campo2 WITH (cAli)-> Campo2,;
                 Campo3 WITH (cAli)-> Campo3,;
                 Campo4 WITH (cAli)-> Campo4
   SELECT (cAli)
   SKIP
ENDDO
 


Tratariamos, 1º de hacerlo data driven, 2º hacerlo seguro y 3º darle velocidad.
Seguiremos.
Last edited by hmpaquito on Sat Mar 24, 2012 8:00 am, edited 1 time in total.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Copiado a toda máquina !

Postby sambomb » Fri Mar 23, 2012 6:33 pm

Se vai copiar TODO o banco de dados, use um copy file e depois de um pack(se necessário)
Email: SamirSSabreu@gmail.com
xHarbour 1.2.3 + Fwhh 20.2
User avatar
sambomb
 
Posts: 388
Joined: Mon Oct 13, 2008 11:26 am
Location: Itaocara - RJ - Brasil

Re: Copiado a toda máquina !

Postby hmpaquito » Mon Mar 26, 2012 12:09 pm

Pues siguiendo con lo que traiamos....

Ahora lo que hacemos es hacer un copiado data driven, es decir, se copiarán los campos, bien todos, bien sólo los que le digamos.
Utilizaremos una función para tal menester, así tenemos el proceso más encapsulado.


Code: Select all  Expand view  RUN
SELECT (cAli)
SET SOFTSEEK ON
SEEK cClave1
SET SOFTSEEK OFF
DO WHILE !Eof()  .AND. Campo1 >= cClave1 .AND. Campo1 <= cClave2
   IF Campo2 == "x"
       SKIP
       LOOP
   ENDIF
   SELECT (cAliTmp)
   APPEND BLANK
   CopiaRegistro(cAli, Alias(), {"Campo1", "Campo2", "Campo3", "Campo4"})
   SELECT (cAli)
   SKIP
ENDDO


// aIncluir/ aExcluir.- Array con campos a incluir/ excluir de la copia del registro !!
FUNCTION CopiaRegistro(cAliOri, cAliDes, aIncluir, aExcluir)
Local nFCount:= (cAliDes)-> (FCount())
Local nPosOri
Local cCampo
Local nI

IF aIncluir != NIL
   FOR nI:= 1 TO Len(aIncluir)
      aIncluir[nI]:= Upper(aIncluir[nI])
   NEXT
ENDIF
IF aExcluir != NIL
   FOR nI:= 1 TO Len(aExcluir)
      aExcluir[nI]:= Upper(aExcluir[nI])
   NEXT
ENDIF

FOR nI:= 1 TO nFCount
   cCampo:= (cAliDes)-> (FieldName(nI))
   IF aIncluir != NIL .AND. Ascan(aIncluir, cCampo) == 0  
      LOOP
   ENDIF
   IF aExcluir != NIL .AND. Ascan(aExcluir, cCampo) >  0  
      LOOP
   ENDIF

   nPosOri:= (cAliOri)-> ( FieldPos(cCampo))
   IF nPosOri != 0
      (cAliDes)-> ( FieldPut(nI, (cAliOri)-> (FieldGet(nPosOri))))
   ENDIF
NEXT
RETURN NIL

 
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 48 guests