2011-11-02 7 views
5

Tengo una aplicación Delphi en el que mostrar una lista de los juegos que se han jugado desde una consulta como esta:ADODataSet borrar de tabla combinada

select g.*, gt.id, gt.descr 
from GAMES g 
inner join game_types gt on gt.id = g.game_type 
order by game_date DESC 

Al hacer clic en el botón de borrar en el DBNavigator, el registro unido de la tabla game_types también se elimina. Eso es un problema porque muchos otros juegos pueden ser del mismo tipo.

¿Qué debo hacer para que solo se elimine el juego pero no el tipo de juego?

Respuesta

9

Es necesario utilizar el Unique Table propiedad dinámica

ADOQuery1.Properties['Unique Table'].Value := 'GAMES'; 

Desde el MSDN ADO Documentation

Si la propiedad dinámica Tabla único se establece, y el conjunto de registros es el resultado de la ejecución de una La operación JOIN en varias tablas, entonces el método Delete solo eliminará las filas de la tabla nombrada en el Unique propiedad de tabla.

+1

Si necesita ser realmente elegante con sus actualizaciones, puede usar el componente TUpdateSQL y asignarlo al UpdateObject de su componente de consulta. –

6

Debe configurar la propiedad "Tabla única" de TADODataset después de abrir el conjunto de datos.

ADODataset.Properties['Unique Table'].Value := 'GAMES'; 
Cuestiones relacionadas