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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 18:16   #1
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
По умолчанию Каскадное удаление данных

Всем добрый вечер!
Меня интерисует такое вопрос, есть ли в Delphi встроенные функции, которые отслеживают следущее, есди допустим существует 2 связанные таблицы (причем связь обязательная) то при удалении записи из одной из них автоматически удаляеться запись из другой. К примеру как это сделано в Ms Access , если в нем выбрать пункты каскадное удаление и каскадное обновление записей пи создании связей. Надеюсь достаточно ясно изложил суть вопроса.
С уважением Rockedit!
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума Ответить с цитированием
Старый 11.12.2009, 18:22   #2
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

а это не автоматически делается? Просто про Access точно не знаю. В firebird, postgres точно автоматом делает. Ну у вас с таблицами допустим связаны ADOQUery, тогда просто при нажатии кнопки удалить котороая находится на форме где данные родительской таблицы написать нечто такое
Код:
ADOQuery1.close;
ADOQuery2.close;
ADOQuery1.open;
ADOQuery2.open;
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 11.12.2009, 18:32   #3
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
По умолчанию

я работаю через ADOTable, но это практически дела не меняет. вообшем если у строки из главное таблицы имееться хоть одна связь с подчиненой то во время попытки удаления будет возникать ошибка, я решил этот вопрос простым SQL запросом, просто думал, может получится сократить код и просто Delphi указать, что вот из этой таблицы удали запись и проверь, сам мол есть ли у нее связи с другими. просто если таблиц допустмм связаных 10 то это конечно муторно самому отслеживать все связи
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума Ответить с цитированием
Старый 11.12.2009, 18:38   #4
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

А что в Access нет on delete cascade?????
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 11.12.2009, 18:50   #5
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
По умолчанию

Цитата:
А что в Access нет on delete cascade?????
Чтитаем внимательно пост. вопрос не по Access, ну а если на то пошло то я как раз из Access привел пример как это реализовать.
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума Ответить с цитированием
Старый 25.12.2009, 10:33   #6
GX_h10
Пользователь
 
Регистрация: 20.04.2009
Сообщений: 28
По умолчанию

Я бы сделал так:
Код:
private
  function askYesOrNo(ask:String):Boolean;

implementation  
  
function TForm1.askYesOrNo(ask: String): Boolean;
begin
  if MessageDlg(ask, mtConfirmation, mbOKCancel, 0) <> idCancel then
    Result := True
  else
    Result := False;
end;

//Реализация в процедуре(например на батончике "Удалить"):
procedure TForm1.Button1Click(Sender: TObject);
begin
  if askYesOrNo('Вы действительно хотите удалить запись') then
  begin
    if DBGrid1.Focused then
       ADOQuery1.Delete;
    if DBGrid2.Focused then
       ADOQuery2.Delete;
  end;
end;
GX_h10 вне форума Ответить с цитированием
Старый 26.12.2009, 20:19   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Access это сервер (СУБД) и клиент в одном флаконе.
Delphi обычно используется для написания клиентских частей к различным СУБД (FireBird, MS SQL, Access, ...). Каскадное удаление обычно организуется на стороне сервера во время задания связей и правила задания зависят от выбранной СУБД.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление данных из файла Walter Помощь студентам 3 11.06.2009 10:02
Каскадное удаление записей Liones БД в Delphi 7 14.05.2009 08:04
Каскадное удаление и модификация таблиц Абдуллаев Рустам БД в Delphi 6 01.05.2009 20:47
каскадное удаление Skolot Microsoft Office Access 0 20.04.2009 11:12
Каскадное удаление BustA SQL, базы данных 1 16.01.2008 10:31