Форум: "Начинающим";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизУдаление из нескольких таблиц Найти похожие ветки
← →
Шакал © (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c