Access - Uso de 3 condiciones

 
Vista:
Imágen de perfil de Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Uso de 3 condiciones

Publicado por Jhonattan (123 intervenciones) el 06/08/2017 03:06:02
Que tal mi gente un saludo para todos esos colegas que hacen vida en este gran foro, por acá quiero hacer una consulta a ver quien puede ayudarme a resolver este problema.

tengo dos tablas una llamada TBL_ALUMNOS Y TBL_COMPRAS

lo que necesito es lo siguiente:
aca subo un capture del formulario que estoy trabajando..
form

1 - lo primero que tengo que hacer es registrar a los alumnos cuyos datos dse guardaran en la tabla TBL_ALUMNOS

2- luego de haber registrado a estos alumnos se realiza la compra de servicios, esta operación la hago mediante el formulario que les deje allí en la imagen ok. Aquí viene el tema, para poder comprar servicios debo introducir el identificador del alumno con el cual voy a hacer la compra pero que necesito hacer antes de poder culminar este proceso.

3- hice un código donde aplico la función dlookup para que esta me busque los datos de x alumnos en la tabla TBL_ALUMNOS al traerme esos datos continuo con el proceso de llenado del formulario y finalizo la transacción presionando el botón guardar y todo es un exito ahora viene la parte que se me complica.

4- voy a poner como ejemplo que el alumno que acabo de registrar tiene el identificador 2050, cuando pero que pasa si yo quiero hacer otra operación con otro alumno, asigne la función dlookup para que antes poder ingresar otro registro primero me haga una busqueda dentro de la tabla TBL_COMPRAS, para que se hace esto para saber si el nuevo identificador que estoy introduciendo ya existe en esta tabla, pero aqui viene lo más complicado necesito que ese algoritmo haga 3 cosas.


A - verificar mediante dlookup en la tabla TBL_ALUMNOS si el identificador introducido no existe en esta tabla muestra un mensaje diciendo que no existe el identificador introducido

B - verificar mediante dlookup si el identificador introducido existe en la tabla TBL_COMPRAS si existe entonces muestra un mensaje diciendo el identificador introducido ya realizo compra de servicio, si desea aumentar el numero de disponibilidades de servicio vaya al modulo aumento de disponibilidad de servicio.

C - si el identificador existe en la tabla TBL_ALUMNOS pero no existe en la tabla TBL_COMPRAS me permita poder hacer la transacción para continuar con el proceso y una vez hecha la compra poder guardar estos datos en TBL_COMPRAS.

Igual adjuntare el código para que mas o menos visualicen lo que quiero hacer..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Private Sub Comando61_Click()
 
On Error Resume Next
 
Me.txtidentificador.SetFocus
 
