|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Пишу проект с использованием 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 13:50 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
SyntonПрикрепляю тестовый проект. Ссылка на файл базы: здесь только 2 записи и OLE на 35мб ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 14:33 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, Все верно, запись одна. При ее удалении и происходит зависание ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 14:50 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Народ,очень нужна помощь в решении этой проблемы. Месяц не можем понять в чем дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 13:52 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Synton, 1.почему Вы используете для слияния строк "+" а не "&" 2. функция String имеет ДВА обязательных аргумента ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 14:42 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
ПыСы: как я не морщил лоб-не въехал:какие же записи Вы хотите отобрать ( при чем здесь строка заданной длины) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 14:49 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdku, 1. "+" - так исторически сложилось. А разве это как-то влияет на текст запроса? 2. В коде String - конструктор класса строки, достаточно одного аргумента: UnicodeString(const char* src). А String в Embarcadero С++ - это псевдоним UnicodeString: typedef UnicodeString String ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 15:07 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdku, Логика кода - удалить существующую и потом добавить новую строку в таблицу DeviceData. Удаление обычным запросом DELETE FROM происходит более 3-х минут, последующий INSERT INTO тех же данных в записи - 20 секунд. Проблема - долгое удаление записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 15:11 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Synton, что в таблице одна запись? (зачем что-либо отбирать) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 15:32 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdku, В рабочей базе конечно не одна. Это для публикации я подготовил тестовый пример, где оставил только одну запись. Прикрепил скриншот со временем удаления ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 15:45 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdku, "DELETE FROM [DeviceData] WHERE [DeviceId] = " + String(DeviceId); перевод: Удалить из таблицы [DeviceData] записи, в которых поле [DeviceId] = String(DeviceId) (чему я так и не понял) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 15:59 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Я вот о чем: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:11 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdku, Удалить из таблицы [DeviceData] записи, в которых поле [DeviceId] = 1. Здесь String(DeviceId) - преобразование целочисленного значения в текст. 1-я строка обработчика Button1Click: int DeviceId = 1; ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:12 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdku, Так ОК? Query = "DELETE FROM [DeviceData] WHERE [DeviceId] = " + IntToStr(DeviceId); ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:16 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Synton, у вас там это... Код: plaintext 1.
На каких машинах летает exe, а на каких подвисает ? ОС 32 / 64 ? В среде то понятно, что работает ... А Код: plaintext 1.
в С++ это случаем не 100 секунд? (подключаемая библиотека dos.h) если оно где то цепляется, то вот и есть возможное зависание на пару минут... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:30 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
vmag, От битности не зависит, может проявляться и там и там. От мощности машины тоже. vmagв С++ это случаем не 100 секунд? Это миллисекунды: VOID WINAPI Sleep( _In_ DWORD dwMilliseconds ); Закомментировал строки с #include <dinkumware64/chrono> ... std::chrono и Sleep(100); - ситуация не изменилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:43 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Synton, в примере,который Вы приложили поле [DeviceId] имеет тип Числовой с размером Длинное целое (и как там окажется дробь ?) и по любому будет WHERE [DeviceId]= [DeviceId]-бессмысленное выражение (всегда TRUE ничего не отбирающее) если это не секрет (гос.тайна) покажите реальную таблицу и озвучьте критерий удаления записей ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:52 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdku, Это и есть реальная таблица, только с одной записью. Вот запрос и значение переменной Query: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:57 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Synton, А если попробовать запрос на удаление без WHERE, запись-то все равно в примере одна? Просто в виде эксперимента пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 17:16 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
where, В этом случае "зависание" пропадает ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 17:23 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Synton, тогда напишите при совершении какого действия (нажатие кнопки или чё другое) Вы хотите удалить запись. И все же ответьте: каков критерий отбора записей для удаления? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 17:31 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
Synton, а если в схеме данных удалить связь между таблицами и вернуть WHERE ? просто интересно... ну или для этого случая вообще оставить только одну таблицу DeviceData, просто интересно, что за хренотень такая... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 17:41 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
sdkuтогда напишите при совершении какого действия (нажатие кнопки или чё другое) Вы хотите удалить запись. Да, при нажатии кнопки нужно удалить запись с известным DeviceId (в данном случае DeviceId = 1) sdkuИ все же ответьте: каков критерий отбора записей для удаления? Критерий только один - в строку формирования запроса на удаление передается DeviceId. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 17:57 |
|
Длительное выполнение запроса на удаление
|
|||
---|---|---|---|
#18+
vmagа если в схеме данных удалить связь между таблицами и вернуть WHERE ? просто интересно... ну или для этого случая вообще оставить только одну таблицу DeviceData, просто интересно, что за хренотень такая... Пробовал уже. И связь удалял, и индексы ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 17:58 |
|
|
start [/forum/topic.php?fid=45&fpage=84&tid=1612790]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 448ms |
0 / 0 |