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]

Responder a