Problema con Append from

Problema con Append from

Postby juan_arroyo_t » Sat Oct 31, 2009 7:58 pm

Por favor que alguien me ayude

base de datos filtrada : pag
base de datos destino : pagtem

En clipper despues de haber filtrado una base de datos a traves de una macro, al agregar registros de esta base de datos a otra lo hacia simplemente cono sigue

select pagtem
append from pag for &Condi

reproduzco aqui mi código ya que tomé la alternativa de usar un rutina extra para solucionar esto, pero supongo que debe de haber una forma de hacerlo con el append from

De antemano muchas gracias
Mexico

STATIC FUNCTION filtro()
MEMVAR Condi, PrimFecha, UltFecha, SoloCob, cFiltro, gFiltro
PUBLIc Condi, PrimFecha, UltFecha, SoloCob, cFiltro, gFiltro

Condi := ""
PrimFecha := dFechaIni
UltFecha := dFechaFin
SoloCob := lSoloCob

IF DTOC(PrimFecha) != " "
Condi := Condi + "pag->fechapag >= PrimFecha .AND. "
ENDIF
IF DTOC(UltFecha) != " "
Condi := Condi + "pag->fechapag <= UltFecha .AND. "
ENDIF
IF SoloCob
Condi := Condi + "pag->tipo = 'CB' .AND. "
ENDIF
Condi := SUBSTR(Condi,1,LEN(Condi)-6)

cFiltro := "{||"+Condi+"}"
gFiltro := '"'+Condi+'"'

SELECT pag
SET ORDER TO
DbSetFilter(&cFiltro,gFiltro)
pag->(DBGOTOP())

SELECT pagtem
ZAP
IF FILE("PAGTEM.NTX")
DELETE FILE PAGTEM.NTX
ENDIF

Procesa()
// APPEND FROM pag FOR &Condi
SET RELATION TO pagtem->facnum INTO cfac
REPLACE ALL clinum WITH cfac->clinum, agente WITH cfac->agente
IF LEFT(cSel,1) == "R"
IF SoloCob
INDEX ON pagtem->refer + pagtem->tipo TO pagtem ;
FOR pagtem->tipo = "CB"
ELSE
INDEX ON pagtem->refer + pagtem->tipo TO pagtem
ENDIF
ELSEIF LEFT(cSel,1) == "C"
IF SoloCob
INDEX ON pagtem->clinum + pagtem->facnum TO pagtem ;
FOR pagtem->tipo = "CB"
ELSE
INDEX ON pagtem->clinum + pagtem->facnum TO pagtem
ENDIF
ELSEIF LEFT(cSel,1) == "V"
IF SoloCob
INDEX ON pagtem->agente + pagtem->facnum TO pagtem FOR ;
pagtem->tipo = "CB"
ELSE
INDEX ON pagtem->agente + pagtem->facnum TO pagtem
ENDIF
ENDIF
RETURN NIL

//---------------------------------------------------------//

STATIC FUNCTION Procesa()
LOCAL cFacNum, cRefer, cTipo, nCantPag, dFechaPag, cObserv, cAgente
SELECT pag
DO WHILE pag->(!EOF())
cFacNum := pag->facnum
cRefer := pag->refer
cTipo := pag->tipo
nCantPag := pag->cantpag
dFechaPag := pag->fechapag
cObserv := pag->observ
cAgente := pag->agente

SELECT pagtem
pagtem->(DBAPPEND())
REPLACE pagtem->facnum WITH cFacNum
REPLACE pagtem->refer WITH cRefer
REPLACE pagtem->tipo WITH cTipo
REPLACE pagtem->cantpag WITH nCantPag
REPLACE pagtem->fechapag WITH dFechapag
REPLACE pagtem->observ WITH cObserv
REPLACE pagtem->agente WITH cAgente

SELECT pag
pag->(DBSKIP())
ENDDO
SELECT pagtem
RETURN NIL
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Problema con Append from

Postby LuisPonce » Sat Oct 31, 2009 9:02 pm

Juan

Estuve revisando tu codigo y me parece que la base "Pag" la tienes filtrada por un criterio, y esa sigue filtrada al momento de pasar por Procesa(), mi pregunta es : Despues del filtro DbSetFilter(&cFiltro,gFiltro), quedan registros para adicionar a "PagTem" ??

Por otro lado no veo ningun Rlock(), tal vez no sea necesario por que no has utilizado SHARED

