Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353

ADO Query Удаление записей

11.10.2013, 20:42. Показов 8458. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Реализовано удаление из таблиц БД Access (через ADO) путем перебора.
Записей бывает более 100 тыс.

Вот кусок кода:

QCon - это ADOQuery
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
begin
try
QCon.DisableControls; // ставлю чтоб отображение грида не тормозило процесс
PrBar.Position:=0;
PrBar.Max:=spinDO.Value-spinOT.Value; //прогресс бар, спинот и спиндо - спинедиты опред диапазон удаления
 
  For i:=spinOT.Value to spinDO.Value do
    Begin
     QCon.RecNo:=i; // перемещаюсь на номер записи
     QCon.Delete; //удаляю
     PrBar.Position:=i-spinOT.Value; //позиция прогресса
     lbSDel.Caption:='Удаляю: '+IntToStr(Trunc(100*PrBar.Position/PrBar.Max))+'%'; //перевод прогресса в проценты
     Application.ProcessMessages();
    End;
QCon.EnableControls;
  messagedlg('Удаление завершено!',mtConfirmation,[mbok],0);
except
 
end;
Удаляется без тормозов, но останавливается на 9493 записи. Тупо перестает удалять, ни зависаний, ни ошибок...
Что за фигня?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2013, 20:42
Ответы с готовыми решениями:

Удаление записи из dbf-файла в ADO. Query too complex
Наблюдается странная вещь...Записи добавляются в файл дбф но не удаляются... появляется ран тайм еррор и говорит Query too complex и...

Удаление записей в dbf с использованием ADO
Делаю 'cn - Connection cn.Execute ('DELETE * FROM spr.dbf') Записи помечаются на удаление. А как сделать, чтобы они физически...

