![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление из нескольких таблиц [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. Настроить каскадное удаление, если СУБД позволяет.