powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Длительное выполнение запроса на удаление
66 сообщений из 66, показаны все 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
Длительное выполнение запроса на удаление
    #39387891
vborets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,

Тригеры в базе на удаление в таблице есть?
Индекс?
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387898
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
вопрос подкупающий своей наивностью:
-а как через форму добавить запись в тбл.Device и вообще её предназначение?
-какие данные в поле MeasData и как они туда заносятся?
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387901
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS.
Зачем левой рукой доставать правое ухо.
Код: vbnet
1.
2.
CurrentDb.Execute "DELETE FROM [DeviceData] WHERE [DeviceId] = 1" 
CurrentDb.Execute "DELETE FROM [DeviceData] WHERE [DeviceId] =" & me.[DeviceId] 'или так
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387903
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь вопрос ТС читал перед тем как отвечать?

:)
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387905
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vboretsТригеры в базе на удаление в таблице есть?
Индекс?
Триггеров нет, индекс на поле deviceid
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387907
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuSynton,
вопрос подкупающий своей наивностью:
-а как через форму добавить запись в тбл.Device и вообще её предназначение?
-какие данные в поле MeasData и как они туда заносятся?
Как эти вопросы связаны с решением проблемы?
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39387987
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
whereА запрос
Код: sql
1.
SELECT FROM [DeviceData] WHERE [DeviceId] = 1

тоже долго выполняется?
Именно этот запрос как раз долго и выполняется.

Я понимаю, что долгое выполнение как-то связано с тем, что в единственной записи в таблице DeviceData поле MeasData (OLE-объект) содержит данные размером 35 МБ. Если в это поле записать небольшой объем - время выполнения нормальное (доли секунды).
При этом выполнение запроса на удаление в консоли самой БД происхолит быстро, также быстро, как выполнение удаления в программе, запушенной в среде RAD Studio. Зависает именно при запуске exe-шника.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388025
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SyntonЯ понимаю, что долгое выполнение как-то связано с тем, что в единственной записи в таблице DeviceData поле MeasData (OLE-объект) содержит данные размером 35 МБ. Если в это поле записать небольшой объем - время выполнения нормальное (доли секунды).

ну тогда как то обходить нужно ситуацию - перед удалением записи:
- очищать поле или
- писать туда дежурную заглушку малого размера
Может бубен + удаление будет короче чем тупо удаление...
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388031
where
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

Но определяться нужная запись будет с помощью WHERE (единственная запись в таблице лишь для примера).
А тормоза наблюдаются именно при WHERE, без WHERE тормозов нет.
Судя по рассказам ТС.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388092
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
Что-то мне сдается, что вопрос вообще не к Акцессу. Вы вообще на каком языке пишете на RadStudio? Сорри, базу не открывал. Думаю, вопрос лучше задать в профильный форум.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388113
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
whereНо определяться нужная запись будет с помощью WHERE (единственная запись в таблице лишь для примера).
А тормоза наблюдаются именно при WHERE, без WHERE тормозов нет.
Судя по рассказам ТС.
Все верно, на апдейте с условием WHERE также зависает
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388114
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinSynton,
Что-то мне сдается, что вопрос вообще не к Акцессу. Вы вообще на каком языке пишете на RadStudio? Сорри, базу не открывал. Думаю, вопрос лучше задать в профильный форум.
RAD Studio C++, доступ к БД через ADO компоненты. Настройкаи коннекта можно посмотреть в коде тестового проекта
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388145
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
Чтобы отделить мух от котлет, я бы провел простой эксперимент: в самой Акцессовской базе написал бы элементарную процедурку, которая через ADO удаляет строки по критерию. Если скорость будет такая же медленная, виноват Акцесс или ADO, а если скорось нормальная - что-то не так в программе или в сопряжении программы и ADO. В первом случае я бы еще проверил удаление через DAO или просто запросом из конструктора, если опять медленно, то виновата исключительно база.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388154
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(мысли вслух)

а такой запрос, быстро или долго?

SELECT DeviceId FROM [DeviceData] WHERE [DeviceId] = 1
В смысле, если не тянуть мегаполе.

И можно ли писать так
DELETE DeviceId FROM [DeviceData] WHERE [DeviceId] = 1

отличаются ли машины где работа идет быстро и медленно установленными акцессами? какая строка подключения в ADO - через какой драйвер? можно ли данные, которые лежат в огромном поле класть в файлы рядом с БД, а в БД хранить только имена файлов - не станет ли лучше? и удалять файл одновременно с удалением записи.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388158
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, попробовал я вашу базу, через VBA ADO удаляется безо всяких зависаний, база и ADO не виноваты, копайте C++ и связку С и ADO
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388159
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinЧтобы отделить мух от котлет, я бы провел простой эксперимент: в самой Акцессовской базе написал бы элементарную процедурку, которая через ADO удаляет строки по критерию.
Попробую, отпишусь

MrShinВ первом случае я бы еще проверил удаление через DAO или просто запросом из конструктора, если опять медленно, то виновата исключительно база.
Запрос из конструктора работает нормально, без задержек.
А есть пример построения запроса на удаление через DAO? Никогда не использовал этот интерфейс
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388165
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SyntonwhereА запрос
Код: sql
1.
SELECT FROM [DeviceData] WHERE [DeviceId] = 1

тоже долго выполняется?
Именно этот запрос как раз долго и выполняется.

Я не внимательно прочитал вопрос - вношу поправку в свой ответ. SELECT FROM [DeviceData] WHERE [DeviceId] = 1 выполняется нормально (секунду где-то), зависает DELETE FROM [DeviceData] WHERE [DeviceId] = 1
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388188
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinЧтобы отделить мух от котлет, я бы провел простой эксперимент: в самой Акцессовской базе написал бы элементарную процедурку, которая через ADO удаляет строки по критерию.

Написал запрос на удаление записи по критерию через ADO - удаление моментальное:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Compare Database
Option Explicit

Sub DeleteRecord()
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim strSql As String
    Dim i As Integer
    
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
   
    strSql = "SELECT * FROM [DeviceData] WHERE [DeviceId] = 1;"
    rs.Open strSql, cn, adOpenDynamic, adLockOptimistic
    
    rs.MoveFirst
    rs.Delete

    rs.Close
    
    Set rs = Nothing
    Set cn = Nothing
End Sub
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388193
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
Была идея...
Vladimir Baskakovможно ли данные, которые лежат в огромном поле класть в файлы рядом с БД
Вот немного видоизмененная тема и только ради того, чтобы where не ползал где не нужно...
- скачайте тупо из моего облака базу и без всяких изменений попробуйте как отработает...
Ссылка на измененную базу
https://cloud.mail.ru/public/LKu4/D8NQMWonq
Суть в картинке...
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388204
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все таки, через какой драйвер работает то соединение, которой из внешней программы?
Что работает долго - сам делит, или закрытие транзакции с коммитом?

Мне думается, что БД Access не самое лучшее место для закладки больших объемов данных.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388215
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovа такой запрос, быстро или долго?
SELECT DeviceId FROM [DeviceData] WHERE [DeviceId] = 1
В смысле, если не тянуть мегаполе.Быстро. Даже если тянуть мегаполе - тоже быстро (секунда)
Vladimir BaskakovИ можно ли писать так
DELETE DeviceId FROM [DeviceData] WHERE [DeviceId] = 1
Писать так можно, но быстрее не стало.
Vladimir Baskakovотличаются ли машины где работа идет быстро и медленно установленными акцессами?Нет, от версии Access не зависит.
Зависает на Win7x64 с Access 2016, на Win7x64 с Access 2010, но, например, на Win10x64 с Access 2016 все быстро
Vladimir Baskakovкакая строка подключения в ADO - через какой драйвер?String DatabaseFile = "d:\\test2.mdb";
String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DatabaseFile + ";Persist Security Info=False";
Vladimir Baskakovможно ли данные, которые лежат в огромном поле класть в файлы рядом с БД, а в БД хранить только имена файлов - не станет ли лучше? и удалять файл одновременно с удалением записи.Нет, не прокатит, архитектурой приложения этого не предусмотрено. Все в одном файле БД Access
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388220
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovЧто работает долго - сам делит, или закрытие транзакции с коммитом? Как это проверить в С++?

Мне думается, что БД Access не самое лучшее место для закладки больших объемов данных.[/quot]Приведенный пример скорее исключение, в основном объем данных в каждой записи много меньше.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388221
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой сейчас размер файла с базой? При налчии поля с двоичными данными очень быстро можно достигнуть предела в 2 Гб, после чего начинаются ошибки, тормоза и прочие чудеса.

Или у вас тормозит даже на одной записи на файле, который вы выложили?
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388222
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот такой драйвер

Microsoft.ACE.OLEDB.12.0
отсель взят сей
http://www.vlsoftware.net/documentation/exportizer/connection-strings-examples.htm
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388224
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SyntonVladimir BaskakovЧто работает долго - сам делит, или закрытие транзакции с коммитом? Как это проверить в С++?

Мне думается, что БД Access не самое лучшее место для закладки больших объемов данных.Приведенный пример скорее исключение, в основном объем данных в каждой записи много меньше.[/quot]

показать сишный код. Вот прямо как написан . И оттрассировать )))))
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388225
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinА какой сейчас размер файла с базой? При налчии поля с двоичными данными очень быстро можно достигнуть предела в 2 Гб, после чего начинаются ошибки, тормоза и прочие чудеса.