Me.txtidentificador = DLookup("IDENTIFICADOR", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
 
If txtidentificador.Text = "" Then
 
MsgBox "El identificador que introdujo no Existe...", vbExclamation, "Registro no encontrado"
 
'-------AQUI TERMINA LA PRIMERA PARTE DEL CODIGO -------------------------------------------------------------------------------------------->
 
 
 
ElseIf Me.txtidentificador = DLookup("IDENTIFICADOR", "TBL_COMPRAS", "IDENTIFICADOR = " & "txtbuscar") Then
 
Me.txtidentificador = TBL_COMPRAS!IDENTIFICADOR
 
MsgBox "Ya no puede volver a comprar, este módulo es solo para los Identificadores que aún no hayan realizado compra: Para las recompras de Servicio vaya al módulo Aumentar Disponibilidad de Servicio", vbExclamation, "Identificador Registrado"
 
Else
 
Me.txtidentificador = DLookup("IDENTIFICADOR", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txtnombres = DLookup("NOMBRES", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txtapellidos = DLookup("APELLIDOS", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txtedad = DLookup("EDAD", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txtsexo = DLookup("SEXO", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txtcurso = DLookup("CURSO", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txttutor = DLookup("TUTOR", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txtnombrest = DLookup("NOMBRESYAPELLIDOS", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txttelefono = DLookup("TELEFONO", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
Me.txtcorreo = DLookup("CORREO", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
 
End If
 
'DoCmd.CancelEvent
 
 
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Uso de 3 condiciones

Publicado por Anonimo (3299 intervenciones) el 06/08/2017 09:19:50
Aplicas metodología que no es la propia de Access, parece una herencia de Visual Basic y (aunque comparten detalles) cada una de ellas sigue caminos diferentes.

Me baso para ello en la utilización de la propiedad .TEXT, que solo la tiene en Access el objeto activo (por eso ese cambio de foco:
Me.txtidentificador.SetFocus

Si quitas esa propiedad (Access aplicara 'Value' por defecto por ello no la requiere) podrás hacer exactamente lo mismo sin cambiar el objeto activo:

Si admites otra sugerencia:
Intenta ser constante en y con la definición de los objetos evitaras problemas futuros (puede darse el caso de que coexistan una variable y un campo con el mismo nombre y una inadecuada asignación puede ser catastrófica)

.- un ejemplo de lo anterior:
Me.txtidentificador = DLookup("IDENTIFICADOR", "TBL_ALUMNOS", "IDENTIFICADOR = " & "txtbuscar")
 
If txtidentificador.Text = "" Then


Si se utiliza 'Me.' Access limitara su búsqueda a los objetos del formulario
Sin el 'Me.' Access intentara localizar 'cualquier cosa' que se le asemeje en toda la base de datos (con un poco de suerte y si no se utilizo para otra cosa, encontrara el campo de ese formulario ... y solo se perdió un poco de tiempo)

(nota) ¿Dónde están las otras dos condiciones? ... yo solo veo una bastante repetida: "IDENTIFICADOR = " & "txtbuscar"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Uso de 3 condiciones

Publicado por Jhonattan (123 intervenciones) el 06/08/2017 15:08:59
Hola muy buenos días estimado Anonimo muchas gracias por tu aporte voy a probar esa sugerencia que me das para ver si aplicandola correctamente logro solucionar y si el campo IDENTIFICADOR se repite en varias ocasiones porque es el campo digamos que indexado con el es que realizo la busqueda de datos de cada alumno y por ser clave principal es inequívoco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Uso de 3 condiciones

Publicado por Jhonattan (123 intervenciones) el 06/08/2017 15:28:56
He probado la opción que me diste pero parece que no funciona te voy a pasar el Archivo para que comprendas un poco mejor la situación.

Una vez que abras la base de datos vas al FRM_ALUMNOS te invito a que insertes un registro asignale el identificador que tu quieras para ese ejemplo una vez que ya hayas registrado ese dato vas al FRM_COMPRASS y en el campo buscar inserta el identificador que registraste para que veas lo que sucede..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de 3 condiciones

Publicado por Anonimo (3299 intervenciones) el 06/08/2017 20:50:41
No esperaba que esa guía o consejo resolviese ningún problema actual, mas bien los futuros.

Revisar una base de datos ajena no es de las tareas que mas me agraden, casi siempre el código acostumbra a ser una extraña mezcla de trozos dispersos.

Me ha llamado la atención la dispersión de las tablas (unas 'dentro' otras 'fuera'), supongo que par el autor tendrá su lógica (otra de las causas que me hacen distanciarme: las diferentes y curiosas formas de enfocar soluciones que no acostumbran a tener futuro)

Solo puedo darte unas de guías:

.- Añade en las declaraciones del modulo y a continuación de 'Option Compare Database' una línea que ponga (puedes copiarla) 'Option Explicit'

Ello exigirá que rodas las variables que se utilicen estén correctamente declaradas (lo cual avisara y evitara un montón de errores)

.- Elimina (o comenta) esa 'línea maldita' que añades me refiero a : 'On Error Resume Next'

Esa línea es una opción 'sucia' casi la peor de todas, es como esconder la basura debajo de la alfombra, le siguen las de control de errores, en lugar de esconder los errores: hay que aplicar opciones que los eviten.

.- Hay una opción (en la barra de tareas de VBA) con el titulo: 'DEPURACION' y al seleccionarla la primera de las sub-opciones que ofrece es .... 'Compilar DataBase'

Utilízala sin temor, Access evaluara el código y presentara la línea (o líneas) con errores o que puedan faltar (tienes un error que corregir si deseas que el código funcione bien, con esa opción la localizaras).

.- Creo que no utilizas correctamente los desvíos condicionales (IF Then Else ...)

Una vez que condicionas ( IF A = 22 Then ....) o se cumple o no se cumple (para eso esta el ELSE), no tiene sentido utilizar un ELSEIF, eso (el ElseIF) es para imponer una nueva condición a los datos que ya cumplen la primera, no para utilizar en lugar del ELSE.

.- Repites en un montón de sitios (en ese formulario) un conjunto de acciones .... una SubFuncion las agruparía y haría el código mas eficiente, la escribiré a continuación y trabajara correctamente en y para ese formulario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Limpia()
Me.txtidentificador = ""
Me.txtnombres = ""
Me.txtapellidos = ""
Me.txtedad = ""
Me.txtsexo = ""
Me.txtcurso = ""
Me.txttutor = ""
Me.txtnombrest = ""
Me.txttelefono = ""
Me.txtcorreo = ""
Me.txttotal = ""
Me.txtcosto = ""
Me.txtunidades = ""
Me.txttipop = ""
Me.txtstatus = ""
Me.txtpago = False
Me.txtcantidadp = ""
Me.txtabono = False
Me.txtcantidada = ""
Me.txtpendiente = ""
Me.txtcomentario = ""
End Sub

Una vez que la crees en tu formulario, puedes sustituir toda esa asignación (limpieza de cuadros de texto) por algo tan simple como:
Limpia

(es decir para vaciar los cuadros de texto, ahora se llamaría a la función, el flujo del programa saltaría a esa función y al finalizar regresaría al punto anterior para continuar, similar a un GOSUB clásico si te sirve como nota aclaratoria)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Uso de 3 condiciones

Publicado por Jhonattan (123 intervenciones) el 08/08/2017 02:15:16
Hola Anonimo aún no logro resolver este problema de verdad crees que sea imposible que puedas revisar mi archivo para saber que solución planteas..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar