Insertar DAtos

Tengo la siguiente situación:
Estoy trabajando una bd que genere un plan de cobro de mensualidades de un alumno que cursa un por curso.
Utilizo las siguientes tablas:
Alumno: Cod + Nombre + Ciudad, etc...
Cuenta: CodCuenta + Nombre + ValorMatricula + PagoMensual, Duracion del Curso, etc...
Matricula: CodMatri + CodCuenta + CodAlumno + ValorM + Nota
PagoMensual: CodPM + CodMatri + Fecha + ValorMensual + Abono + Saldo
Relaciones:
Un alumno se puede matricular en varios cursos (1 a muchos)
De una Cuenta muchas matriculas (1 a muchos)
De una Matricula de un curso por se genera un plan de pagos mensuales
Formularios Principal:
CodMatri
CodCuenta (Combo Box)
CodAlumno (Combo Box)
ValorM (se agrega al seleccionar una Cuenta: proviene del campo ValorMatricula de
la tabla Cuenta)
Nota
Agregue un botón para agregar, buscar, salir y el botón llamado Generar Plan de Pago
Necesito generar un código que al hacer clic en este botón se abra otro formulario conteniendo el plan de pago mensual de esa matricula. Es decir, si el curso dura 3 meses se agreguen 6 registros con los siguientes campos:
Fecha + ValorMensual + Abono + Saldo
Ejemplo:
Fecha ValorMensual Abono Saldo
01/01/08 100
01/02/08 100
01/03/08 100
En la fecha se agregan 3 meses y ValorMensual proviene de la cuenta seleccionada
Confiando en Dios me pueda ayudar.

1 Respuesta

Respuesta
1
Para este caso me parece que lo mejor sería hacerlo con una serie de consultas INSERT INTO, tantas como mensualidades (mediante un bucle), tomando los valores de los controles de los campos que tienes en el formulario y variando las fechas de los pagos de mes en mes.
a) cadena SQL a ejecutar INSERT INTO PagoMensual (CodPM, CodMatri, Fecha, ValorMensual) VALUES (1, 123, 01/01/08, 100)
Los valores en cursiva varían en cada cadena SQL
b) pedir el número de meses para el bucle para generar las cadenas SQL
For Meses = 1 to NumeroDePagos
... código de las cadenas SQL
Next
c) se necesitan los valores siguientes para la consulta INSERT INTO
c.1) CodPM, si es autonumérico ingoralo, si no es autonumérico se habrá de tomar de algún lado
Si es autonumérico la cadena SQL es: INSERT INTO PagoMensual (CodMatri, Fecha, ValorMnesual) VALUES (123, 01/01/08, 100)
Si no es autonumérico la cadena es la primera que te he puesto
c. 2) Matrícula, tendrás el código de la matricula en el formulario, para el código que tienes que generar voy a suponer que el textbox se llama txtBoxMatr
lngCodMatr = Me.txtBoxMatr
c.3) se ha de incrementar por meses según el valor del bucle. No baldía sumarle 30 a la fecha ya que todos los meses no tienen 30 días, habrá que hacerlo generando la fecha con 01 para el día, 0n para el mes y tener en cuenta los cambios de año si se empieza a pagar en noviembre, y son tres pagos
c.4) Valor del pago, igualmente voy a suponer que lo tienes en un formulario en un control textbox llamado txtBoxValorPago. Si no es así hay dos opciones, a) lo pones aunque sea visible false, o lo lees de otro formulario
dblPago = Me.txtBoxValorPago
Allá va el código VBA a poner el un botón
Dim InputNumeroDePagos
Dim intPagos As Integer
Dim bclPagos As Integer
Dim Resp As Integer
Dim lngCodMatr As Long
Dim dblPago As Double
Dim FirstDiaPago As Date
Dim datDiaPago As Integer
Dim datMesPago As Integer
Dim datAñoPago As Integer
Dim datFechaPagoBucle As Date
Dim strSQL As String
InputNumeroDePagos = 0
InputNumeroDePagos = InputBox("¿Número de mensualidades?", "Pago mensual", 0)
If InputNumeroDePagos = "" Then Exit Sub
Do While Not IsNumeric(InputNumeroDePagos)
MsgBox ("Por favor introduzca un número")
InputNumeroDePagos = InputBox("Número de mensualidades")
If InputNumeroDePagos = "" Then Exit Sub
Loop
intPagos = InputNumeroDePagos
If intPagos = 0 Then
MsgBox "No se admiten pagos de cero mensualidades", vbOKOnly + vbCritical, "Pago mensual"
Exit Sub
End If
Resp = MsgBox("Se va a relizar el apunte de " & intPagos & " mensualidades", vbOKCancel + vbQuestion, "Pago mensual")
If Resp = 2 Then Exit Sub
lngCodMatr = Me.txtBoxMatr
dblPago = Me.ValorPago
FirstDiaPago = InputBox("¿Primer día de pago?", "Pago mensual", CDate("01/" & 1 + Month(Now()) & "/" & Year(Now())))
DoCmd.SetWarnings False
For bclPagos = 0 To intPagos - 1
datDiaPago = Day(FirstDiaPago)
datMesPago = 1 + ((bclPagos + Month(FirstDiaPago) - 1) / 12 - Fix((bclPagos + Month(FirstDiaPago) - 1) / 12)) * 12
datAñoPago = Year(FirstDiaPago) + Fix((bclPagos + Month(FirstDiaPago) - 1) / 12)
datFechaPagoBucle = CDate(CStr(Right("00" & datDiaPago, 2) & "/" & Right("00" & datMesPago, 2) & "/" & Right("0000" & datAñoPago, 4)))
strSQL = "INSERT INTO PagoMensual (CodMatri, Fecha, ValorMensual) VALUES (" & lngCodMatr & ",'" & datFechaPagoBucle & "'," & dblPago & ")"
DoCmd.RunSQL strSQL
Next
DoCmd.SetWarnings True
Fin del código
Espero que te sea de ayuda
Cuestiones que tienes que tener en cuenta a la hora de personalizar para tu BD
- He utilizado el nombre de dos controles como te dije antes: txtBoxMatr y ValorPago, contienen los valores del formulario. Has de poner el nombre que tengas tu para los textbox
- He supuesto que el código de pago lo tienes autonumérico, por eso no está en la cadena SQL. Si no lo tuvieses autonumérico tendrás que meterlo en la cadena SQL (yo casi nunca utilizo los autonuméricos, pero sé que es habitual usarlos, por eso lo he hecho de esta manera
- He supuesto que el código de matricula es un campo numérico (autonumérico en la tabla matriculas), si fuese de texto la parte de la cadena SQL en el código VBA debería llevar el identificador de texto comilla simple '
en lugar de: "INSERT INTO ... VALUES (" & lngCodMatr & ", ...
sería: "INSERT INTO ... VALUES ( ' "  lngCodMatr & " ', ...)
Gracias por la ayuda.
Tuve que crear 3 variables publicas para tomar el valor del NoCurso, ValorMensual y Duración del Curso, y después utilice la sentencia FOR.
El calculo de la fecha me fue de mucha ayuda.
Le agradezco mucho
Dios lo bendiga y muchas bendiciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas