Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

EOleException [D6]


pvasya ©   (2002-09-28 09:58:00) 

Работаю с 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-29 12:42:00) [1]

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

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


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

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


sniknik   (2002-09-28 22:35:00) [3]

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

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


sniknik   (2002-09-28 21:54:00) [4]

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


pvasya   (2002-09-28 19:10:00) [5]

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


sniknik   (2002-09-28 16:34:00) [6]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо