Hola gente,

Nosé si el titulo del Asunto es exacto, pero la intención es ver si alguien con 
conocimientos en MySQL tiene alguna formula para resolver el siguiente problema:
Tengo una tabla de Proveedores, donde tiene un campo que indica el Saldo Actual 
del mismo y otra tabla que va registrando los movimientos de los mismos, con un 
formato de registro parecido a este:
CODPROV, DEBITO, CREDITO, SALDOANTERIOR , TOTDEB , TOTCRE , SALDOACTUAL entre 
otros campos...

La cuestion es la siguiente (es una migracion de un programa clipper/DBFs) que 
en un procedimiento, REVISO toda la tabla de movimientos y voy ACTUALIZANDO los 
campos SALDOANTERIOR , TOTDEB , TOTCRE , SALDOACTUAL registro a registro, por 
cada Proveedor segun las operaciones de Debitos y Creditos.
Al final del procedimiento, me queda en la tabla de Proveedores los Saldos 
Actuales, y en la tabla de movimientos todos los registros AJUSTADOS registro a 
registro con dichos campos como muestro a continuación...

DEBITO    CREDITO    SALDOANTERIOR    TOTDEB    TOTCRE    SALDOACTUAL
0.00      1264.45    0.00             0.00      1264.45   -1264.45
1264.45   0.00       -1264.45         1264.45   0.00      0.00
0.00      641.42     0.00             0.00      641.42    -641.42
3.40      0.00       -641.42          3.40      0.00      -638.02
638.02    0.00       -638.02          638.02    0.00      0.00

Los ultimos 4 campos son los que se ajustan registro a registro según los 
valores de los campos Debito y Credito.

Actualmente tengo hecho un procedimiento que realiza este trabajo 
correctamente...peeeero...tarda muuucho tiempo, creo que principalmente por que 
hago un query por cada 2 registros, de tal forma que si la tabla tiene 60000 
registros, hago 30000 querys!!!!

    If cTipoComp="FA" .or. cTipoComp="CI"
     cQuery:="Update MOVIPROV Set TOTCRE="+AllTrim(cCredito)+","
     nSalAct:=nSalAnt - Val(cCredito)
     nSalAnt:=nSalAct
     cQuery:=cQuery+"SALACT="+AllTrim(Str(nSalAct,12,2))+" Where 
IDMOVIPROV="+cID
    ElseIf cTipoComp="RE" .or. cTipoComp="NC"
     cQuery:="Update MOVIPROV Set TOTDEB="+AllTrim(cDebito)+","
      nSalAct:=nSalAnt + Val(cDebito)
      nSalAnt:=nSalAct
     cQuery:=cQuery+"SALACT="+AllTrim(Str(nSalAct,12,2))+" Where 
IDMOVIPROV="+cID
    ElseIf cTipoComp="AP" .and. nSaldo <> 0   //Comprobante 'Anticipo' y 
todavia NO aplicado
     cQuery:="Update MOVIPROV Set TOTDEB="+AllTrim(cDebito)+","
      nSalAct:= nSalAnt + Val(cDebito)
      nSalAnt:=nSalAct
     cQuery:=cQuery+"SALACT="+AllTrim(Str(nSalAct,12,2))+" Where 
IDMOVIPROV="+cID

¿¿¿ Existe algun metodo de MySQL, para que haga este proceso en un solo query o 
eventualmente un query por cada proveedor ???
¿¿¿ Existe alguna manera de poder concatenar multiples Updates, en un solo 
query ???

Desde ya muchas gracias si alguien puede aportarme algo de luz...bah...una 
lampara gigante!!!

Saludos,
Sergio Castellari

Responder a