![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 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('Удаление прошло успешно'); } Как сделать что бы можно было удалить из двух таблиц сразу же. Спасибо заранее! |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
1. Если СУБД умеет каскадно удалять, то при создании внешнего ключа задать каскадное удаление
2. Иначе если триггера СУБД поддерживает, то в триггере на удаление из родительской таблицы удалять записи из дочерней 3. Иначе программно удалять сначала из дочерней таблицы, а потом из родительской
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 07.03.2009
Сообщений: 52
|
![]()
СУБД MS SQL 2005.
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Так бы и сразу. Там есть каскадное удаление (пункт 1)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 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 теперь как можно соединить это все. или направти на учебники или пособия. мозг кепит, а сроки идут. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 07.03.2009
Сообщений: 52
|
![]() |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Имя таблицы, и ChildTable. Id - имя поля
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 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; |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Вообще-то в дельфи ничего делать не нужно - при таком определении внешнего ключа в базе записи удалятся автоматически при удалении родительской записи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как удалить данные выбранные в 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 |