Att.
Luis Ponce
User avatar
LuisPonce
 
Posts: 192
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU

Re: Problema con Append from

Postby juan_arroyo_t » Sun Nov 01, 2009 8:19 pm

Hola Luis

Despues que filtro pag, con un browse me doy cuenta que realmente hay los registros filtrados de acuerdo al criterio.

Lo que pretendo es pasar esos registros de pag a pagtem mediante un append from pero no lo hace, resolví temporalmente la cuestion con la function Procesa(), pero lo que deseo saber es coo lo hago directamente con append from sin utilizar la funcion Procesa()

A pagtem no le voy a adiconar mas registros que los filtrados de pag

Muchas gracias por tus atenciones

Juan
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Problema con Append from

Postby FranciscoA » Mon Nov 02, 2009 2:41 pm

Hola Juan. Yo también he tenido algunos problemas con append from. En algunos casos lo he resuelto cerrando la base de datos fuente cuando la estoy usando en modo exclusivo. En modo shared no he tenido problemas.

Description

APPEND FROM adds records to the current database file from an ASCII text
file or another database file. Only fields with the same names and
types are APPENDed. Fields with the same name from both the current
database file and <xcFile> must be the same data type. If they are not,
a runtime error occurs when the APPEND FROM command is invoked.

Any date information in <xcFile> must be in the format yyyymmdd to be
properly APPENDed.

In a network environment, APPEND FROM does not require that the current
database file be USEed EXCLUSIVEly or locked with FLOCK() to perform its
operation. As each record is added, CA-Clipper automatically arbitrates
contention for the new record.

When you invoke APPEND FROM, CA-Clipper attempts to open <xcFile> as
shared and read-only. If access is denied, APPEND FROM terminates with
a runtime error. Refer to the "Network Programming" chapter in the
Programming and Utilities Guide for more information. No error is
raised if you attempt to open a .dbf file that is already open.


No se produce ningun error si se intenta abrir una .dbf que ya se encuentra abierta.
(Pero, ¿permite agregar los registros requeridos?

Talvez te sea de utilidad.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2111
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Problema con Append from

Postby LuisPonce » Tue Nov 03, 2009 12:57 am

Juan

Creo que la respuesta de nuestra amigo Francisco, es la correcta, recuerdo que en Clipper puro tenia el mismo problema si la base de la cual estoy intentando recuperar datos estaba abierta, entonces lo que hacia era cerrar esa tabla y hacerle el APPEND FROM con la condicion necesaria en tu caso :

USE PAGTEM

APPEND FROM PAG FOR &cFiltro


Saludos
Luis Ponce
User avatar
LuisPonce
 
Posts: 192
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU

Re: Problema con Append from

Postby juan_arroyo_t » Fri Nov 06, 2009 4:34 am

Gracias a Francisco y a Luis, les agradezco su ayuda

Tienen razón, para poder hacer el append from en pagtem debía tener cerrada la tabla origen (pag)

Saludos
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Problema con Append from

Postby FranciscoA » Fri Nov 06, 2009 1:23 pm

Juan:
Si las dos dbfs (fuente y destino) son idénticas, puedes probar con ésto:

//Toma los datos de un registro desde Area fuente y los graba en dbf destino,
//sin cerrar la dbf fuente. Las dos deben ser identicas.
Function AgregDesde(DbfFuente,DbfDestino)
local n:=0, aValCampos:={}

While (dbfFuente)->(!eof())
For n := 1 to (DbfFuente)->(Fcount()) //Array con valores de campos actual
aadd(aValCampos,(DbfFuente)->( FieldGet(n)) )
Next
(DbfDestino)->(dbAppend())
For n := 1 to (DbfDestino)->(Fcount()) //Agrega datos en la dbf destino
(DbfDestino)->( FieldPut(n,aValCampos[n]) )
Next

SysRefresh()
(dbfFuente)->(dbskip())
Enddo

return nil

Espero te sirva de algo.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2111
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Problema con Append from

Postby juan_arroyo_t » Sat Nov 07, 2009 4:36 pm

Muchas gracias Francisco

Mis bases de datos oigen y destino no son idénticas, pero me parece muy interesante tu codigo para tenerlo en cuenta cuando el caso así lo amerite

Saludos
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico


Return to FiveWin para Harbour/xHarbour

Who is online

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