oRcs := oConexion:Query("Select * From MaesCont Order by NroAsi")
If oRcs==Nil
Return(.f.)
EndIf
While !oRcs:Eof()
fNroAsi := oRcs:Fields("NROASI"):Value
fFecAsi := oRcs:Fields("FECASI"):Value
fTotDeb := 0
fTotHab := 0
oRcsC := oConexion:Query("Select * From DetaCont Where NroAsi="+str(fNroAsi))
If oRcsC==Nil
Return(.f.)
EndIf
While !oRcsC:Eof()
fCodCta := oRcsC:Fields("CODCTA"):Value
fDebe := oRcsC:Fields("DEBE"):Value
fHaber := oRcsC:Fields("HABER"):Value
fTotDeb += fDebe
fTotHab += fHaber
CalCtaAntDH(fCodCta,fDebe,fHaber,"+")
oRcsC:MoveNext()
EndDo
oRcs:Fields("TotDeb"):Value := fTotDeb
oRcs:Fields("TotHab"):Value := fTotHab
oRcs:Save()
oRcs:MoveNext()
EndDo
//
Procedure CalCtaAntDH(fCodCta,fDebe,fHaber,fSumRes)
oRcsA := oConexion:Query("select * from cuentas where `codcta`='"+fCodCta+"'")
If oRcsA==Nil
Return(.f.)
EndIf
If !oRcsA:Eof()
If !Empty(fDebe)
If fSumRes = "+"
oRcsA:Fields("Debe"):Value += fDebe
Else
oRcsA:Fields("Debe"):Value -= fDebe
EndIf
EndIf
If !Empty(fHaber)
If fSumRes = "+"
oRcsA:Fields("Haber"):Value += fHaber
Else
oRcsA:Fields("Haber"):Value -= fHaber
EndIf
EndIf
oRcsA:Save()
EndIf
oRcsA:Close()
2. coloco un ejemplo sencillo donde cada vez que se revisa una procedimiento se incrementa la memoria, es como si no cerrara el oRcs coloco un ejemplo
cada vez que entra a CalCtaAntDH se incrementa la memoria.
METHOD UpdateSummary( cMaster, cMasKey, acMasCols, ;
cTrnTable, cTrnKey, acTrnCols, ;
cTrnWhere, cOperator )
function MYSQL_UpdateSummarySQL( cMaster, cMasKey, acMasCols, ;
cTrnTable, cTrnKey, acTrnCols, ;
cTrnWhere, cOperator )
oCn:UpdateSummary( "maescont", "nroasi", "totdeb,tothab", ;
"detacont", "nroasi", "debe,haber" ) )
oCn:UpdateSummary( "cuentas", "codcta", "debe,haber", ;
"detacont", "codcta", "debe,haber" ) )
UPDATE `maescont` m
LEFT OUTER JOIN
(
SELECT `nroasi`, SUM( debe ) AS t01, SUM( haber ) AS t02
FROM `detacont`
GROUP BY `nroasi`
) t
ON m.nroasi = t.nroasi
SET m.totdeb = IFNULL( t.t01, 0 ),
m.tothab = IFNULL( t.t02, 0 )
UPDATE `cuentas` m
LEFT OUTER JOIN
(
SELECT `codcta`, SUM( debe ) AS t01, SUM( haber ) AS t02
FROM `detacont`
GROUP BY `codcta`
) t
ON m.codcta = t.codcta
SET m.debe = IFNULL( t.t01, 0 ),
m.haber = IFNULL( t.t02, 0 )
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 32 guests