Ciclo do while en access vba

Necesito de su apoyo para realizar un ciclo do while que me permita recorrer 15 textbox y 10 cuadros combinados. La idea es que el ciclo haga su recorrido y si los componentes se encuentran llenos, entonces te deje grabar en blanco y de lo contrario, si encuentra un componente con texto, entonces que te pida llenar todos los textbox y los combobox. No tengo la menor idea de como se haga esto, en sí; pretendo integrarlo en un proyecto que estoy casi finalizando pero el usuario me solicita el ciclo do while y no se como se hace. Me pueden apoyar

2 Respuestas

Respuesta
1

No es necesario, hacer el ciclo. Una manera seria verificar tus txtbox y combos. (Solo que seria algo de código)Por ejemplo:

private sub (Evento al hacer clic)
If not isnull(me.combo1) Or not isnull(me.txt1).......then
   msgbox "llene todos los campos"
else
 'guardar registro
end if

Hola Antonio,

Una pregunta al respecto:

La idea es que si todos los campos están vacíos el sistema te deje grabar los datos en la db, o si todos los campos están llenos el sistema te deje grabar en la db; pero si solo hay algunos campos llenos, entonces el sistema te mande un mensaje que te diga que los llenes todos o los borres todos, ¿el código que me mandas puede hacer eso?

Mira, estaba intentando con este código pero me manda un error en la línea: camporequerido.SetError(T,CampoRequerido)

Private Sub campo_requerido()
Dim t As Control
For Each t In Me.Controls
If TypeOf t Is TextBox Then
If Trim(t.Text) = "" Then
camporequerido.SetError(T,CampoRequerido)
Else
MessageBox.Show ("Dot Net Perls is awesome")
End If
Else
MsgBox "control diferente de textbox"
End If
Next
End Sub

Saludos.

Si el código que te deje hace lo que pides.

Primero revisara si algún campo esta lleno, si lo esta pedirá que llenes todos.

Si los campos están vacíos, guarda el registro o si están todos llenos igual guarda el registro.

Hola, 

me funcionó bien el código que me proporcionaste hasta cierto punto, te explico:

Si los campos están vacíos me deja grabar en la base de datos, si yo lleno los campos me deja grabar en la base de datos, pero si previamente vienen llenos desde la base de datos me sigue mandando mensaje de que faltan campos por llenar. Me puedes apoyar con este inconveniente?

te mando el código que estoy utilizando y una imagen de cuando los textbox vienen llenos

If Not IsNull(cbo_tipo_via_2) Or Not IsNull(txt_calle_2) Or Not IsNull(txt_domicilio_estatus_2)  Then

MsgBox "Faltan campos por llenar "
Exit Sub (Este lo agregué para que salga de la sub-rutina y no te deje grabar si faltan campos)
Else

Recordset.Edit
Recordset.Fields("txt_tipo_via_2") = tipo_via_2
Recordset.Fields("txt_calle_2") = calle_2
Recordset.Fields("txt_domicilio_estatus_2") = domicilio_estatus_2
End If

Si observas en la imagen, todos los campos están llenos pero manda el mensaje de que faltan campos por llenar, esto sucede cuando la base de datos ya tiene previamente cargados los campos, si no los tiene o si los llenas tu, te deja grabar.

Saludos

El campo Brick atv esta vacío. ¿Ese campo también validas?

Si vas a editar una forma más fácil seria el currentdb.execute "Update"

El campo brick_atv no se valida, esto debido a que no es modificable por el usuario.

Cómo funcionaría con el currentdb.excecute??

Saludos

Ah, si te refieres a que si hago una consulta SQL con el currentdb, si la hago con otra función.

El código se muestra bien al validar los campos. Revisa los nombres tal vez escribiste uno equivocado.

Hola, 

Lo que veo es que el código te deja pasar si los campos están vacíos o si los llenaste tu y hasta ahí funciona muy bien, pero le adicioné un Exit Sub para que si algunos están llenos no te deje pasar y completes todo o borres todo, pero cuando recibe los campos llenos de la base de datos, estén completos o incompletos lo que hace es enviarte el mensaje de que faltan campos, te envío unas imágenes de los campos en la db y en la interfaz gráfica:

y el código a continuación te lo dejo, ojalá me puedas ayudar con esto.

If Not IsNull(Me.tipo_via_2) Or Not IsNull(Me.calle_2.Value) Then
MsgBox "Faltan campos por llenar en el domicilio 2"
Exit Sub
Else
Recordset.Edit
Recordset.Fields("tipo_via_2") = tipo_via_2
Recordset.Fields("calle_2") = calle_2
Recordset.Update
End If

Gracias por tomarte la molestia de ayudarme, quedo en espera de tu amable comentario.

Saludos.

este código .

https://goo.gl/y1bGYJ 

Al dar clic en el botón editar, lo recupero con un recordset y válido que no este ningún campo vació.

Y me lo hace correctamente. Aun que este recuperándolo de la tabla.

¿Cómo recuperas tu la información?

A través del recordset

En el ejemplo que te mande, hago lo mismo que tu quieres y no tengo ningún problema.

¡Gracias! 

Por la ayuda, me funciono bien.

Saludos

Muy bien

Respuesta
1

Lo primero, si quieres controlar si unos pocos controles están rellenos, puedes usar la opción de Antonio, pero con 15 cuadros de texto y 10 combinados, hacerlo con Ifs es una "locura". Es preferible usar un bucle.

Segundo, el código que pones, salvo que tengas algún módulo en el que definas esos objetos y procedimientos, no es un código de VBA Access...

Un código que te puede servir podría ser éste:

Private Sub....
Dim ctl As Control
For Each ctl In Me.Controls
   If ctl.Type=acTextBox Or ctl.Type=acCombobox Then
      If IsNull(ctl) or ctl.Value="" Then
         MsgBox "Hay campos por rellenar para poder grabar"
         Exit Sub
      End If
   End If
Next ctl
'Si llegas aquí, es que todos los controles están cubiertos y programas el guardado
...
End Sub

También puedes ver este ejemplo que preparé, para marcar los campos obligatorios de una "pasada": http://siliconproject.com.ar/neckkito/index.php/component/content/article/93-ejemplos-explicados/ejemplos-de-formularios/245-campos-obligatorios 

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas