Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2014, 14:37   #1
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию удалить данные со связями.

Добрый день.

Ситуация следящая.
Есть таблица Таб1 где данные. И есть Таб2_обзвон. Они между собой связаны ключем.

Кому не понятно. Таб1.ID -> Таб2.ID

при удалении надо удалить и из таб1 и из таб2 только не все файлы а именно связанные и по запросу.

Я сделал что с одной таблицы без связи он удаляет по запросу.
{ help1 := '1';
FMain.ADO.Close;
FMain.ADO.SQL.Clear;
FMain.ADO.SQL.Add('Delete from arhiv');
FMain.ADO.SQL.Add('where arhiv = '+ '''' + help1 + '''');
FMain.ADO.ExecSQL;
ShowMessage('Удаление прошло успешно');
}

Как сделать что бы можно было удалить из двух таблиц сразу же.
Спасибо заранее!
Dj_DeVaIs вне форума Ответить с цитированием
Старый 14.02.2014, 14:42   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Если СУБД умеет каскадно удалять, то при создании внешнего ключа задать каскадное удаление
2. Иначе если триггера СУБД поддерживает, то в триггере на удаление из родительской таблицы удалять записи из дочерней
3. Иначе программно удалять сначала из дочерней таблицы, а потом из родительской
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2014, 15:19   #3
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию

СУБД MS SQL 2005.
Dj_DeVaIs вне форума Ответить с цитированием
Старый 14.02.2014, 15:33   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Dj_DeVaIs Посмотреть сообщение
СУБД MS SQL 2005.
Так бы и сразу. Там есть каскадное удаление (пункт 1)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2014, 15:50   #5
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию

нашел вот что.
create procedure myTable_Delete
@id int -- идентификатор удаляемой записи
as
begin tran
begin try
delete from myTable2 where id=@id
delete from myTable where id=@id
commit
end try
begin catch
rollback
-- RAISERROR (...)-- http://technet.microsoft.com/ru-ru/l.../ms178592.aspx
end catch
GO

теперь как можно соединить это все.
или направти на учебники или пособия.
мозг кепит, а сроки идут.
Dj_DeVaIs вне форума Ответить с цитированием
Старый 14.02.2014, 16:11   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
ALTER TABLE ChildTable
  ADD FOREIGN KEY (Id)
    REFERENCES ParentTable (Id) ON DELETE CASCADE
И не надо процедур
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2014, 16:58   #7
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
ALTER TABLE ChildTable
  ADD FOREIGN KEY (Id)
    REFERENCES ParentTable (Id) ON DELETE CASCADE
И не надо процедур

ParentTable - это что?
Dj_DeVaIs вне форума Ответить с цитированием
Старый 14.02.2014, 17:00   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Имя таблицы, и ChildTable. Id - имя поля
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2014, 17:50   #9
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию

Безымянный.jpg

вот что пишет delphi.

вызываю процедуру вот так
var id_komp:string;
begin
id_komp:=QuotedSTR(DBComboBox1.Text );
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('exec arxivdelet '+id_komp);
ExecSQL;
end;
Dj_DeVaIs вне форума Ответить с цитированием
Старый 14.02.2014, 18:09   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вообще-то в дельфи ничего делать не нужно - при таком определении внешнего ключа в базе записи удалятся автоматически при удалении родительской записи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить данные выбранные в DbGrid'е из БД BioNoob БД в Delphi 3 18.06.2012 11:45
импорт талиц со связями Rustr1957 Microsoft Office Access 4 01.03.2011 04:24
Удалить все данные из StringGrid-a postaveche Компоненты Delphi 7 14.01.2011 13:20
Удалить данные из TMemoryStream TwiX Общие вопросы Delphi 3 17.06.2010 14:05
как удалить данные asd178 БД в Delphi 1 18.05.2009 18:49