Access - Consultas??

   
Vista:

Consultas??

Publicado por Anuka (33 intervenciones) el 24/07/2012 10:04:22
Hola,
Como puedo hacer para que un campo tome valores en función de que un campo anterior tenga o no datos?

Os pongo un ejemplo: Tengo un campo A, B y C, todos ellos cuadros combinados. Cuando selecciono el valor1 de A, B solo muestra las combinaciones posibles para la condición A=valor1. Si elijo el valor2 para B, C nos muestra las combinaciones posibles donde A=valor1 y B=valor2.

Como puedo decirle al campo C que me muestre todos los valores donde A=valor aunque B=Null?

Gracias
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
Imágen de perfil de Neckkito

Consultas??

Publicado por Neckkito (1104 intervenciones) el 24/07/2012 16:31:51
Hola!

Te contesto en abstracto, porque con los datos que das poco más puedo hacer.

Lo que puedes hacer es redefinir la propiedad del RowSource el tercer combo en función de si B tiene valor o no.

Algo así como (te indico sólo el bloque condicional):

...
If not isnull(B) then
'Y le defino el origen de la combinación de A y B
Else
'Y le defino el origen de la combinación sólo con A
End if
...

A ver si con esto puedes apañarte.

Un saludo,

Neckkito
... http://neckkito.eu5.org ...
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

Consultas??

Publicado por Anuka (33 intervenciones) el 30/07/2012 11:56:29
Gracias Neckkito.
Te detallo un poco más:
Tengo una tabla CASOS con los campos A, B y C. Y un formulario CASOSF con tres combos comboA, comboB y comboC. En las propiedades de los campos del formulario tenemos:

Para el comboA, en Datos:
- Origen del control: A
- Origen de fila: SELECT DISTINCT CASOS.A
FROM CASOS
En Eventos:
-Al hacer Click: Sendkeys ("{F9}")

Para el comboB, en Datos:
- Origen del control: B
- Origen de fila: SELECT DISTINCT CASOS.B
FROM CASOS
WHERE CASOS.A=Formularios!CASOSF!comboA
En Eventos:
-Al hacer Click: Sendkeys ("{F9}")

Para el comboC, en Datos:
- Origen del control: C
- Origen de fila: SELECT DISTINCT CASOS.C
FROM CASOS
WHERE CASOS.A=Formularios!CASOSF!comboA AND
CASOS.B=Formularios!CASOSF!comboB
En Eventos:
-Al hacer Click: Sendkeys ("{F9}")

Lo que necesito es que el comboC, me muestre todos los valores posibles de C para las dos combinaciones siguientes:
- C si A=comboA y B=comboB
- C si A=comboA y B=null


Espero que con este detalle puedas ayudarme un poco más.

Gracias de antemano.
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 Neckkito

Consultas??

Publicado por Neckkito (1104 intervenciones) el 30/07/2012 13:20:55
Hola!
En el comboC, por ejemplo en el evento "Al recibir el enfoque", le generas el siguiente código (te lo pongo comentado para que sepas qué hace):
...
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
Private Sub ...
		'Declaramos las variables
	Dim vCA, vCB as variant
	Dim miRowSce as String
		'Cogemos los valores de los combos
	vCA = me.comboA.value
	vCB = me.comboB.value
		'Si los dos están en blanco salimos del proceso sin hacer nada
	If isnull(vCA) AND isnull(vCB) then Exit Sub
		'Si el comboA está en blanco también salimos del proceso
	If isnull(vCA) then Exit Sub
		'Miramos si hay valor o no en comboB
	If IsNull(vCB) Then
			'Si no hay valor definimos el RowSource sólo con el valor de A
		miRowSce="SELECT DISTINCT CASOS.C FROM CASOS WHERE CASOS.A=" & vCA
	Else
			'Si hay valor defino el RowSource considerando ambos combos
		miRowSce="SELECT DISTINCT CASOS.C FROM CASOS" _
			& " WHERE CASOS.A=" & vCA & " AND CASOS.B=" & vCB
	End If
		'Aplico el RowSource al combo
	me.comboC.RowSource=miRowSce
		'Refresco la información del combo
	me.comboC.Requery
End If

...
Doy por supuesto que tanto comboA como comboB, cuando no están vacíos, devuelven valores numéricos. Si devolvieran valores de tipo texto el código se debería modificar ligeramente.
A ver si esto es lo que necesitabas
Un saludo,
Neckkito
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

Consultas??

Publicado por Anuka (33 intervenciones) el 30/07/2012 14:00:04
Hola de nuevo,

Los campos A y B de la tabla CASOS son de tipo texto, por lo que comboA y comboB también.

Como cambiaría el código que me indicas?

Gracias por tu apoyo ;-)
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 Neckkito

Consultas??

Publicado por Neckkito (1104 intervenciones) el 30/07/2012 16:33:20
Hola!
Si son de tipo texto los valores de filtro debe ir entre comillas simples.
El código te quedaría así:
...
Private Sub ...
'Declaramos las variables
Dim vCA, vCB as variant
Dim miRowSce as String
'Cogemos los valores de los combos
vCA = me.comboA.value
vCB = me.comboB.value
'Si los dos están en blanco salimos del proceso sin hacer nada
If isnull(vCA) AND isnull(vCB) then Exit Sub
'Si el comboA está en blanco también salimos del proceso
If isnull(vCA) then Exit Sub
'Miramos si hay valor o no en comboB
If IsNull(vCB) Then
'Si no hay valor definimos el RowSource sólo con el valor de A
miRowSce="SELECT DISTINCT CASOS.C FROM CASOS WHERE CASOS.A='" & vCA & "'"
Else
'Si hay valor defino el RowSource considerando ambos combos
miRowSce="SELECT DISTINCT CASOS.C FROM CASOS" _
& " WHERE CASOS.A='" & vCA & "' AND CASOS.B='" & vCB & "'"
End If
'Aplico el RowSource al combo
me.comboC.RowSource=miRowSce
'Refresco la información del combo
me.comboC.Requery
End Sub
...
Si quieres echarle un vistazo al ejemplo que te he preparado te lo puedes bajar aquí: http://www.filebig.net/files/M88cCdsR46

Si bien el ejemplo no es exactamente igual al tuyo (lo he hecho a lo rápido y no he "depurado detalles" ), sí lo es el comportamiento del comboC y su código (que es el mismo que te he escrito). Así verás cómo funciona.

Ya me dirás qué tal te ha ido.

Saludos,
Neckkito
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