sqldelphidelphi-2009adotadodataset

ADODataSet deleting from joined table


I have a Delphi app where I display a list of games that have been played from a query like this:

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

When I click the delete button in the DBNavigator, the joined record from the game_types table is also deleted. That's a problem because many other games can be of the same type.

What do I need to do to make it so that only the game is deleted but not the game type?


Solution

  • You need to use the Unique Table dynamic property

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

    From the MSDN ADO Documentation

    If the Unique Table dynamic property is set, and the Recordset is the result of executing a JOIN operation on multiple tables, then the Delete method will only delete rows from the table named in the Unique Table property.