Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Не хватает памяти при выполнении запроса на обновление!  [new]
Дуб-дубом
Guest
Акс97. Обрабатывается ~300 тыс. записей. Запрос делает вот что
...SET [T1].[F1]= Int([F2]*[Par0]*10000)/10000, [T1].[F3]= Int([F2]*[Par1]*10000)/10000...
Запрос запускается с транзакцией, через какое-то время появляется сообщение о нехватке памяти и - кирдык.
Свободного места на диске 1,5 гига, размер файла подкачки 768 мегов.
Чего ему еще надо?!

Всех с наступающим!!!
30 дек 05, 11:16    [2223152]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает памяти при выполнении запроса на обновление!  [new]
klen_
Member

Откуда:
Сообщений: 2404
Я бы написал код.

tabl = "Таблица1"
 
 strSQL = "Select * FROM " & tabl

Set tb = New ADODB.Recordset
Set db = Application.CurrentProject.Connection
tb.Open strSQL, db, adOpenForwardOnly, adLockOptimistic

Do Until tb.EOF
    ' что-нибудь делаем
    tb.MoveNext
Loop
tb.Close

А ещё лучше, перед тем как начать цикл, перескочить по индексу на нужную запись. И указатель записи мгновенно оказывается на нужной записи. А в конце цикла проверять "не пора ли прервать цикл". Но для этого база, вернее таблица, должна быть проиндексирована.
Например: в таблице 10 цехов, в каждой по миллиону записей. Допустим надо выбрать 4-ый цех. Таблица проиндексирована по номерам цехов. Перескакиваем по индексу на 4-ый цех. Начинаем цикл. Как только встретится 5-ый цех, то превем цикл.
30 дек 05, 11:34    [2223229]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает памяти при выполнении запроса на обновление!  [new]
Дуб-дубом
Guest
Запускаю запрос на обновление без транзакции, все работает, только возникает сообщение типа "будет обновлено n-записей, отмена невозможна из-за нехватки места на диске", нажимаю OK и все отрабатывает.
Выходит все дело в транзакции было?
30 дек 05, 12:35    [2223527]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает памяти при выполнении запроса на обновление!  [new]
Пользователь2
Guest
Посмотри здесь.
30 дек 05, 12:56    [2223627]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает памяти при выполнении запроса на обновление!  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
читайте справку на microsoft.com
у вас ошибка именно из-за транзакции - Аксес выбирает количество блокировок файла мдб, доступное системе, и дает эту ошибку
именно поэтому при выполнении руками у вас появляется сообщение "отмена невозможна" - фактически, невозможна та самая транзакция - то есть если вы жмете "продолжить" и отключают всет - получите бред в данных

решение - проводить update меньшего кол-ва строк за раз, можно делать так - цикл:
1) выбрали первые n строк по флажку "не обновлены" SELECT TOP 10000
2) сменили в них флажок "не обновлены" на "обновляются"
3) обновили
4) сменили в них флажок "обновляются" на "обновлены"
и т.д.
30 дек 05, 14:44    [2224071]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает памяти при выполнении запроса на обновление!  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
важно - все мои шаги - это операции SQL, а не пробег по рекордсету, который в ДЕСЯТКИ раз медленнее (можете сравнить)
30 дек 05, 14:45    [2224078]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить