Главная страница
    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.46 MB
Время: 0.012 c
3-1138017617
HabarovSergey
2006-01-23 15:00
2006.03.12
DB-компоненты, многопользовательская среда, вылазят грабли


4-1134536809
Se
2005-12-14 08:06
2006.03.12
Форма не обрабатывает сообщения, когда неактивна


2-1140621520
mihauzen
2006-02-22 18:18
2006.03.12
Чем/как реализовать "многооконность" в одном приложении?


15-1140418427
Бугага
2006-02-20 09:53
2006.03.12
Нет ли у кого этих двух книг в электронном варианте?


15-1139951775
ArtemESC
2006-02-15 00:16
2006.03.12
Компиляторы...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский