2011-11-02 13 views
5

Ho un'applicazione Delphi dove visualizzare un elenco di giochi che sono stati riprodotti da una query come questa:ADODataSet eliminazione dalla tabella unita

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 

quando clicco sul pulsante Elimina nella DBNavigator, il record unito dalla tabella game_types viene anche cancellato. Questo è un problema perché molti altri giochi possono essere dello stesso tipo.

Cosa devo fare per far sì che solo il gioco venga eliminato ma non il tipo di gioco?

risposta

9

è necessario utilizzare la proprietà dinamica Unique Table

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

Dal MSDN ADO Documentation

Se la proprietà dinamica unico tavola è apparecchiata, e il Recordset è il risultato dell'esecuzione di un Operazione di JOIN su più tabelle, quindi il metodo di eliminazione eliminerà solo le righe dalla tabella denominata in Unique Proprietà tabella.

+1

Se è necessario essere veramente fantasiosi con gli aggiornamenti, è possibile utilizzare il componente TUpdateSQL e assegnarlo a UpdateObject del componente di query. –

6

È necessario impostare la proprietà "Tabella univoca" di TADODataset dopo aver aperto il set di dati.

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