Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.09.2006, 13:50
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
Вопрос БД на Access связанные таблицы

if Application.MessageBox(Pchar('Сейчас будет удалена запись - '+ADOTableDSDesigner.AsString),'!Алярм!',MB_YESNO) =id_YES then
Form1.ADOTable1.Delete;

- предложение принять или отказаться от удаления строки
на ADOTable1

вот тут возникла проблемма:
Удаление происходит только по ADOTable1
но таблицы имею две, связанные между собой полем "код"
и мне надо чтоб в подчиненной таблице все что касается выбранного и удаленного поля 'код' тоже удалялось
те если есть группа с 'код' 123
а подгрупп с 'код' 123, этак штук 20ть
то эту подгруппу тоже надо искоренить
а как сделать не знаю
ну вот вроде бы и все
надеюсь понятно обьяснил
Ответить с цитированием
  #2  
Старый 27.09.2006, 05:24
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Будем считать что основная таблица - Master, а подчиненная Slave, поле для связи Code (русский язык использовать не станем )
Код:
//Подчиненная таблица
var
  q:TADOQuery;
  DelRecCode:Integer;
begin
...  //тут спрашивали удалять или нет
q:=TADOQuery.Create(nil);
q.Connection:=Form1.ADOTable1.Connection;  //Ну или какое у тебя там соединение :)
q.SQL.Text:='DELETE FROM Slave WHERE Slave.Code = :Code';
q.Parameters.ParseSQL(q.SQL.Text,true);
q.Parameters.ParamByName('Code').Value:=Form1.ADOTable1.FieldByName('Code').AsInteger;
try
  q.ExecSQL;
except
  MessageDLG('Error!',mtError,[mbOk],0);
end;
q.Free;
//Далее удаляй из основной таблицы
end;
ЗЫЖ Писал прямо тут, так что могут быть очепятки
Ответить с цитированием
  #3  
Старый 27.09.2006, 14:37
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию

Ну чтож, попробую, думаю получится
Спасибо!
Ответить с цитированием
  #4  
Старый 27.09.2006, 15:13
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию

Хм...минутку...
бд у меня локальна и я не использую Sql
что тогда?
(самым верным решением, будет изучение Sql)
Ответить с цитированием
  #5  
Старый 28.09.2006, 05:35
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Kristofer
самым верным решением, будет изучение Sql
Сам же себе и ответил
А если серьезно, то есть как минимум 2 варианта решения проблемы:
1. Медленный
Последовательно просматриваем все записи подчиненной таблицы и в случае совпадения по полю связки с удаляемой записью главной таблицы запись из подчиненной удаляем
2. Побыстрее
Делаем индекс на подчиненную таблицу по полю связки. Хотя индексирование изначально придумавалось для ускорения, поиска побочным эффектом от индексирования является "визуальная" сортировка записай таблицы в сообветствии с индексным выражением. Находим первую запись значение поля связки которой соответствует значению поля связки удаляемой записи из главной таблицы и удаляем эту запись, (*) перемещаемся "вниз" (на следующую запись) по индексу, проверяем соответствия поля связки если соответствует удаляем и повтор от *, если не соответствует то выход из процедуры удаления.

Примерно так. Хотя мне это проще написать кодом чем разъяснить словами

ЗЫЖ Юзать SQL запрос ИХМО вернее, ибо нет привязки к движку.
Ответить с цитированием
  #6  
Старый 29.09.2006, 15:35
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию

на колени падаю, челом бью
помогите кодом Aristarh Dark
Ответить с цитированием
  #7  
Старый 02.10.2006, 09:11
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Хм, давно я так заразительно не смеялсо
Стукнись в аську, поговорим. Я ж не телепат, мне от чего-то отталкиватся нужно.
Я бываю в аське с 02 до 11 по Гринвичу
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter