6

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?

Frank Luke
  • 1,342
  • 3
  • 18
  • 33

2 Answers2

12

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.

RRUZ
  • 134,889
  • 20
  • 356
  • 483
  • 1
    If you need to get really fancy with your updates, you can use the TUpdateSQL component and assign it to the UpdateObject of your query component. – Marcus Adams Nov 02 '11 at 16:01
6

You need to set TADODataset's "Unique Table" property after opening your dataset.

ADODataset.Properties['Unique Table'].Value := 'GAMES';
Linas
  • 5,485
  • 1
  • 25
  • 35