Creo que te entendí bien, y realmente la alternativa del procedimiento almacenado es la mejor opción. Si te urge realizar la solución, creo que mi alternativa es perfectamente viable, sin código lo planteo así:
Me traigo la tabla de movimientos de proveedores La trabajo en un cursor local Luego, a traves de un SCAN updateo la tabla de movimientos para campos calculados. Creo que guardar hoy campos calculados es de la era industrial (salvo que sea un BI), estimo que el sistema lo heredaste, así que meta. Yo usaría el MYSQL WorkBench para desarrollar el procedimiento almacenado. Saludos. El 23 de noviembre de 2012 13:57, Sergio D.Castellari < [email protected]> escribió: > ** > Hola chicos, > > Primero gracias! ya que toda ayuda es bienvenida y realmente quiero hacer > que este procedimiento se haga mas rapido. > > *Alejandro: * > Por ahi no fui claro o no me explique bien: NO quiero que me devuelva un > cursor. Lo que quiero es que la tabla de movimientos de proveedores sea > revisada completamente y ajustado los campos que nombre: *SALDOANTERIOR, > TOTDEB, TOTCRE, SALDOACTUAL* registro a registro. Por eso puse el > ejemplito con los registros para ver como se actualizan (update) de dichos > campos. > > Rebuscando informacion, creo que lo que necesito es un *Procedimiento > almacenado* que haga todo el proceso en Servidor. Es decir, el proceso > (la logica) de lo que hago desde los clientes, deberia ser traducido a un > procedimiento almacenado en el Server, y que se ejecute ahi cuando lo > llame. Ni siquiera necesito que devuelva nada, solo actualice la tabla de > movimientos de proveedores. > > El tema es QUE NO SE COMO HACER UN PROCEDIMIENTO ALMACENADO!!! > > Francisco: > Creo que el tema pasa por lo que acabo de poner: esto solo funcionará > rapido si lo hago desde un procedimiento almacenado! > > ¿¿¿ Alguien sabe hacer procedimientos almacenados en MySql ???? Si es asi > les paso la logica que quiero hacer, y luego meto mano para probar y/o > ajustarlo! > > Saludos, > Sergio Castellari > > > > > > ----- Original Message ----- > *From:* Alejandro Paciotti Iacchelli <[email protected]> > *To:* GUFA List Member <[email protected]> > *Sent:* Friday, November 23, 2012 12:40 AM > *Subject:* [GUFA] Calcular Saldos (movimientos) iteractivos con MySQL > > Porque no traes en un cursor todos los movimientos mas los campos que > necesites en cero. Y luego con un procedimiento los calculas en el cursor > de FOX, y si querés, luego podés recorrer ese cursor y volver a grabar en > MYSQL. > > Sería: SELECT CODPROV, DEBITO, CREDITO, 0.00 AS SALDOANTERIOR , 0.00 AS > TOTDEB , 0.00 AS TOTCRE , 0.00 AS SALDOACTUAL FROM TablaMovimientos ORDER > BY CODPROV > > (No me quedó claro si la tabla de movimientos la traes de DBF) > > Y luego, en este cursor lo tendrías que recorrer e ir calculando el > SALDOANTERIOR EL TOTDEB, TOTCRE y el SALDOACTUAL. > > Saludos. > > > > > > El 23 de noviembre de 2012 00:12, Sergio D.Castellari < > [email protected]> escribió: > >> ** >> ** >> 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 >> ** >> > > > > -- > [email protected] > > -- [email protected]