ADO+MS SQL: как узнать количество обработанных строк при insert в ADO Query?
Добрый день. При выполнении запроса в MS SQL insert into ..(,,) select 0,20,'Text' where not exists (select 1 from .. where...

35
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
14.10.2013, 12:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xVahax Посмотреть сообщение
Удаляю все записи по порядку начиная с заданного порядкового номера по заданный порядковый номер.
Что в вашем понимании "порядковый номер"? У одной и той же записи могут быть разные "порядковые номера", в зависимости от сортировки, фильтра и т.д. Записи в БД могут храниться как угодно. И определять порядковый номер записи относительно ее нахождения в БД в корне неверно.
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 12:32  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
Что в вашем понимании "порядковый номер"? У одной и той же записи могут быть разные "порядковые номера", в зависимости от сортировки, фильтра и т.д. Записи в БД могут храниться как угодно. И определять порядковый номер записи относительно ее нахождения в БД в корне неверно.
Вы правы, но вопрос: почему 9493?
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
14.10.2013, 12:33
Цитата Сообщение от xVahax Посмотреть сообщение
Удаляю все записи по порядку начиная с заданного порядкового номера по заданный порядковый номер.
Отсюда и все ваши проблемы. Вы используете то чего на самом деле не существует.
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 12:36  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Отсюда и все ваши проблемы. Вы используете то чего на самом деле не существует.
Ну перебрать то просто я их всех могу, а почему тогда во время перебора не могу удалить все что перебрал, а могу удалить именно определенное количество 9493?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
14.10.2013, 12:36
xVahax, откуда мне знать. Код и БД находится у Вас, а не у меня. Может Вы делаете цикл от 1 до 9493. Или не убрали строку QCon.RecNo:=i (поэтому курсор скачет через записи). Или еще что-то.
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 12:39  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
xVahax, откуда мне знать. Код и БД находится у Вас, а не у меня. Может Вы делаете цикл от 1 до 9493. Или не убрали строку QCon.RecNo:=i (поэтому курсор скачет через записи). Или еще что-то.
В ADOQuery существует какая нидь ПОМЕТКА записей на удаление. Если пометить а потом удалить помеченные?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
14.10.2013, 12:51
Цитата Сообщение от xVahax Посмотреть сообщение
Если пометить а потом удалить помеченные?
Добавьте логическое поле и помечайте это поле. А потом удаляйте все записи в таблице, у которых это поле помечено.
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 12:55  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
Добавьте логическое поле и помечайте это поле. А потом удаляйте все записи в таблице, у которых это поле помечено.
Буди что так...Хотя лучше уж запросом как вы предлагали...
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2013, 14:01
xVahax, наверняка же юзер глазеет в DBGrid, видит там записи, требующие (по его мнению) удаления и способен пометить выделением эти записи прямо в гриде (смежное или несмежное выделение - это уж как ему удобнее)..
Так зачем тогда нужен этот костыль из spin'ов ?
Грид хранит все что выделил юзер в списке закладок DBGrid.SelectedRows - достаточно пробежаться по этому списку, перейти на каждую запись, на которую указывает очередная закладка, и удалить ее.

Этот простейший и очевидный механизм недоступен лишь для однонаправленных наборов записей, но вряд ли это твой случай.
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 14:35  [ТС]
Понял почему на 9493 останавливается. Как программно (но лучше не через реестр) на время работы программы увеличить у Microsoft.Jet.OLEDB.4.0 значение MaxLocksPerFile с значения 9493 до требуемого?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2013, 14:40
Записи удаляешь в dbf ?
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 14:54  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Записи удаляешь в dbf ?
Боже упаси работать с таким количеством записей в dbf ! Я с Access 2003 работаю, mdb

Добавлено через 7 минут
исправил в реестре значение MaxLocksPerFile на 500000 и все как надо делается...как теперь его на время программно менять.
Везде пишут вот эту строчку DBEngine.SetOption dbMaxLocksPerFile, 200000, а где это выполнить и как не написано
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2013, 14:56
http://msdn.microsoft.com/en-u... 10%29.aspx

Добавлено через 1 минуту
Цитата Сообщение от xVahax Посмотреть сообщение
Везде пишут вот эту строчку DBEngine.SetOption dbMaxLocksPerFile
Это для DAO, не для ADO.
1
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 15:07  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
http://msdn.microsoft.com/en-u... 10%29.aspx

Добавлено через 1 минуту


Это для DAO, не для ADO.
Но смысл то одинаковый
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2013, 15:13
http://office.microsoft.com/en... 32169.aspx
1
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
14.10.2013, 15:36  [ТС]
Огромное спасибо mss с его ссылкой http://office.microsoft.com/en... 32169.aspx, где указана строка:

Visual Basic
1
ADOConnection.Properties("Jet OLEDB:Max Locks Per File") = 20000
Работоспособная запись в Delphi выглядит так:
Delphi
1
ADOConnection.Properties['Jet OLEDB:Max Locks Per File'].Value:=Требуемое количество записей;
Всем кто помогал разобраться огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2013, 15:36

Невозможно удаление записей. ADO / Access / Jet 4.0
Здравствуйте, уважаемые. Простой вопрос, однако разобраться сам не могу. Искал похожие темы, нашел, однако они не помогли. Не могу...

Удаление записей через DBGrid. Выдает ошибку - Query CommandText does not return a result set
Таблица подключена, запрос delete * from Списание where Причина_списания = :поломка При включении на Query Active:=True появляется...

Удаление записей Delphi - Ado - Access через SQL Between
Доброго времени суток. БД - для учета школьных олимпиад. Нужно написать запрос для удаления олимпиад по каждому уч. году. Пример ...

ADO Query
И снова всем привет! Возник вопрос, если при изменении содержания в таблице в бд, через делфи( т.е. при откомпилированном проекте) мне...

Запарка с ADO Query
Хочу просто изменить ширину полей, но не добавляются поля в ADO Query. Пишет "неправильно определен объект Parameter. Предоставлены...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru