Informacion de columna clave insuficiente para realizar la operacion update o refresh
Hola amigos, este es el error que me salta al hacer una actualización de una tupla y sus tuplas relacionadas en otras tablas en mis BBDD.
Informacion de columna clave insuficiente para realizar la operacion update o refresh He leido que puede ser producido por no tener bien realizada la relación entre tablas, pero en mi caso si lo tengo bien relacionado, ya que la tabla principal goza de C.Principal y la tabla esclava con su clave ajena y principal, y es como se relacionan mediante el INNER JOIN. Pongo el ejemplo:
No he encontrado por el momento el bug de la cuestión, pero si alguien mientras lo busco me puede aportar luz, se lo agradecería. Trabajo con componentes ADO y SQL Server. Gracias :( |
¿Estás intentando hacer un UPDATE sobre el resultado de esa consulta?
Si es así, el problema es que esa consulta tiene varias tablas relacionadas y el Gestor no sabe qué debe actualizar... |
Necesitas un primary key, o alguna columna que identifique de forma unica el registro en cada tabla. Ese error se produce cuando hay dos filas identicas, y el sql server no sabe, con el updatecommand, cual fila actualizar.
Tambien tiene que ver cuando haces joins entre tablas, y el resultado no puede ser actualizable. |
Gracias a los dos. No he contestado antes porque estaba de días libres en la oficina.
En el primer caso "Neftalí" : Cita:
Y no es expresamente un UPDATE lo que intento si no un UpdateBatch(), aunque internamente supongo que será lo mismo. En el segundo caso "hector" Después de comprobar como veo en la contestación de Neftalí, que tengo las claves de todas la tablas relacionadas, me quedo por saber : Cita:
Yo no les he incluido ninguna restricción, :( Sigo investigando y buscando la solución. |
Buenas.
Explico mi experiencia que tiene algo que ver con esto. En SQLServer 7.0, para que te deje actualizar una tabla desde una vista (consulta pura y dura), dicha vista tiene que ser limpita sobre la tabla .Sin joins ni unions ni leches. Que yo sepa el bayarri de SQLServer no deja actualizar tablas desde vistas con más de una tabla. Y me da ese error precisamente. |
En referencia a Nelet:
Aleshores, ¿que fem? ;) ¿Entonces que hacemos? Precisamente el error me aparece desde que incluí los campos que deseaba obtener de la segunda tabla en la misma consulta, es decir cuando cambié :
Por esto otro que incluye campos de la tabla cliente en el SELECT
y el motivo de esta inclusión es por desear ordenar la consulta por campos de la tabla relacionada "Clientes", ya que si no los incluyo en el SELECT, la actualización funciona o funcionaba bien. No obstante sigo investigando hasta que no dé con la solución. |
Cita:
Si estás haciendo update sobre campos de dos tablas, genera los dos UPDATES por separado. No se me ocurre otra cosa... |
Pues si es algo que se me había ocurrido, pero lo veía como "una escapada por el camino del medio", pero seré en este caso "maquiabélico".
Un curro, pq tengo un montón de consultas parecidas y además con varias tablas relacionadas. Aplicaré la madre de todas las ciencias...... La Paciencia... Gracias. :o |
Cita:
Estoy de acuerdo con Neftali. Un UPDATE para cada tabla. Primero la maestra y después un UPDATE masivo en la/las hija/as. |
... en fin Pilarín....., después de mucho tiempo desde el último Post y mucho curro al márgen de la programación de la aplicación, he de decir que en realidad hoy he acabado esta parte y he decir que:
He necesitado en efecto crear un UPDATE para cada una de las tablas que estaban en la relación de la consulta. :rolleyes: |
Hola, me pasa algo parecido....
Un abraso al Foro.
Necesito que miren este censillo código:
Evidentemente con esto quiero cambiar algunos valores del registro con chapa = edit1.text pero me surge el error ese del que hablamos... Cogí, y sustituí el Refresh por el FindNext, con el propósito de que cuando se moviera en cursor dentro de la tabla la fila que modifiqué se actualizara....y me funcionó. Pero no es esa la solución que busco porque en otras partes de mi código ... no me cuadra. como dice Cabanyaler, si alguien mientras lo busco me puede aportar luz, se lo agradecería.Trabajo con componentes ADO y SQL Server. |
Bueno, no sé si os valdrá de mucho pero yo lo he resuelto del siguiente modo:
En el Administrador corporativo de SQL2000, puse 'Establecer clave principal' en la clave unica (en mi caso ID_ALARMA_MEDIO' de la tabla relacionada y funcionó. El caso es que desde una ADOQuery que hacia una consulta con INNER JOIN de tres tablas no puse la clave princial de la tabla varios-a-varios en el adm. corporativo y me daba el fallo. Una vez puesto el ADOQuery funciona correctamente. Saludos. |
La franja horaria es GMT +2. Ahora son las 16:35:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi