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