Access - Problemas con el recordset y una lista de valores

 
Vista:

Problemas con el recordset y una lista de valores

Publicado por Alex (7 intervenciones) el 15/07/2015 11:17:18
Buenos días.

Estoy empezando con access y me sirve de mucha ayuda vuestro foro, estoy aprendiendo muchísimo. Tengo una duda que no consigo resolver y tampoco encuentro el mismo problema que el mío.

Os explico como tengo la base de datos por si hay algun problema ya de relaciones.

Tengo dos tablas:
- Una tabla llamada "NOVEDADES" donde se escriben una serie de anotaciones.
- Una tabla de nombre "PERSONAS" donde hay personas que se le puede asignar una novedad de la tabla novedades. A una novedad se le pueden asignar varias personas.

En la tabla NOVEDADES tengo el campo NOMBREPERSONA que es de tipo texto, donde permito varios valores y el origen de la fila es una consulta de la tabla PERSONAS con el nombre de todas las personas.

Tengo un formulario para editar los registros. Para buscar el registro a editar tengo un campo donde pongo el ID de la novedad y un recordset que me va poniendo los datos en varios campos. Al llegar a las personas asignadas a esa novedad, me da el error "NO SE PUEDE ASIGNAR UN VALOR A ESE OBJETO". He probado cambiando a cuadro de texto, combo, lista de valores....y no soy capaz.
Os pego el codigo a ver si alguien ve algo.

Dim RS as DAO.Recordset
Dim DB as DAO.Database
Dim sql As String

sql = "SELECT * FROM NOVEDADES " & " WHERE IDNOVEDAD = " & txt_buscar & ""

Set DB = CurrentDb
Set RS = Db.OpenRecorset (sql, dbOpenDynaset)

If RS.RecordCount = 0 then
MsgBox ("No hay registros para ese ID")
Else
txt_IDnovedad = RS!IDNOVEDAD
txt_anotacion = RS!ANOTACION
txt_fecha = RS!FECHA
txt_nombrepersona = RS!NOMBREPERSONA
end If


Todas los datos me los introduce en su cuadro de texto, pero al llegar a RS!NOMBREPERSONA me da error.

En la ventana de inmediato voy probando los valores que hay en cada RS! y todos me va diciendo el valor correcto, menos en RS!NOMBREPERSONA donde me dice "SE HA PRODUCIDO EL ERROR '13' EN TIEMPO DE EJECUCIÓN: NO COINCIDEN LOS TIPOS"

A ver si alguien puede ayudarme!!
Muchas 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
sin imagen de perfil

Problemas con el recordset y una lista de valores

Publicado por Enrique Heliodoro (1664 intervenciones) el 15/07/2015 11:51:33
Suele suceder cuando el valor en el origen de datos es un NULL, porque los valores NULL se pueden transmitir (como la peste) pero no se pueden asignar a no ser que el objeto destino admita esa posibilidad (y son muy pocos los que lo permiten).

Verifica que en la tabla exista un dato correcto y si no lo hay (un NULL por falta de asignación, aunque su valor real es un Empty: sin asignar) utiliza para ese y los demás posibles casos, la función NZ, algo como:

txt_nombrepersona = RS!NOMBREPERSONA ==> txt_nombrepersona = Nz(RS!NOMBREPERSONA,"")

¿Realmente crees que saltándote la forma natural que tiene Access de tratar los datos, estas logrando algún beneficio practico?, aprecio en general que se utiliza Access como un simple 'cajón de datos', para ese tipo de uso, personalmente utilizaría los que por diseño son 'cajones para datos' como SQL Server o MySQL ... y los que no cito por ser mas específicos.
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

Problemas con el recordset y una lista de valores

Publicado por Alex (7 intervenciones) el 15/07/2015 15:51:17
He probado la función Nz y me sigue dando error. El campo persona de la tabla novedades es texto y permite varios valores. He mirado la tabla y hay valores vacíos y valores en los que hay nombres de personas.
No acabo de encontrar el motivo, porque los demás valores si que me funcionan.

La verdad que he usado access porque es el único que conozco, pero sobretodo porque en los ordenadores donde irá el programa solo tienen el access, y no puedo instalar nada nuevo porque está capado.

Muchas gracias Enrique por intentar ayudar.
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

Problemas con el recordset y una lista de valores

Publicado por Alex (7 intervenciones) el 15/07/2015 16:37:42
He probado la función Nz y me sigue dando error. El campo persona de la tabla novedades es texto y permite varios valores. He mirado la tabla y hay valores vacíos y valores en los que hay nombres de personas.
No acabo de encontrar el motivo, porque los demás valores si que me funcionan.

La verdad que he usado access porque es el único que conozco, pero sobretodo porque en los ordenadores donde irá el programa solo tienen el access, y no puedo instalar nada nuevo porque está capado.

Muchas gracias Enrique por intentar ayudar.
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 douglas

Problemas con el recordset y una lista de valores

