|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.01.2013, 20:19 | #1 |
Форумчанин
Регистрация: 08.01.2011
Сообщений: 102
|
групповое удаление записей
Доброго времени суток, работаю на delphi 2010 + acces 2003 :
делаю групповое удаление записей из нескольких таблиц Таблица D главная (мастер) а все остальные детальные подчинены ей для этой задачи использую несколько компонентов ADOTable но они не участвуют в процессе удаления, а удаляю я записи через компоненты ADOQuery (связано это с тем что в некоторых таблицах нет соответствующих строк а в некоторых таблицах к одной строке относятся несколько вот. , в ADOTable нельзя использовать sql ) и несколько sql запросов в '''+DBEdit1.Text+'%'' '; отображается значение Код ID потому что по коду происходит связь между таблицами D.Код = P.PKey, D.Код = F. PKey ну и так далее, у каждой подчиненной есть свой код ID, ну короче использую нижеследующий код: # Код:
И в итоге ничего не удаляется а выскакивает ошибка (рисунок во вложении) а в чём проблема понять ни как не могу вот P.S. Буду рад за любую подсказку .. Последний раз редактировалось Stilet; 21.01.2013 в 21:05. |
21.01.2013, 20:47 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Active:=TRUE ???
Для этих целей ExecSQL есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
22.01.2013, 02:39 | #3 |
Форумчанин
Регистрация: 08.01.2011
Сообщений: 102
|
1) прошу прощения за тупость но что такое есть ExecSQL ? приведите какой нибудь пример по аналогии ...
(( Или вы имеете ввиду написать так # DataModule3.ADOQuery17.SQL.Text := 'delete from D where Код Like '''+DBEdit1.Text+'%'' '; DataModule3.ADOQuery17.ExecSQL; # )) ??? 2) главный вопрос по теме остается не решенным ! 3) Может быть у меня вообще неправильный подход решения этой задачи (может кто нибудь мне хотя бы намекнет как её решить ?) Последний раз редактировалось reihtmonbern; 22.01.2013 в 02:44. Причина: не дописка |
22.01.2013, 07:23 | #4 |
Форумчанин
Регистрация: 27.11.2012
Сообщений: 190
|
Да, так и нужно. Не мешало бы еще пользоваться with
|
22.01.2013, 08:35 | #5 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
и цикл...
2 варианта Код:
Не стесняемся, плюсуем!
|
22.01.2013, 10:19 | #6 | |
Форумчанин
Регистрация: 08.01.2011
Сообщений: 102
|
Цитата:
вот это я сделал и код изменил Код:
|
|
22.01.2013, 11:10 | #7 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
в uses добавь ADODB
кидать ниче нинадо, для разового вызова проще на месте создать, поюзать и убить
Не стесняемся, плюсуем!
|
23.01.2013, 10:30 | #8 |
Форумчанин
Регистрация: 08.01.2011
Сообщений: 102
|
Здравствуйте ещё раз попробовал ваш код всё работает хорошо но , к сожалению не удаляется строка из главной мастер таблицы D вот и делфи ругается выдает ошибку
: Параметр PKey не имеет значения по умолчанию . стоки из других детальных таблиц удаляются изумительно , Решил Ваш код немного изменить вообще удалить из него действия по таблице D чтоб он из неё ни чего не удалял # //DelTbl:array[0..5] of string=('P','F','K','DK','Budilnik' ,'D'); DelTbl:array[0..4] of string=('P','F','K','DK','Budilnik' ); # вот всё работает так же но делфи стал выдавать другую ошибку : Источник данных изменил или удалил значение ключа для данной строки в хранилище данных . Теперь удалена и локальная строка. В принципе меня устраивает второй вариант я строку из главной строки удалю дополнительно (ADOTable1.Delete по нажатию на другую кнопку это не страшно , но как сделать так что бы во время работы приложения не выскакивало сообщение типо об ошибке (: Источник данных изменил или удалил значение ключа для данной строки в хранилище данных . Теперь удалена и локальная строка.) я не знаю ... я использовал свой старый код # DataModule3.ADOQuery41.Active:=fals e; DataModule3.ADOQuery41.SQL.Text := 'delete from P where PKey Like '''+DBEdit1.Text+'%'' '; DataModule3.ADOQuery41.ExecSQL; # и этот код удалят то что мне нужно но всё равно выскакивает ошибка (: Источник данных изменил или удалил значение ключа для данной строки в хранилище данных . Теперь удалена и локальная строка.) ??? как сделать так что бы эта ошибка не выскакивала во время работы приложения ?? во время компиляции всё хорошо . Последний раз редактировалось reihtmonbern; 23.01.2013 в 10:45. |
23.01.2013, 11:03 | #9 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
Все верно из базы удалил запросом, все таблицы с изменениями нужно переоткрыть Close Open или Requery
и что-то с логикой не клеится, у тебя главная таблица и подчиненные? в правильной базе из главной удаляешь из подчиненных автоматом по ключу все чистится, нужно только правильно ключи и связи указать и не Лайками а четко по значению
Не стесняемся, плюсуем!
Последний раз редактировалось Slym; 23.01.2013 в 11:11. |
23.01.2013, 11:19 | #10 | |
Форумчанин
Регистрация: 08.01.2011
Сообщений: 102
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать групповое удаление, а не по одному за щелчок. | Bushel | PHP | 6 | 22.11.2010 12:02 |
удаление записей | aiktz | Microsoft Office Access | 1 | 11.11.2010 22:25 |
Каскадное удаление записей | Liones | БД в Delphi | 7 | 14.05.2009 08:04 |
Удаление записей | Blackmore | БД в Delphi | 2 | 26.05.2008 08:18 |
Удаление записей | Arsgun | БД в Delphi | 7 | 09.07.2007 11:56 |