Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.21;
Скачать: CL | DM;

Вниз

EOleException   Найти похожие ветки 

 
pvasya ©   (2002-09-28 09:58) [0]

Работаю с mdb файлом при помощи ADOQuery.
В цикле несколько раз вызываю нижеследующую процедуру, но при
втором ее вызове программа вылетает с EOleException. Что происходит?
Как победить эту ошибку?

procedure SendToUser(Query:TADOQuery;UserId,DiskId:String);
begin
Query.SQL.Clear;
Query.SQL.Add("update tbDisk set diskUse=2 where diskId in ("+DiskId+" )");
Query.ExecSQL;

Query.SQL.Clear;
Query.SQL.Add("INSERT INTO tbRegistry (NameId, DiskId, DateOut) "+
" SELECT UserId, diskId, Date() AS Expr1 "+
" FROM tbDisk, tbUsers "+
" WHERE diskId in ("+DiskId+") AND tbUsers.UserId="+UserId);
Query.ExecSQL;
end;


 
sniknik ©   (2002-09-28 16:34) [1]

Ошибку приведи какую дает. По ней в 90% случаев можно сказать где искать.
А еще желательно как подключаешся. для интереса.
а то все это как гадание на кофейной гуще, без всей информации.


 
pvasya ©   (2002-09-28 19:10) [2]

Вылетает EOleException co словами "отсутствует оператор в выражении diskId in ( 10,20 )". Причем вылетает на разных строчках процедуры. Мне кажется что это может происходить из-за того, что объект занят выполнением предыдущей команды. Да, если вызвать процедуру один раз и спустя секунд 5-10 еще раз все нормально.


 
sniknik ©   (2002-09-28 21:54) [3]

а в свойстве ExecuteOptions чтонибудь в true стоит? тогда возможно, поставь все в false и попробуй.


 
sniknik ©   (2002-09-28 22:35) [4]

нет вряд ли. у меня второй раз просто отказывается выполнятся говорит занят.

может от передаваемого параметра? второй раз те же значения не посылал? А то если он не находит ничего а в описании поля нот нил стоит? Хотя тоже... другую ошибку давало бы. А тут явно ошибка синтаксиса тогда почему первый раз срабатывает?


 
pvasya ©   (2002-09-29 00:56) [5]

В том то и дело что в синтаксисе ошибки нет, наверное АДОКвери занято и метод SQL.Clear неправильно работает. Может сделать приложение многопоточным?


 
sniknik ©   (2002-09-29 12:42) [6]

Если Query.ExecuteOptions <> [eoAsyncExecute] то должно ожидать окончания выполнения запроса, и SQL.Clear будет выполнятся когда он уже закончен. т.е. ничему не помешает.
но проверь, вставь в процедуру двойной код (не 2 вызова а 4) с параметрами от 1 и 2го вызова. судя по твоей логике ошибка возникнет при первом же запуске такой двойной процедуры.

многопоточность по моему только запутает ситуацию, хотя возможно и разрешит (в каждом потоке по хорошему свой коннект и квери пересекатся не будет) но сколько потоков будеш делать? если например нужен цикл из 1000 вызовов?




Страницы: 1 вся ветка

Текущий архив: 2002.10.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
14-69013
Эрик
2002-09-26 14:51
2002.10.21
У кого есть Delphi servise pack 2?


1-68714
Sergey+
2002-10-11 08:17
2002.10.21
Запрет на Copy


1-68806
Sidorovich
2002-10-10 01:02
2002.10.21
новая форма без модуля?


3-68678
Dimedrol
2002-09-27 15:59
2002.10.21
Как раскрасить ROWS! в DBGrid-e ?


14-68975
^SANYA
2002-09-28 16:10
2002.10.21
Стандарты Борланда, где вы?