ADO не освобождает таблицу

Indra

помнится я как-то наталкивался на подобное сообщение... но вот облазил все, что более-менее по теме подходит - но его не нашел.в общем, проблема такая: провайдер foxpro, через АДО изменяю таблицу (ну, или открываю ее - не суть важно). потом закрываю query - но если из другого query пытаюсь обратиться к этой таблице - пишет ошибку, таблица занята... может есть какое-то свойство у компонентов ADO, типа времени блокировки таблицы?. он, по всей видимости, вешает таблицу в память - и ничего нельзя сделать, даже сделав Query.free таблица не освобождается...Может, кто сталкивался?..Заранее большое спасибо.
18 ответов

Indra

В строке ADOConnection1.connectionstring наверное параметр Exclusive=Yes,должно быть Exclusive=No ...


Indra

у меня не было там этого прописано - но я написал...и все равно при последующем коннекте с этой таблицей выдает ошибку типа "Ошибка (8961)"


Indra

у меня не было там этого прописано - но я написал...и все равно при последующем коннекте с этой таблицей выдает ошибку типа "Ошибка (8961)"
а что там вообще написано??? Приведи полный ConnectionString.


Indra

Партизаны налетели


Indra

раньше было
ADOQuery.ConnectionString:='Provider=vfpoledb.<b>1</b>;Data Source=c:\temp\st;Collating Sequence=general;
а теперь
ADOQuery.ConnectionString:='Provider=vfpoledb.<b>1</b>;Data Source=c:\temp\st;Exclusive=No;Collating Sequence=general;
но таблица все равно продолжает блокироваться


Indra

А перезапуск или закрытие программы помогают.


Indra

я использую другой драйвер и у меня подобных проблем нет...
ADOConnection1.ConnectionString:='Provider=MSDASQL.1;'+
 'Extended Properties="Driver=%af_src_comm_0;'+
 'UID=;PWD=;SourceDB='+dir_b+'\Temp;'+
 'SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;'+
 'Collate=;Null=Yes;Deleted=Yes;"';
плюс к этому в system32 я заменила прикрепленную dll


Indra

А перезапуск или закрытие программы помогают.
Да, Анатолий, помогают - но неужели нельзя обойтись без перезапуска?.какое-нибудь свойство типа ConnectionTime:)


Indra

я использую другой драйвер и у меня подобных проблем нет...
вернее провайдер :)


Indra

я использую другой драйвер и у меня подобных проблем нет...
ADOConnection1.ConnectionString:='Provider=MSDASQL.1;'+
 'Extended Properties="Driver=%af_src_comm_0;'+
 'UID=;PWD=;SourceDB='+dir_b+'\Temp;'+
 'SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;'+
 'Collate=;Null=Yes;Deleted=Yes;"';
плюс к этому в system32 я заменила прикрепленную dll
ну, я программу не для себя пишу - поэтому с заменой dll ничего не получится...а с MSDASQL я работал - только с MSSQL-ем, когда через OPENROWSET к DBF-ам коннектился. не знал, что здесь тоже такое возможно... попробую, спасибокстати, может, просто нужно дописат ьодно из дополнительных свойств, которые есть у тебя в ConnectionString-е? попробую, потом скажу... хотя, думаю, вряд ли


Indra

Да, Анатолий, помогают - но неужели нельзя обойтись без перезапуска?.какое-нибудь свойство типа ConnectionTime:)
Тогда надо разбираться с TConnectionДля начала попробовать TConnection.Close


Indra

Тогда надо разбираться с TConnectionДля начала попробовать TConnection.Close
Я пробовал по-разному:
ADOQuery.close;
ADOQuery.free;
ADOQuery:=<b>nil</b>;
итог все равно один...


Indra

Я же говорю про TConnection, а не про ТADOQuery. Проверь и доложи результат.


Indra

Я же говорю про TConnection, а не про ТADOQuery. Проверь и доложи результат.
Анатолий, я конечно извиняюсь за свою вопиющую неграмотность в этом вопросе...я сразу обратился в поиск - Делфийский хэлп мне ничего не сказал об этом TConnection, а поиск в Инете (в т.ч. по этому сайту) плодов тоже не принес...я пробовал 2 путями, но, видимо, вы имели ввиду не то...хотя на всякий случай отчитаюсь:1 - может, имелось ввиду свойство типа ADOQuery.connection. ... - пробовал там делать close и free - ошибку выдавал тогда в памяти.2 - несколько раз сталкивался, когда компоненту свойства другого компонента дают, от которого он пошел (ну, например, Stringgrid1 as Grid).Попробовал...TConnection-а там нет вообщеНу, вот это были все мои жалкие попытки. Анатолий, может немного натолкнете меня в правильную сторону?.


Indra

Извини немного не точно написал, но не думал, что это вызовет проблемы, что опечатку сам обнаружишь.Речь идет об TAdoConnection, остальное по тексту. Результаты сообщи.


Indra

Извини немного не точно написал, но не думал, что это вызовет проблемы, что опечатку сам обнаружишь.Речь идет об TAdoConnection, остальное по тексту. Результаты сообщи.
Если честно - то даже не подумал о том, что это может быть опечатка:)А насчет ADOConnection-а - то я с ним уже поработал, конечно. причем даже раньше, чем с Query:)результат тот же. я пытался по всякому - и free делал, и тот же connection прописывал в Close, и timeout выставлял - все одно - таблица занята.Хотя там может еще какие свойства есть, кроме тех, что я смотрел...


Indra

Если честно - то даже не подумал о том, что это может быть опечатка:)А насчет ADOConnection-а - то я с ним уже поработал, конечно. причем даже раньше, чем с Query:)результат тот же. я пытался по всякому - и free делал, и тот же connection прописывал в Close, и timeout выставлял - все одно - таблица занята.Хотя там может еще какие свойства есть, кроме тех, что я смотрел...
Не рекомендую работать без ADOConnection - всегда.Проблем получишь больше, чем думаешь. Про удобства вообще молчу.Так что сделай ADOConnection - свяжи все и настрой и потом попробуй рекомендацию, ну а далее по результатам и с настройками .


Indra

ADOConnection1.ConnectionString:='Provider=vfpoledb;Data Source='+
 ExtractFilepath(Application.ExeName)+'\Temp\'+Bank.user+';'+
 'mode=ReadWrite|Share Deny None;Collating Sequence=MACHINE';
проверено на собственном опыте :)