Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.011 c
8-1128313266
ZSOmega
2005-10-03 08:21
2006.03.12
выравнивание 16 байт для SSE


2-1140641543
вася
2006-02-22 23:52
2006.03.12
массив и сеть


15-1140355402
Ruban
2006-02-19 16:23
2006.03.12
Ctrl+Z


5-1126707425
lookin
2005-09-14 18:17
2006.03.12
Компонент в dcu...


2-1140788428
Golik
2006-02-24 16:40
2006.03.12
Сортировка в DBGride ??





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский