powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Длительное выполнение запроса на удаление
25 сообщений из 66, страница 1 из 3
Длительное выполнение запроса на удаление
    #39386842
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу проект с использованием RadStudio XE 10.1. Обращаюсь к базе данных в формате Microsoft Access через ADO.
В базе данных хранится кривая с большим количеством точек(больше миллиона).
Данные в базе должны обновляться(сначала удаление, затем вставка новых данных), для удаления используется запрос вида:

Query = "DELETE FROM [DeviceData] WHERE [DeviceId] = " + String(DeviceId);

При выполнении запроса на удаление происходит "зависание" более чем на 2 минуты. При этом запрос на добавление аналогичной записи вида:

INSERT INTO

происходит значительно быстрее - около 20 секунд.
Зависание наблюдается только в готовом exe-файле(не важно debug или release версия), при работе в среде данный баг не проявляется. При этом на одних машинах зависание проявляется, на других удаление происходит почти мгновенно.

С чем может быть связано данное подвисание?

Прикрепляю тестовый проект. Ссылка на файл базы:
https://cloud.mail.ru/public/2Qio/GmEvffzTg
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39386899
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SyntonПрикрепляю тестовый проект. Ссылка на файл базы:

здесь только 2 записи и OLE на 35мб
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39386907
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,

Все верно, запись одна. При ее удалении и происходит зависание
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387613
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ,очень нужна помощь в решении этой проблемы. Месяц не можем понять в чем дело.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387668
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
1.почему Вы используете для слияния строк "+" а не "&"
2. функция String имеет ДВА обязательных аргумента
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387681
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПыСы: как я не морщил лоб-не въехал:какие же записи Вы хотите отобрать ( при чем здесь строка заданной длины)
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387707
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

1. "+" - так исторически сложилось. А разве это как-то влияет на текст запроса?
2. В коде String - конструктор класса строки, достаточно одного аргумента: UnicodeString(const char* src).
А String в Embarcadero С++ - это псевдоним UnicodeString:
typedef UnicodeString String
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387712
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Логика кода - удалить существующую и потом добавить новую строку в таблицу DeviceData. Удаление обычным запросом DELETE FROM происходит более 3-х минут, последующий INSERT INTO тех же данных в записи - 20 секунд. Проблема - долгое удаление записи.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387735
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
что в таблице одна запись? (зачем что-либо отбирать)
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387751
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

В рабочей базе конечно не одна. Это для публикации я подготовил тестовый пример, где оставил только одну запись.

Прикрепил скриншот со временем удаления
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387766
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,
"DELETE FROM [DeviceData] WHERE [DeviceId] = " + String(DeviceId);
перевод: Удалить из таблицы [DeviceData] записи, в которых поле [DeviceId] = String(DeviceId) (чему я так и не понял)
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387783
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот о чем:
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387785
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Удалить из таблицы [DeviceData] записи, в которых поле [DeviceId] = 1. Здесь String(DeviceId) - преобразование целочисленного значения в текст.

1-я строка обработчика Button1Click:
int DeviceId = 1;
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387789
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Так ОК?
Query = "DELETE FROM [DeviceData] WHERE [DeviceId] = " + IntToStr(DeviceId);
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387800
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,

у вас там это...
Код: plaintext
1.
#include <dinkumware64/chrono>


На каких машинах летает exe, а на каких подвисает ? ОС 32 / 64 ?
В среде то понятно, что работает ...

А
Код: plaintext
1.
Sleep(100)

в С++ это случаем не 100 секунд?
(подключаемая библиотека dos.h) если оно где то цепляется, то вот и есть возможное зависание на пару минут...
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387810
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

От битности не зависит, может проявляться и там и там. От мощности машины тоже.

vmagв С++ это случаем не 100 секунд?

Это миллисекунды:
VOID WINAPI Sleep(
_In_ DWORD dwMilliseconds
);

Закомментировал строки с #include <dinkumware64/chrono> ... std::chrono и Sleep(100); - ситуация не изменилась.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387817
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
в примере,который Вы приложили поле [DeviceId] имеет тип Числовой с размером Длинное целое (и как там окажется дробь ?)
и по любому будет WHERE [DeviceId]= [DeviceId]-бессмысленное выражение (всегда TRUE ничего не отбирающее)
если это не секрет (гос.тайна) покажите реальную таблицу и озвучьте критерий удаления записей
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387821
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Это и есть реальная таблица, только с одной записью.
Вот запрос и значение переменной Query:
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387833
where
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Synton,

А если попробовать запрос на удаление без WHERE, запись-то все равно в примере одна?
Просто в виде эксперимента пока.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387841
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
where,

В этом случае "зависание" пропадает
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387848
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
тогда напишите при совершении какого действия (нажатие кнопки или чё другое) Вы хотите удалить запись.
И все же ответьте: каков критерий отбора записей для удаления?
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387859
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,

а если в схеме данных удалить связь между таблицами и вернуть WHERE ? просто интересно... ну или для этого случая вообще оставить только одну таблицу DeviceData, просто интересно, что за хренотень такая...
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387869
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuтогда напишите при совершении какого действия (нажатие кнопки или чё другое) Вы хотите удалить запись.
Да, при нажатии кнопки нужно удалить запись с известным DeviceId (в данном случае DeviceId = 1)

sdkuИ все же ответьте: каков критерий отбора записей для удаления?
Критерий только один - в строку формирования запроса на удаление передается DeviceId.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387870
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagа если в схеме данных удалить связь между таблицами и вернуть WHERE ? просто интересно... ну или для этого случая вообще оставить только одну таблицу DeviceData, просто интересно, что за хренотень такая...
Пробовал уже. И связь удалял, и индексы
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387872
where
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Synton,

А запрос
Код: sql
1.
SELECT FROM [DeviceData] WHERE [DeviceId] = 1

тоже долго выполняется?
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 1 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Длительное выполнение запроса на удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]