Publicado por douglas (280 intervenciones) el 15/07/2015 16:54:42
Alex es probable

1-Que el tamaño del campo no sea igual en la tabla y en el campo del formulario
2-Al poner las variables como RS!NOMBREPERSONA pareciera que es un numero.
3-Puedes usar variables como

Dim nombretxt as string
luego
nombretxt=""
nombretxt = RS!NOMBREPERSONA


txt_nombrepersona=nombretxt

prueba encerrándolo

[txt_nombrepersona]=RS!NOMBREPERSONA
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
sin imagen de perfil

Problemas con el recordset y una lista de valores

Publicado por Enrique Heliodoro (1664 intervenciones) el 15/07/2015 18:12:33
El tamaño de un campo de texto en una tabla, se puede limitar al numero de caracteres que deseemos, pero el cuadro de texto en un formulario .... requeriría una validación a nivel de VBA (y solo cuando se interactúa con el objeto) que si el que tiene el problema lo supiese controlar, creo que no expondría esa duda (porque no la tendría), asi que de entrada (por mi parte) descarto que el campo de texto del formulario sea la causa.

Una forma de conocer el valor ¿real? que hay en ese campo del recordset, es o seria el visualizarlo en la ventana de inmediato o en un MsgBox, sin descartar que el destino (txt_nombrepersona) sea realmente un cuadro de texto y no otro tipo de objeto (como una etiqueta, cuadro de lista ....)

Utilizándolo así (a Access) creo que no demuestras mucho dominio sobre el (o ese es mi punto de vista), pues lo mas 'natural' seria crear el formulario basado en la tabla y filtrarlo por el ID del registro de nuestro interés, así solo mostraría ese registro, permitiría editarlo a voluntad y 'ese problema en particular' no se hubiera dado.
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 douglas

Problemas con el recordset y una lista de valores

Publicado por douglas (280 intervenciones) el 15/07/2015 20:02:17
Al ser SQL le afecta y mucho Enrique
de hecho para cuando usan bases con Mysql o sql se debe de cambiar varios tipos dentro de la base de datos, para que a la hora de enlazar no den nulos.
El tamaño del campo también le afecta a SQL ya que sacas un texto de 60 y lo quieres copiar en un campo que parece numero.
todos esos pequeños detalles en sql afectan y he visto muchos casos de esos.
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

Problemas con el recordset y una lista de valores

Publicado por Alex (7 intervenciones) el 15/07/2015 20:05:53
Muchas gracias. Mañana pruebo y os digo.

La verdad es que tengo poca idea, hace muchísimos años que deje la programación y no me acuerdo de casi nada!
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
sin imagen de perfil

Problemas con el recordset y una lista de valores

Publicado por Enrique Heliodoro (1664 intervenciones) el 15/07/2015 20:31:42
Veras Douglas, no entrare en las divergencias entre tipos de datos, pero aquí en concreto no parece ser el caso y para ello me baso en que el cuadro de texto no tiene un origen de datos (al menos conocido), se le asigna directamente para simular una carga clásica para después manipularlo y (supongo) que mas tarde actualizara valores en el origen.

En base a ello el cuadro de texto debería 'admitir cualquier cosa' (incluso el contenido de un campo Memo) con la excepción de los valores Null (porque null no es un valor mesurable, a lo sumo un estado y por ello no hay representación).

Otra cosa es que el dato lo muestre en condiciones (por ejemplo, si se le asigna un formato de fecha y se le introduce un texto libre), al cual simplemente no se le dará formato, porque como simple cuadro de texto manipulado de forma externa, admitirá lo que corresponda y solo aplicaría formato cuando el objeto tome el foco y comiencen a ejecutarse sus eventos.

De cualquier forma solo en la aplicación real podrá ver el problema (también real) y analizar las causas que dan lugar a el.
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 douglas

Problemas con el recordset y una lista de valores

Publicado por douglas (280 intervenciones) el 15/07/2015 21:09:35
Si eso si Enrique no te había entendido
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

Problemas con el recordset y una lista de valores

Publicado por Alex (7 intervenciones) el 16/07/2015 07:55:58
Buenos días.

He estado probando lo que puso Douglas de generar un String y asignar el valor y me sigue dando error. He borrado toda la tabla NOVEDADES y he empezado a introducir registros y vuelvo a provar y el mismo error.

He modificado el campo NOMBREPERSONA y he puesto que solo permita un valor, y entonces es cuando funciona perfectamente. Es decir, el problema lo tengo cuando pongo que ese campo de texto le pongo que pueda tener varios valores.

Así, que intentaré no perder más tiempo con esto si veo que nadie sabe la solución e intentaré hacer lo que comentó Enrique de cargar los datos a la entrada del formulario y filtrar con algún combo.

Muchas gracias por la ayuda!!
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 douglas

Problemas con el recordset y una lista de valores

Publicado por douglas (280 intervenciones) el 16/07/2015 22:08:42
Correcto Alex si ves la conversación los dos concluimos que esa era la mejor solución

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