Combinación de consultas totales en access (Sveinbjorn)

Tengo una tabla llamada TSituacion que es un histoiral de cada socio para saber si esta de alta o baja y en que fechas se produjo cada cual, pues después de realizar diversas consultas se creo una consulta CSituacionSocio que me dice cual es el estado actual de cada socio (Alta, Baja). Y lo mismo he realizado con la tabla Tcuotas, Tengo una consulta llamada CCuotaActual que me arroja el valor de la ultima cuota elegida por cada socio.

Pues yo utilizo esa consulta junto con la de socios para cargar las mensualidades de cada mes y me entran todos los socios ya estén de alta o baja. Ahora si le añado los dos campos de la consulta CCuotaActual y en el criterio le pongo Alta me funciona pero tengo triplicado las consultas una para mensual, anual y trimestral, como puedo hacer para filtrarlo desde el formulario es decir es un formulario continuo (FCargoCuota) que por ejemplo esta basado en esa consulta con todos los campos sin criterio ninguno y que se abra apareciendo solo los socios que estén de alta, y luego una vez en el crear un combobox con tres opciones (Anual, Mensual, Trimestral) y un botón para filtrar (Hasta hay bien) si yo luego uso un botón con el siguiente código para cargar las cuotas:

Private Sub cmdAceptar_Click()

Dim rstOrigen As DAO.Recordset
Dim rstDestino As DAO.Recordset
Set rstOrigen = CurrentDb.OpenRecordset("CCargoCuotaMensual") 
Set rstDestino = CurrentDb.OpenRecordset("TPagoCuota")
Do Until rstOrigen.EOF
rstDestino.AddNew
rstDestino("Socio") = rstOrigen("[Codigo Socio]")
rstDestino("Nombre") = rstOrigen("Nombre")
rstDestino("Tipo") = rstOrigen("Tipo")
rstDestino("Concepto") = rstOrigen("Concepto")
rstDestino("Descuento") = rstOrigen("Descuento")
rstDestino("Importe") = rstOrigen("Importe")
rstDestino("Mensualidad") = Me.Mensualidad

rstDestino.Update
rstOrigen.MoveNext
Loop

rstDestino.Close

rstOrigen.Close

Set rstOrigen = Nothing

Set rstDestino = Nothing
MsgBox "Cuotas Cargadas Correctamente", vbInformation, "Aviso"
DoCmd. Close acForm, Me. Name

Me cargaria todas las que estan filtradas o todas las que en un principio se abrieran con el formulario.

1 respuesta

Respuesta
1

El código para el botón filtrar sería de este estilo:

Dim miPeriodo As String

miPeriodo=Nz(Me.cboPeriodo,"")

If miPeriodo="" Then

MsgBox ·"Tienes que seleccionar un periodo"

Exit Sub

End If

Me.Filter="Perido='" & miPeriodo & "'"

Me.FilterOn=True

Teniendo en cuenta los nombres que tu tengas.

Obviamente, el formulario lo has de basar sobre la consulta sin criterios.

El código para asignar las cuotas (el de cmdAceptar), te va a coger todos los datos, a menos que le cambies los recordsets, por ejemplo:

Set rstOrigen = CurrentDb.OpenRecordset("SELECT * FROM CCargoCuotaMensual WHERE Periodo='" & miPeriodo & "'") , es decir, has de filtrar la consulta por el valor seleccionado en el combo.

Muy bien lo voy a probar en breve que llego al ordenador así me evito triplicar las consultas y formularios, ¿y para abrir el Formulario solo con los que estén de alta?

Un saludo

O filtras ya la consulta, o le pones en las propiedades del formulario, en la pestaña datos, en la fila Filtrar por, el criterio, (Alta=Verdadero, imagino) y Filtrar al cargar en Sí.

En ese caso, también tendrás que modificar el código del boton filtrar para que filtre por los dos criterios:

Me.Filter="Alta=True And "Perido='" & miPeriodo & "'"

Todo ello suponiendo que Alta sea un checkbox.

la filtro directamente en la consulta

Buenas noches siguiendo con este formulario como ves el recorset copia los datos a un tabla llamada TPagoCuota, luego cuando pagan la cuota se recupera el formulario tiene el siguiente código:

Private Sub cmdAceptar_Click()

Dim miSql As String
Dim miSql2 As String
DoCmd.SetWarnings False
miSql = "update TPagoCuota set Fecha=Fecha.value where [Socio]=" & Me.Socio & " AND [Mensualidad]='" & Me.Mensualidad & "'"
miSql2 = "UPDATE TPagoCuota SET Pagado=true WHERE [Socio]=" & Me.Socio & " AND [Mensualidad]='" & Me.Mensualidad & "'"

DoCmd.RunSQL miSql
DoCmd.OpenReport "ReciboCuota", acViewPreview
DoCmd.RunSQL miSql2
DoCmd.SetWarnings True
DoCmd.Close acForm, Me.Name

End Sub

Como ves lo que hace es cumplimertar la fecha que no estaba puesta y poner true el campo Pagado.

Ahora bien mi pregunta viene como puedo hacer para que el año que viene no me modifique las fechas de los meses que haya ya es decir volvera haber enero, febrero que no me modifique las del año 2014 tendría que añadir algun campo o como lo puedo resolver.

Un saludo

Imagino que en TPagoCuota, al momento de actualizar, sólo tienes un registro con la fecha vacía para cada socio. Pues si en la SQL le pones esa condición, ya lo tienes resuelto. Además, no te hace falta hacer dos SQL, puedes actualizar todo en una, algo así:

miSql = "UPDATE TPagoCuota SET Fecha=#" & Format(Me.Fecha,"mm/dd/yyyy") & "#,Pagado=True WHERE Socio=" & Me.Socio & " AND [Mensualidad]='" & Me.Mensualidad & "' AND Fecha IS NULL"

Por cierto, tal como tienes definida la primera SQL, ¿te actualiza bien la fecha?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas