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

Вниз

ADOConnection не отпускает БД Access после Close!   Найти похожие ветки 

 
UnDISCOvery   (2006-01-20 16:43) [0]

Алоха, Мастера!
Помогите решить такую проблему: решил сделать в проге кнопку при щелчке по которой сжималась бы БД (Акцесс). И все хорошо,да вот только сжимать получается либо до MyConnect.Open, либо после MyConnect.Free в деструкторе. А вот такой код в "середине" не работает:
"
   for i:=0 to MyConnect.DataSetCount-1 do
     MyConnect.DataSets[i].Close;
   for i:=0 to MyConnect.CommandCount-1 do
     MyConnect.Commands[i].Cancel;
   if MyConnect.InTransaction then MyConnect.CommitTrans;
   MyConnect.KeepConnection:= false;
   MyConnect.Close;
   CompactMyBase. // !!!!!!! failed - exception
"
Говорит, что БД уже открыта для монопольного доступа, причем под моим аккаунтом! Но ведь я-то отсоединился!!! Других коннектов к БД нет!!!
В чем может быть дело?
Где копать?


 
Johnmen ©   (2006-01-20 17:02) [1]

Какая ось?


 
UnDISCOvery   (2006-01-20 17:07) [2]

Пробовал под Win XP SP1 и под WinXP SP2


 
sniknik ©   (2006-01-20 17:32) [3]

все "навороты" с отдельными закрытиями лишние... достаточно
MyConnect.Close;
CompactMyBase; // стати, такой функции нет... (это намек)
и все.

возможно не успевает закрытся (конект не асинхронный случаем?)
попробуй поставь Sleep(1000); между этими командами.


 
UnDISCOvery   (2006-01-20 17:42) [4]

навароты - это я запаниковал :)
первым вариантом и было просто MyConnect.Close;
"CompactMyBase;" - такая функция есть, и написал ее я :) в ней и сжимаю собственно, через DBEngine.CompactDatabase.
Коннект не асинхронный.
with MyConnect do
begin
 ConnectOptions:=  coConnectUnspecified;
 CursorLocation:= clUseServer;
 IsolationLevel:= ilReadCommitted;
 Mode:= cmUnknown;
end;


 
sniknik ©   (2006-01-20 17:57) [5]

> "CompactMyBase;" - такая функция есть, и написал ее я :)
и она "идеальна"? т.е. совсем лишена ошибок, на все времена. (еще один намек)

> через DBEngine.CompactDatabase
DAO? не хорошо. имхо. устарел.

> Коннект не асинхронный. ...
ну задержку то пробовал ставить? тогда гдето еще всетаки есть конект... (смотри по файлу блокировок *.ldb, пока не сотрется база открыта)


 
UnDISCOvery   (2006-01-20 18:05) [6]

CompactMyBase - не бывает ничего идеального, но тем не менее она нормально отрабатывает до MyConnect.Open и в деструкторе главной формы. Создается впечатление, что ADO что-то буферизирует когда идет работа с БД, и даже после сброса коннекта из приложения все равно держит открытой БД. :(  Пришел к этому выводу потому что, такая ситуация возникает только есть добавить запись в любую таблицу БД. А если ничего не добавлять,то все ОК.

"DAO? не хорошо. имхо. устарел." - как можно еще?

ставил задержку - пофиг

попробую в цикле ждать пока не пропадет *.ldb.


 
sniknik ©   (2006-01-20 18:09) [7]

> "DAO? не хорошо. имхо. устарел." - как можно еще?
Jet, Jro -> CompactDatabase ;)

> ставил задержку - пофиг
> попробую в цикле ждать пока не пропадет *.ldb.
ну раз ставил и секунды(!) не хватает... то не дождешся. ;) не все закрыл.


 
UnDISCOvery   (2006-01-20 19:40) [8]

Нашел багу!
Оказывается висела ADOCommand, которая была подключена не через ADOConnection, а через ConnectionString. Причем она просто выполняла UPDATE, даже ничего не открывала. По завершению сбросил строку подключения и блокировка пропала!
Спасибо всем!



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

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

Наверх




Память: 0.48 MB
Время: 0.049 c
2-1140957667
Федун
2006-02-26 15:41
2006.03.12
Вопрос по TDBLookupComboBox


3-1137743149
maep
2006-01-20 10:45
2006.03.12
TOraLoader: обрезает даты при вставке


15-1139844184
Yeg
2006-02-13 18:23
2006.03.12
algolist.manual.ru, только по Pascal


15-1139792340
scorp123
2006-02-13 03:59
2006.03.12
По поводу компонента.


2-1140539927
Незнаище
2006-02-21 19:38
2006.03.12
Локальный компьютер