No funciona INSERT INTO si un campo es cuadro combinado

Tengo 2 tablas que son idénticas en su estructura, y en el formulario de una de ellas, mediante un botón de acción paso todos los campos de un determinado registro, a la tabla destino, y con un DELETE borro los campos de la tabla origen. El problema viene que no se por que, pero descubro que no me funciona el código, al haber en la tabla origen un campo que es un cuadro combinado con posibilidad de múltiples valores. Se pueden elegir al desplegar, varios valores y los inserta separados por comas en el cuadro combinado.

Si lo dejo como texbox, o sin selección múltiple (que se elija un valor solo de la lista), el código funciona. El comando copia los campos de la tabla origen y los pega en la tabla destino, después borrando los campos de origen. Si lo pongo como cuadro combinado, le pongo en origen de la fila la consulta de donde saca los valores, y le pongo que permita varios valores, no funciona.

CurrentDb.Execute "INSERT INTO Historial_Cultivos SELECT * FROM Cultivos where DNI='" & Me.DNI & "'"
CurrentDb.Execute "DELETE * FROM Cultivos WHERE DNI = '" & Me.DNI & "'"

1 Respuesta

Respuesta

Es razonable que no te funcione... Para empezar, en un campo combinado, podrías elegir varios valores, por lo que para decidir qué valor es el que vas a usar en la consulta, tienes que tratar con la propiedad "ItemsSelected".

Así pues, debería ser algo como esto:

CurrentDB.Execute "DELETE * FROM Cultivos WHERE DNI = ' " & Me.DNI.ItemsSelected & " ' "

En este caso, elegiría siempre el primer item seleccionado. Pero si la lista de seleccionados fuesen varios, deberías usar la orden FOR EACH item IN ItemsSelected

hola gomsky, es que la parte de DELETE FROM funciona, porque borra bien si no le agrego antes el INSERT INTO. Donde se traba la ejecucion es en el INSERT INTO. 

Es exactamente lo mismo... debes reemplazar el nombre del Campo DNI por su correspondiente Me. DNI. ItemsSelected

Si esto no funcionase, es porque detecta varios Items, entonces tienes que pasarlo a un campo tipo Texto antes de hacer la cláusula INSERT INTO.

Algo así como esto:

 For each Item in ItemsSelected
        DNI2=Me.DNI.ItemsSelected 
       CurrentdDB.Execute "INSERT INTO Historial_Cultivos" Select * FROM Cultivos Where DNI= ' " & DNI2 & " ' "

    CurrentDB.Execute "DELETE * FROM Cultivos WHERE DNI = ' " & DNI2 & " ' "
Next

Esto lo que haría sería ejecutar el INSERT INTO y el DELETE FROM tantas veces como DNIs tengas seleccionados en el cuadro combinado....

Espero que esto te sirva...

Saludos

CurrentDb.Execute "INSERT INTO Historial_Cultivos SELECT * FROM Cultivos where DNI='" & Me.DNI & "'"

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas