Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

Удаление из нескольких таблиц   Найти похожие ветки 

 
Шакал ©   (2007-05-16 14:19) [0]

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

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


 
Sergey13 ©   (2007-05-16 14:31) [1]

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

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


 
Шакал ©   (2007-05-16 14:38) [2]

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


 
Sergey13 ©   (2007-05-16 14:40) [3]

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

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

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

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


 
Шакал ©   (2007-05-16 14:44) [4]


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

а как....код удаления с главной таблицы
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:46) [5]

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


 
Шакал ©   (2007-05-16 14:54) [6]

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


 
Шакал ©   (2007-05-16 16:12) [7]

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

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;

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


 
Sergey13 ©   (2007-05-16 16:52) [8]

> [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 17:13) [9]

Во как я написал...сам от себя не ожидал 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-17 08:55) [10]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.06.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
15-1178564140
iZEN
2007-05-07 22:55
2007.06.03
Ой чо деется, Microsoft торгует Линуксом!


11-1158851694
Vladimir Kladov
2006-09-21 19:14
2007.06.03
Версия 2.39


2-1179133630
Zahadom
2007-05-14 13:07
2007.06.03
Копированиет с индикатором - ёлки-палки!


15-1178777604
Alkid
2007-05-10 10:13
2007.06.03
Схемы разибения дисков


2-1179381440
-=DeMoH=-
2007-05-17 09:57
2007.06.03
Как сравнить две даты