Access - Poner en Nulo una lista de valores múltiples cuando un campo dependiente de selección (SI-NO) sea NO

   
Vista:

Poner en Nulo una lista de valores múltiples cuando un campo dependiente de selección (SI-NO) sea NO

Publicado por Danny (24 intervenciones) el 06/12/2013 16:32:57
Explico mi problema

Tengo un campo en donde por medio de un SI - NO despliego en otro campo un cuadro combinado con valores múltiples, esto es, si yo en el campo Diabetes: SI-NO selecciono SI, en el siguiente campo que es un cuadro combinado que permite valores múltiples selecciono quienes padecen Diabetes.

Ejemplo:

Diabetes: SI Selección:_____________
* PADRE
* MADRE
* HERMANOS
* OTROS

Esto me da como resultado:

Diabetes: SI Selección: PADRE, MADRE, HERMANOS


Ahora bien, si por error le pongo NO, los valores de sujeto deseo que se eliminen (sean nulos).
He intentado con un If... en donde sujeto=null si es NO envía el siguiente error:

Se ha producido el siguiente error -2147352567(800200009) en tiempo de ejecución. No se puede realizar esta operación.


If Me.ahf_cancer = "NO" Then
Me.ahf_cancer_seleccion.Enabled = False
Me.ahf_cancer_seleccion=Null <---- El depurador me manda aquí
Else
Me.ahf_cancer_seleccion.Enabled = True
End If

Alguna idea de como solucionarlo?

Gracias anticipadas
Saludos
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

Poner en Nulo una lista de valores múltiples cuando un campo dependiente de selección (SI-NO) sea NO

Publicado por Neckkito (1104 intervenciones) el 09/12/2013 21:08:58
Hola!

Como diría el Quijote... "con la Iglesia hemos topado, amigo Sancho".

Los campos multivalor, si no tienes que manipularlos, están bien (a mí no me gustan personalmente). Desde el momento que tienes que manipularlos esa hipotética belleza se convierte en una especie de manicomio

El problema de los campos multivalor es que no funcionan como los simples combos, sino que vienen a guardar una colección de valores. Si ya es complicado "leerlos" a través de VBA resulta imposible manipularlos a través de código, dado que para ello tienes que tratarlos como un recordset y cuando escribes el método recorset.edit sobre un campo multivalor es cuando a Access le comienza a salir urticaria.

En definitiva, que la manipulación (que no la lectura) de los valores de un campo multivalor yo diría que es misión imposible.

Hay una manera de hacerlo utilizando una SQL. El problema es que al tener el registro en pantalla en el formulario estás bloqueando ese registro para la correcta ejecución de la SQL, con lo cual no basta esa ejecución de la SQL sino que debes hacer un apaño (para mí, una chapucilla) para conseguir que te funcione. La SQL es una consulta de eliminación, por lo que además necesitas tener un identificador del registro para eliminar sólo los valores del campo multivalor de ese registro y no correr el riesgo de eliminar todos los valores de todos los campos multivalor de todos los registros... una joya, vamos.

Te pongo un ejemplo:

Imaginemos una tabla, TDatos, con un campo [Id] y con un campo [Seleccion], este último multivalor.

Estamos en el formulario FDatos rellenando los valores del registro que sea y queremos borrar los elementos que hemos marcado en el campo multivalor.

El código que necesitamos para hacer eso y que no se "espiche" la cosa es el siguiente:

...
Private Sub...
'Declaro las variables
Dim miSql As String
Dim miId As Long
'Cojo el valor del identificador
miId = Me.Id.Value
'Cierro el formulario
DoCmd.Close acForm, Me.Name
'Me creo la SQL de eliminacion filtrándola por el registro en el que estoy trabajando
miSql = "DELETE TDatos.Seleccion.Value FROM TDatos" _
& " WHERE TDatos.Id=" & miId
'Ejecuto la consulta
DoCmd.SetWarnings False
DoCmd.RunSQL (miSql)
DoCmd.SetWarnings True
'Vuelvo a abrir el formulario
DoCmd.OpenForm "FDatos"
'Me muevo por los registros hasta que encuentro en el que estaba
Do Until Forms!FDatos.Id.Value = miId
DoCmd.RunCommand acCmdRecordsGoToNext
Loop
End Sub
...

Fíjate que, en la SQL, no cojo el campo [Seleccion] (es decir, no hago SELECT TDatos.Seleccion...), sino que como se trata de un campo multivalor debo indicar específicamente que quiero los valores que hay dentro de [Seleccion], y por ello escribo "SELECT TDatos.Seleccion.Value..."

Como ves, trabajar a nivel de código con campos multivalor es, y perdón por la expresión, una auténtica porquería (siempre desde mi punto de vista, claro).

Para que quizá lo veas más claro puedes echar un vistazo a este ejemplo que he preparado: http://www.mediafire.com/download/z3359nrrj8y1fj9/Multivalor.zip

Por si puede ayudarte también puedes mirar este artículo de Mocosoft: http://bit.ly/19wUWp5

Saludos,

Neckkito
http://neckkito.siliconproject.com.ar
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

Poner en Nulo una lista de valores múltiples cuando un campo dependiente de selección (SI-NO) sea NO

Publicado por Danny (24 intervenciones) el 27/01/2014 05:34:46
Muchisimas gracias Neckk

Me había olvidado agradecerte

Saludos
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