Pregunta

Ahora he visto esta pregunta en otro foro pero no tuvo una respuesta aceptable.

Supongamos que tengo dos tablas, la tabla Grupos y la tabla Elementos.Las tablas no tienen relaciones definidas.La tabla Elementos tiene un campo IdGroup que hace referencia al campo IdGroup (PK) de la tabla Grupos.

Utilizo la siguiente consulta a través de un conjunto de registros ADO para completar los valores de las tablas en una cuadrícula de datos:

SELECT Elements.*, Groups.GroupName
FROM Elements
INNER JOIN Groups ON Elements.IdGroup = Groups.IdGroup

Desde esa cuadrícula quiero presionar Eliminar para eliminar un Elemento.Aquí está mi problema.Cuando usé DAO, la función DAO Delete() eliminó solo el registro en el grupo Elementos.Este era el comportamiento esperado.

Cuando cambié a ADO, la función Eliminar() eliminó registros en ambas tablas, ¡el registro del elemento y el grupo al que pertenecía el elemento!

¿Hay alguna forma de reproducir el comportamiento de DAO en ADO sin tener que definir relaciones en las tablas?

Nota:Sé que existen alternativas (la ejecución de consultas DELETE podría hacer el trabajo).Simplemente muéstrame una manera de hacer esto en ADO o di que no se puede hacer.

¿Fue útil?

Solución

Vuelva a escribir su consulta a:

  • reemplace INNER JOIN con una cláusula WHERE que consista en EXISTS;
  • utilice una subconsulta en la cláusula SELECT para devolver el valor de Groups.GroupName.

Ejemplo:

SELECT Elements.*, 
       (
        SELECT Groups.GroupName
          FROM Groups 
         WHERE Elements.IdGroup = Groups.IdGroup
       )
  FROM Elements
 WHERE EXISTS (
               SELECT * 
                 FROM Groups 
                WHERE Elements.IdGroup = Groups.IdGroup
              );

Probé esto usando SQL Server 2008 con un conjunto de registros ADO establecido como la propiedad DataSource de un control de cuadrícula de datos OLEDB de Microsoft (MSDATGRD.OCX) y luego eliminé la fila a través de la red (supongo que estás haciendo algo similar) y la fila es de hecho eliminado solo de los elementos de la tabla (es decir,la fila en Grupos permanece sin eliminar).

Tenga en cuenta que la consulta revisada puede tener un impacto negativo en el rendimiento al recuperar filas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top