Se puede hacer con un sql o tengo que usar un recordset ?

01/05/2010 - 00:21 por Juan Carlos | Informe spam
Tengo este problema,
Mes Cuota Pago
1 20
2 25
3 40

Supongamos que ingreso 50 como Pago
Se puede hacer mediante una instruccion sql que me deje el siguiente
resultado ?
Mes Cuota Pago
1 20 20
2 25 25
3 40 5

O tengo que usar un recordset e ir prorateando el valor a medida que me
muevo por cada registro.
Gracias por cualquier sugerencia.

Preguntas similare

Leer las respuestas

#6 Juan Carlos
02/05/2010 - 16:23 | Informe spam
Esta perfecto tu ejemplo yo hago lo mismo pero .edit tambien lo uso y se
que no es lo mejor. Pero no encontre otra forma con sql por eso use el
mismo metodo que tu.
GRACIAS !

El 01-05-2010 12:36 p.m., Patxi Sanz escribió:
Hace tiempo preparé este ejemplo, a ver si te sirve:

-
http://cid-143f0ffa33a574e2.skydriv...idades.rar


Respuesta Responder a este mensaje
#7 Juan Carlos
02/05/2010 - 16:49 | Informe spam
Estimado Raipon, esto es lo que me gustaria hacer tal cual con un update.

El problema que veo en tu solucion es lo siguiente
Con 1 ejemplo de valores como mencione
Mes Cuota Pago
1 20
2 25
3 40


Tu solucion con un ingreso de 30 devuelve lo siguiente
Mes Cuota Pago
1 20 20
2 25 10
3 40 -15 ?



El menos quince (-15) no logro ver porque pasa, y otro problemita que
tiene es que si en la cuota 1 ya habia un pago parcial parcial de por
ejemplo 10 no lo toma en cuenta para repartir.
Supongamos una situacion previa.
Mes Cuota Pago
1 20 10
2 25
3 40


Despues de correrlo si ingreso 30 deberia quedar de la siguiente manera.
Mes Cuota Pago
1 20 20
2 25 20
3 40



Yo no lo he podido resolver con sql, tristemente quede con el .edit
.update si puedes ayudarme con el sql para quede optimizado te lo
agradezco igual sigo reviendo tu ejemplo porque creo que le falta muy
poquito para que quede funcionando con estas condiciones.

Creo que faltaria suma cuota+pago para que realmente tome algun valor
previo, pero el valor en negativo lo solucione poniendo un criterio >0
en el update.

Me faltaria que tome en cuenta si habia un pago anterior a la corrida.

El 01-05-2010 03:55 p.m., raipon escribió:
Hola, siempre es recomendable usar sql en vez de recordsets, pero la
instrucción update de Access, tiene muchas limitaciones (si la comparamos
con sql server, mysql, oracle, etc). Así que al final para evitar el error :
'esta operación debe utilizar una consulta actualizable ...' no hay más
remedio que embeber dentro del update una consulta agregada de dominio, con
lo cual, seguramente estamos utilizando recordsets (disfrazados,
encapsulados, ...). Pero en fin, aquí tienes un ejemplo, comprueba si tienes
mejor rendimiento que manejando un recordset :

Update Ejemplo
Set Pago > IIf(Nz(DSum('Cuota', 'Ejemplo', 'Mes<='& Mes),0)<= Ingreso,
Cuota, Ingreso- DSum('Cuota','Ejemplo','Mes<'& Mes))

En este caso la tabla utilizada se llama 'Ejemplo', y 'Ingreso' es un
parámetro.

Adios, un saludo.


Respuesta Responder a este mensaje
#8 raipon
02/05/2010 - 18:55 | Informe spam
Hola, para tener en cuenta todas las variables posibles, hay que estar
dispuesto a escribir un poco más :

Update Ejemplo
Set Pago IIf(IIf(Nz(DSum('Nz(Cuota,0) - Nz(Pago, 0)', 'Ejemplo', 'Mes <=' & Mes),0)
<= Ingreso, Cuota, Ingreso - Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)','Ejemplo','Mes<' & Mes),0)) < 0, 0, IIf(Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)', 'Ejemplo', 'Mes <=' & Mes),0) <= Ingreso, Cuota, Ingreso -
Nz(DSum('Nz(Cuota,0) - Nz(Pago,0)','Ejemplo','Mes<' & Mes),0)));

Por cierto, si te funciona, me debes dos cervezas.

Adios, un saludo.
Respuesta Responder a este mensaje
#9 raipon
02/05/2010 - 18:56 | Informe spam
Un saludo Patxi.

"Patxi Sanz" <patxisanz[ARROBA]yahoo[PUNTO]es> escribió en el mensaje
news:
Lo que ocurre es que los que no llegamos a tu nivel de SQL, tenemos que
hacer trampas para conseguir lo mismo que tú :-)

Un saludo,


Patxi Sanz
Tudela (NA)
Dirección "corta": http://www.pasa.es.tt/
Dirección "completa": http://users6.jabry.com/patxisanz/
Respuesta Responder a este mensaje
#10 Juan Carlos
02/05/2010 - 21:29 | Informe spam
Excelente !
Si te las debo realmente funciona perfecto !
Sos de Argentina ? me avisas que te hago llegar 2 quilmes bien heladas
porque te lo mereces.
Muchisimas gracias por tu ayuda.

El 02-05-2010 01:55 p.m., raipon escribió:
Hola, para tener en cuenta todas las variables posibles, hay que estar
dispuesto a escribir un poco más :

Update Ejemplo
Set Pago > IIf(IIf(Nz(DSum('Nz(Cuota,0) - Nz(Pago, 0)', 'Ejemplo', 'Mes<='& Mes),0)
<= Ingreso, Cuota, Ingreso - Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)','Ejemplo','Mes<'& Mes),0))< 0, 0, IIf(Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)', 'Ejemplo', 'Mes<='& Mes),0)<= Ingreso, Cuota, Ingreso -
Nz(DSum('Nz(Cuota,0) - Nz(Pago,0)','Ejemplo','Mes<'& Mes),0)));

Por cierto, si te funciona, me debes dos cervezas.

Adios, un saludo.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida