Ayuda Visual Basic.

Buenas, estoy tratando de hacer un boton de modificación de datos para un formulario. Y parte del código me esta dando algunos problemas, espero que podais ayudarme.

Este es el código rebelde:
Dim registros2 As Recordset, cosa As Integer
Set dbs = CurrentDb
Set registros2 = dbs.OpenRecordset("select Nombre, Edad from mayores where [Nombre]='" & Nombre & "'", dbOpenDynaset)

cosa = 18





If registros2!Edad > cosa Then

registros2.Edit
registros2![Nombre] = Nombre

registros2![Edad] = Edad

MsgBox "¡¡Se ha producido una modificación en la edad de un adulto¡¡", vbInformation, "AVISO"

registros2.Update

registros2.Close
Else





If Edad > 18 Then

registros2.AddNew

registros2![Nombre] = Nombre

registros2![Edad] = Edad

MsgBox "¡¡Bien, su vecino ya es mayor de edad¡¡", vbInformation, "AVISO"

registros2.Update

registros2.Close

Else


registros2.Delete
MsgBox "registro borrado de la tabla mayores"
registros2.Close


End If



End If




dbs.Close
End Sub


La general de esta BD es una serie de usuarios que se almacenan en una tabla usuarios y, que en caso de ser mayores de 18 años, se almacenan tambien en una tabla mayores.
El problema esta al modificarlo, si son menores no tengo ningun problema, tampoco si cambio la edad de un adulto por otra que no baje de los 18 años.

En cambio, si a un usuario menor le introduzco una edad superior a 18 no me crea el registro en la tabla mayores y me da un error 3021: No hay ningún registro activo.
Lo mismo sucede si decido modificar la edad de un adulto por una menor a 18, aunque en este caso no da error, simplemente en lugar de realizar el delete que es lo que deberia hacer, edita la edad de la tabla adultos.

A ver si alguien que realmente sepa algo de visual (No como yo xD) puede darme una solción.

Un saludo y muchas gracias
loki_nkc escribió:Buenas, estoy tratando de hacer un boton de modificación de datos para un formulario. Y parte del código me esta dando algunos problemas, espero que podais ayudarme.

Este es el código rebelde:
Dim registros2 As Recordset, cosa As Integer
Set dbs = CurrentDb
Set registros2 = dbs.OpenRecordset("select Nombre, Edad from mayores where [Nombre]='" & Nombre & "'", dbOpenDynaset)

cosa = 18





If registros2!Edad > cosa Then

registros2.Edit
registros2![Nombre] = Nombre

registros2![Edad] = Edad

MsgBox "¡¡Se ha producido una modificación en la edad de un adulto¡¡", vbInformation, "AVISO"

registros2.Update

registros2.Close
Else





If Edad > 18 Then

registros2.AddNew

registros2![Nombre] = Nombre

registros2![Edad] = Edad

MsgBox "¡¡Bien, su vecino ya es mayor de edad¡¡", vbInformation, "AVISO"

registros2.Update

registros2.Close

Else


registros2.Delete
MsgBox "registro borrado de la tabla mayores"
registros2.Close


End If



End If




dbs.Close
End Sub


La general de esta BD es una serie de usuarios que se almacenan en una tabla usuarios y, que en caso de ser mayores de 18 años, se almacenan tambien en una tabla mayores.
El problema esta al modificarlo, si son menores no tengo ningun problema, tampoco si cambio la edad de un adulto por otra que no baje de los 18 años.

En cambio, si a un usuario menor le introduzco una edad superior a 18 no me crea el registro en la tabla mayores y me da un error 3021: No hay ningún registro activo.
Lo mismo sucede si decido modificar la edad de un adulto por una menor a 18, aunque en este caso no da error, simplemente en lugar de realizar el delete que es lo que deberia hacer, edita la edad de la tabla adultos.

A ver si alguien que realmente sepa algo de visual (No como yo xD) puede darme una solción.

Un saludo y muchas gracias


Tienes que meterlo todo en el mismo caso, sino la condición se cumplirá en el primer IF y cuando haga el segundo IF ya no tendrás los datos verdaderos. Hazlo todo más ordenado:

