2011-11-02 24 views
5

Tôi có một ứng dụng Delphi nơi tôi hiển thị một danh sách các trò chơi đã được chơi từ một truy vấn như thế này:ADODataSet xóa từ gia nhập bảng

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 

Khi tôi bấm nút delete trong DBNavigator, hồ sơ tham gia từ bảng game_types cũng bị xóa. Đó là một vấn đề bởi vì nhiều trò chơi khác có thể cùng loại.

Tôi cần làm gì để làm cho trò chơi bị xóa nhưng không phải là loại trò chơi?

Trả lời

9

Bạn cần phải sử dụng Unique Table sở hữu động

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

Từ MSDN ADO Documentation

Nếu Unique Bảng tính năng động được thiết lập, và Recordset là kết quả của thực hiện một THAM GIA hoạt động trên nhiều bảng, sau đó phương thức Xóa sẽ chỉ xóa các hàng khỏi bảng có tên trong Số duy nhất Thuộc tính bảng.

+1

Nếu bạn cần thực sự ưa thích với bản cập nhật của mình, bạn có thể sử dụng thành phần TUpdateSQL và gán nó cho UpdateObject của thành phần truy vấn của bạn. –

6

Bạn cần đặt thuộc tính "Bảng duy nhất" của TADODataset sau khi mở tập dữ liệu.

ADODataset.Properties['Unique Table'].Value := 'GAMES'; 
Các vấn đề liên quan