Форум: "Базы";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c