Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1173856078
Sergey__
2007-03-14 10:07
2007.06.03
Роли в IB


15-1178298367
N3xt
2007-05-04 21:06
2007.06.03
задачка)


2-1178973589
ФФФФ
2007-05-12 16:39
2007.06.03
Поиск текста


1-1176199023
roughneck
2007-04-10 13:57
2007.06.03
Как сохранить расположение Dockable - форм?


2-1177523688
красотка (С)
2007-04-25 21:54
2007.06.03
Чем открыть файлы *.ADI, *.ADT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский