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 To: GUFA List Member 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]
