Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление из нескольких таблиц [D7]


Шакал ©   (2007-05-16 14:19:00) 

Уважаемые мастера, помогите решить следующий вопрос:
есть таблица (БД access) в которой есть поле ID, и есть еще две таблицы с полями "Выдано" в которых содержится этот ID, как при удалении из основной таблицы, сделать, что бы из двух других удалялись все записи с данным ID...

заранее спасибо!


Sergey13   (2007-05-17 08:55:00) [1]

> [9] Шакал ©   (16.05.07 17:13)
> и все работает

У тебя ошибка в БД. Если так работает, значит между таблицами НЕТ СВЯЗИ в виде внешних ключей. В результате, скорее всего, в дальнейшем ты получишь (уж поверь мне) бесхозные записи в specod и specsr.


Шакал   (2007-05-16 17:13:00) [2]

Во как я написал...сам от себя не ожидал 8-)..и все работает

procedure Tglav.delClick(Sender: TObject);
var i : string;
begin
if MessageDlg('Вы действительно хотите удалить запись?', mtWarning,
   [mbYes, mbNo],0)=mrYes then
   begin
if not dat.ADOQ.IsEmpty then
i:=dat.ADOQ.FieldByName('id').Value;
dat.ADOQ.Delete;
dat.ADOQ.Refresh;
dat.ADOQodeja.Close;
dat.ADOQodeja.SQL.Clear;
dat.ADOQodeja.SQL.Add('delete * from specod');
dat.ADOQodeja.SQL.Add('where Выдано= :dat');
dat.ADOQodeja.Parameters.ParamByName('dat').Value:=i;
dat.ADOQodeja.ExecSQL;
dat.ADOsr.Close;
dat.ADOsr.SQL.Clear;
dat.ADOsr.sql.Add('delete * from specsr');
dat.ADOsr.SQL.Add('where Выдано= :dat');
dat.ADOsr.Parameters.ParamByName('dat').Value:=i;
dat.ADOsr.ExecSQL;

end;
end;


Sergey13   (2007-05-16 16:52:00) [3]

> [7] Шакал ©   (16.05.07 16:12)

> в генах? :)

Похоже. 8-)

Как то так (делфы под рукой нет)

procedure Tglav.delClick(Sender: TObject);
begin
if MessageDlg('Вы действительно хотите удалить запись?', mtWarning,
  [mbYes, mbNo],0)=mrYes then
begin
 dat.ADOQodeja.SQL.Clear;
 dat.ADOQodeja.SQL.Add('delete * from specod');
 dat.ADOQodeja.SQL.Add('where Выдано=:dat');
 dat.ADOQ.First;
 if not dat.ADOQ.IsEmpty then
  begin
   i:=dat.ADOQ.FieldByName('id').Value;
   dat.ADOQodeja.Parameters[0]:=dat.ADOQ.FieldByName('id').Value;
   dat.ADOQodeja.ExecSQL;
   dat.ADOQ.Delete;
  end;
end;


Шакал   (2007-05-16 16:12:00) [4]

Не велите казнить, ну никак не получается.....

procedure Tglav.delClick(Sender: TObject);
var i : string;
begin
if MessageDlg('Вы действительно хотите удалить запись?', mtWarning,
   [mbYes, mbNo],0)=mrYes then
   begin
if not dat.ADOQ.IsEmpty then
i:=dat.ADOQ.FieldByName('id').Value;
dat.ADOQ.Delete;
dat.ADOQ.Refresh;
dat.ADOQodeja.Close;
dat.ADOQodeja.SQL.Clear;
dat.ADOQodeja.SQL.Add('delete * from specod');
dat.ADOQodeja.SQL.Add('where Выдано :dat');
dat.ADOQodeja.Parameters[0]:=i;
dat.ADOQodeja.Open;

где у меня ошибка? в генах? :)


Шакал   (2007-05-16 14:54:00) [5]

спасибо большое :)


Sergey13   (2007-05-16 14:46:00) [6]

dat.ADOQ.FieldByName('ID').Value - ID текущей записи.


Шакал   (2007-05-16 14:44:00) [7]


> Они в датасете. У него и спроси.

а как....код удаления с главной таблицы
begin
if MessageDlg('Вы действительно хотите удалить запись?', mtWarning,
   [mbYes, mbNo],0)=mrYes then
   begin
if not dat.ADOQ.IsEmpty then
dat.ADOQ.Delete;
dat.ADOQ.Refresh;

end;
end;

а как узнать id текущей записи??? я в дельфе ковыряюсь всего вторую неделю, всех тонкостей незнаю((((


Sergey13   (2007-05-16 14:40:00) [8]

> [2] Шакал ©   (16.05.07 14:38)

> так а sql запросом нельзя никак
Можно. По алгоритму 1 [1] Sergey13 ©   (16.05.07 14:31)

> только вопрос как получить текущий id с dbgrida....

Нет в гриде никаких ID. Там вообще данных нет. Они в датасете. У него и спроси.


Шакал   (2007-05-16 14:38:00) [9]

так а sql запросом нельзя никак, например тблица2.id=хх.delit...
только вопрос как получить текущий id с dbgrida....


Sergey13   (2007-05-16 14:31:00) [10]

> [0] Шакал ©   (16.05.07 14:19)

1. Последовательно удалить все подчиненные записи перед удалением главной. По всей иерархии в обратном порядке.
2. Настроить каскадное удаление, если СУБД позволяет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо