|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
БД на Access связанные таблицы
if Application.MessageBox(Pchar('Сейчас будет удалена запись - '+ADOTableDSDesigner.AsString),'!Алярм!',MB_YESNO) =id_YES then
Form1.ADOTable1.Delete; - предложение принять или отказаться от удаления строки на ADOTable1 вот тут возникла проблемма: Удаление происходит только по ADOTable1 но таблицы имею две, связанные между собой полем "код" и мне надо чтоб в подчиненной таблице все что касается выбранного и удаленного поля 'код' тоже удалялось те если есть группа с 'код' 123 а подгрупп с 'код' 123, этак штук 20ть то эту подгруппу тоже надо искоренить а как сделать не знаю ну вот вроде бы и все надеюсь понятно обьяснил |
#2
|
||||
|
||||
Будем считать что основная таблица - 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
|
|||
|
|||
Ну чтож, попробую, думаю получится
Спасибо! |
#4
|
|||
|
|||
Хм...минутку...
бд у меня локальна и я не использую Sql что тогда? (самым верным решением, будет изучение Sql) |
#5
|
||||
|
||||
Цитата:
А если серьезно, то есть как минимум 2 варианта решения проблемы: 1. Медленный Последовательно просматриваем все записи подчиненной таблицы и в случае совпадения по полю связки с удаляемой записью главной таблицы запись из подчиненной удаляем 2. Побыстрее Делаем индекс на подчиненную таблицу по полю связки. Хотя индексирование изначально придумавалось для ускорения, поиска побочным эффектом от индексирования является "визуальная" сортировка записай таблицы в сообветствии с индексным выражением. Находим первую запись значение поля связки которой соответствует значению поля связки удаляемой записи из главной таблицы и удаляем эту запись, (*) перемещаемся "вниз" (на следующую запись) по индексу, проверяем соответствия поля связки если соответствует удаляем и повтор от *, если не соответствует то выход из процедуры удаления. Примерно так. Хотя мне это проще написать кодом чем разъяснить словами ЗЫЖ Юзать SQL запрос ИХМО вернее, ибо нет привязки к движку. |
#6
|
|||
|
|||
на колени падаю, челом бью
помогите кодом Aristarh Dark |
#7
|
||||
|
||||
Хм, давно я так заразительно не смеялсо
Стукнись в аську, поговорим. Я ж не телепат, мне от чего-то отталкиватся нужно. Я бываю в аське с 02 до 11 по Гринвичу |