Или у вас тормозит даже на одной записи на файле, который вы выложили?Размер тестовой БД - 35 МБ
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388227
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovпоказать сишный код. Вот прямо как написан . И оттрассировать )))))
Тестовый проект прилеплен к первому топику, вот кусок кода на удаление. Зависает на ADOCommand->Execute(), после отвисания переходит на строчку с while
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Query = "DELETE [DeviceId] FROM [DeviceData] WHERE [DeviceId] = " + IntToStr(DeviceId);

ADOCommand->CommandText = Query;
try {
	ADOCommand->Execute();
	while (ADOCommand->States == TObjectStates() << stExecuting)
		Sleep(100);
}
catch (Exception &exception) {
	String Text = "Ошибка:\n" + exception.Message.Trim() + ".\n\nSQL-запрос:\n" + Query;
	Application->MessageBox(Text.c_str(), String("Внимание!").c_str(), MB_OK|MB_ICONERROR);
	return;
}
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388228
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,

vmagВот немного видоизмененная тема и только ради того, чтобы where не ползал где не нужно...
- скачайте тупо из моего облака базу и без всяких изменений попробуйте как отработает...
Ссылка на измененную базу
https://cloud.mail.ru/public/LKu4/D8NQMWonq


Можете не пробовать... я в этой своей бд запустил ваш запрос и получил ваше время удаления больше 2-минут... Машина очень шустрая, W7 (64), акцесс 2003... жють... даже без where на OLE
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388234
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagМожете не пробовать... я в этой своей бд запустил ваш запрос и получил ваше время удаления больше 2-минут... Машина очень шустрая, W7 (64), акцесс 2003... жють... даже без where на OLEУже попробовал - зависает. Хотя идея была хорошая
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388238
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,
У меня такое ощущение, что перед удалением система пробует искать всё, что есть в системе, связанное с объектом в OLE и если на машине ничего нет, то она долго думает чо с этим объектом делать чтобы правильно его покоцать... не? ну или наоборот - если что-то есть... А что там лежит, если не секрет?
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388249
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagSynton,
У меня такое ощущение, что перед удалением система пробует искать всё, что есть в системе, связанное с объектом в OLE и если на машине ничего нет, то она долго думает чо с этим объектом делать чтобы правильно его покоцать... не? ну или наоборот - если что-то есть... А что там лежит, если не секрет?Я грешу на какой-нибудь процесс "дефрагментации" памяти или пересборку индексов ядром Access, и что этот процесс зависит от ОС (на Win10 не зависает). Данные - кривая замера параметра во времени
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388256
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,

Sleep(100)

Эта функция не определена стандартом ANSI С. Функция sleep() приостанавливает выполнение программы на время, задаваемое параметром time. Время задается в секундах.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388258
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synton,

Да, похоже ваша прога не причем... раз я у себя без неё вышел на те же 2 минуты... я даже в своей измененной БД запускаю запрос на удаление тупо в самой таблице OLE где в where первичный ключ - и те же 2 минуты...
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388259
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

было уже, ремили, не помогло...
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388262
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagПЕНСИОНЕРКА,

было уже, ремили, не помогло...

попробуйте поставить Sleep(5)
может где-то еще этот параметр задается
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388266
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovА вот такой драйвер

Microsoft.ACE.OLEDB.12.0
отсель взят сей
http://www.vlsoftware.net/documentation/exportizer/connection-strings-examples.htm Тормоза пропали на другом драйвере!!!
Код: plaintext
1.
String ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DatabaseFile + ";Persist Security Info=False";
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388267
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАпопробуйте поставить Sleep(5)
может где-то еще этот параметр задаетсяВообще без while запускал, не помогло
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388268
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagМожете не пробовать... я в этой своей бд запустил ваш запрос и получил ваше время удаления больше 2-минут... Машина очень шустрая, W7 (64), акцесс 2003... жють... даже без where на OLEvmag, можете на своей БД попробовать другой драйвер - ACE?
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388277
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Syntonvmag, можете на своей БД попробовать другой драйвер - ACE?

К сожалению нет... я сейчас в таком месте где и не комильфо, и возможностей мало...
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388306
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Synton]Vladimir BaskakovА вот такой драйвер

Microsoft.ACE.OLEDB.12.0

String ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0 ;Data Source=" + DatabaseFile + ";Persist Security Info=False";



а, мне так и подумалось.

старый jet драйвер идет со времен .mdb формата.
Для accdb - родной драйвер - ace.

Ну не суть, главное - отладили? ну и хорошо, приятной пятницы.
...
Рейтинг: 0 / 0
Длительное выполнение запроса на удаление
    #39388332
Synton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо за участие в решении проблемы!
...
Рейтинг: 0 / 0
66 сообщений из 66, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Длительное выполнение запроса на удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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