Si es menor de 18 años
{
---Si aquí tienes que hacer varias opciones, vuelves a poner otro IF---
}
Sino lo es
{
---Si aquí tienes que hacer varias opciones, vuelves a poner otro IF---
}

Puedes pasar el dato que recoges de la Base de Datos a una variable y así no tendrás ningún problema de modificación.
SFII escribió:
loki_nkc escribió:Buenas, estoy tratando de hacer un boton de modificación de datos para un formulario. Y parte del código me esta dando algunos problemas, espero que podais ayudarme.

Este es el código rebelde:
Dim registros2 As Recordset, cosa As Integer
Set dbs = CurrentDb
Set registros2 = dbs.OpenRecordset("select Nombre, Edad from mayores where [Nombre]='" & Nombre & "'", dbOpenDynaset)

cosa = 18





If registros2!Edad > cosa Then

registros2.Edit
registros2![Nombre] = Nombre

registros2![Edad] = Edad

MsgBox "¡¡Se ha producido una modificación en la edad de un adulto¡¡", vbInformation, "AVISO"

registros2.Update

registros2.Close
Else





If Edad > 18 Then

registros2.AddNew

registros2![Nombre] = Nombre

registros2![Edad] = Edad

MsgBox "¡¡Bien, su vecino ya es mayor de edad¡¡", vbInformation, "AVISO"

registros2.Update

registros2.Close

Else


registros2.Delete
MsgBox "registro borrado de la tabla mayores"
registros2.Close


End If



End If




dbs.Close
End Sub


La general de esta BD es una serie de usuarios que se almacenan en una tabla usuarios y, que en caso de ser mayores de 18 años, se almacenan tambien en una tabla mayores.
El problema esta al modificarlo, si son menores no tengo ningun problema, tampoco si cambio la edad de un adulto por otra que no baje de los 18 años.

En cambio, si a un usuario menor le introduzco una edad superior a 18 no me crea el registro en la tabla mayores y me da un error 3021: No hay ningún registro activo.
Lo mismo sucede si decido modificar la edad de un adulto por una menor a 18, aunque en este caso no da error, simplemente en lugar de realizar el delete que es lo que deberia hacer, edita la edad de la tabla adultos.

A ver si alguien que realmente sepa algo de visual (No como yo xD) puede darme una solción.

Un saludo y muchas gracias


Tienes que meterlo todo en el mismo caso, sino la condición se cumplirá en el primer IF y cuando haga el segundo IF ya no tendrás los datos verdaderos. Hazlo todo más ordenado:

Si es menor de 18 años
{
---Si aquí tienes que hacer varias opciones, vuelves a poner otro IF---
}
Sino lo es
{
---Si aquí tienes que hacer varias opciones, vuelves a poner otro IF---
}

Puedes pasar el dato que recoges de la Base de Datos a una variable y así no tendrás ningún problema de modificación.


Muchas gracias por tu respuesta compañero, pero no soy capaz de realizar el código tal y como dices, no puedo colocar {} porque el programa interpreta que son lineas de código sueltas y siempre da error de compilación.

Lo de meter el valor en una variable ya lo he hecho pero sigo en las mismas, no entiendo por que me da ese error de que no hay ningún registro activo. :S

¿Podrias explicarme como hacerlo mas detalladamente por favor?

Muchas gracias.
Las llaves las he puesto para que lo entiendas, en VB no se usan.
Tú primero te haces en una hoja un esquema con TODOS LOS CASOS POSIBLES que puedan pasar en tu programa y los cuentas y a partir de ahí tendrás que hacer los IFs correspondientes de todos estos casos. Si una condición se usa para dos casos, tendrás que poner un IF dentro de un IF como te he puesto arriba.

Otra cosa, mira por internet algún tutorial del debugger en VB y así podrás saber el valor que tienen las variables en cada momento y sabrás que es lo que falla. Sino (Menos recomendable) ves haciendo msg.box(-Nombre de variable-) antes y después de los bucles para para saber que valores tienen antes y después de entrar en las condiciones.
3 respuestas