Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизGenereal SQL error Найти похожие ветки
← →
_sulent (2004-12-08 07:29) [0]Вот запрос:
delete * from table1
where code in (select code from table2)
Подскажите что может быть. Первый раз запрос выполняется, а на второй выдает ошибку:
General SQL error
Out of memory
Это все выполняется на ms Access, в table2 около 29000 записей, а в table1 около 100000.
Подскажте что может быть здесь не так, и в чем проблема. Судя по памяти, запрос должен выполниться без особых проблем. Cel 1.7, 256 Mb.
Заранее благодарен!
← →
ЮЮ © (2004-12-08 07:33) [1]* по синтаксису не положена
← →
_sulent (2004-12-08 07:33) [2]Проверили без транзации, прошло нормально. Но все-таки, что может быть не так, кто-нибудь может подсказать?
← →
_sulent (2004-12-08 07:37) [3]ну так работает, хоть не положена. Знаю что не положена, но факт не в этом, запрос сам выполняется... но ... один раз
← →
sniknik © (2004-12-08 08:03) [4]> Проверили без транзации, прошло нормально.
а как ее делаеш? и закрываеш ли до второй?
← →
_sulent (2004-12-08 08:24) [5]Закрывается...
вариант как обычно
Form1.database1.StartTransaction;
try
...
Form1.Database1.commit;
except
Form1.database1.rollback;
end;
← →
sniknik © (2004-12-08 08:40) [6]ну вот стоит только показать код (даже такой мизерный) а уже 2 глюка видно...
(ну или то что я воспринимаю практически глюком ;о)))
первое к аксесу обращаешся через BDE, второе транзакцию делай sql-ой командой (как и остальное)
и еще (когда избавишся от описанных "глюков") в нормальном варианте на транзакцию влияет параметр реестра
MaxLocksPerFile
Данный параметр запрещает превышение определенного числа в транзакциях, выполняемых ядром Microsoft Jet. Если число попыток блокировки в транзакции превышает это значение, транзакция разбивается на две части, занесение в которых производится независимо. Этот параметр был добавлен для предотвращения срывов на сервере Netware 3.1 при превышении предела блокировок Netware, а также для повышения быстродействия при работе как с Netware, так и с NT.
хотя и написано что она делится на две, но при массовых удалениях у меня были случаи когда выдавало ошибку о превышении блокировок (которую BDE вполне может транслировать как нехватку памяти) даже в самом аксесе, увеличение этого значения от ошибки избавляло...
← →
sniknik © (2004-12-08 08:42) [7]черт третий "глюк" пропустил, вместо except делай finally (все одно ошибку не обрабатываеш)
← →
Johnmen © (2004-12-08 09:17) [8]>sniknik © (08.12.04 08:42) [7]
>вместо except делай finally
Коль, ты что-то напутал...:)
← →
_sulent (2004-12-08 09:19) [9]да не придирайся, я просто описал все...
← →
sniknik © (2004-12-08 10:57) [10]> Коль, ты что-то напутал...:)
точно лоханулся. (почти сразу понял но уже от инета отключился и на работу нужно... уже доехал ;о))
← →
sniknik © (2004-12-08 11:00) [11]> да не придирайся, я просто описал все...
никто не придирается. проверь [6] (если долго переделывать возьми прогу какуюнибудь где можно запросы на ADO проверить. могу даже выслать.)
← →
_sulent (2004-12-08 11:05) [12]если будет не трудно, перешли... но уже впринципе нашел выход... немного не правильный, но главное работает ;)
Спасибо а помощь и что не отказали, как это обычно бывает! :)
← →
sniknik © (2004-12-08 11:20) [13]ты чегото путаеш, обычно как раз помогают. (если вопрос и его хозяин адекватны ;о))
послал. конект там легко меняется (настроен на аксесовскую базу только имя на свою поменяй),
проверяй тразакцию запросом
BEGIN TRANSACTION
после твой удаляющий запрос
дальше
COMMIT TRANSACTION
и (повтор)
BEGIN TRANSACTION
следующий удаляющий запрос (на котором у тебя говориш вылет...) что ADO скажет?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c