1

Тема: Помилка при повторному відкритті файлу додатком (Delphi)

У мене ось яка проблема.
Створив додаток з локальної бази даних.
Запускаю додаток, дальше відкриваю базу даних все нормально. Та коли хочу відкрити іншу базу даних вибиває помилка "що операція не дозволяється якщо об'єкт відкрито"

procedure TModulA_DMd.MMOpenB_MItClick(Sender: TObject);
var
  I:integer;
begin
  for I := 0 to ModulA_DMd.ComponentCount - 1 do//Для початку деактивовую таблиці та видаляю назви таблиць
          if ModulA_DMd.Components[i] is TADOTable then
            begin
              (ModulA_DMd.Components[i] as TADOTable).Active:=False;
              (ModulA_DMd.Components[i] as TADOTable).TableName:='';
            end;
  with  ModulA_DMd.ADOConnection1 do//Видаляю старий шлях до бази даних та закриваю її
    begin
      ConnectionString:='';
      Connected:=False;
    end;
  if ModulA_DMd.OpenDialog1.Execute then//Записую в поле новий щлях до бази даних
    begin
      Setting_Fr.PartBs_Ed.Text:=ModulA_DMd.OpenDialog1.FileName;
    end;
  ModulA_DMd.OpenDialog1.FileName:='';//Очищаю шлях в діалозі
  with  ModulA_DMd.ADOConnection1 do//Встановлюю значення для ADOConnection1
    begin
      LoginPrompt:=False;
      Provider:='Microsoft.Jet.OLEDB.4.0';
      Mode:=cmShareDenyNone;
      ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
                        Setting_Fr.PartBs_Ed.Text+';Persist Security Info=False';
      Connected:=True;
    end;
  for I := 0 to ModulA_DMd.ComponentCount - 1 do//Встановлюю значення для фсіх таблиць
          if ModulA_DMd.Components[i] is TADOTable then
            begin
              (ModulA_DMd.Components[i] as TADOTable).CursorType:=ctStatic;
              (ModulA_DMd.Components[i] as TADOTable).Connection:=ADOConnection1;
            end;   
  with  ModulA_DMd do//Встановлюю назви таблиць
    begin
      Main_ADOTb.TableName:='AllMain';
      //Main_ADOTb.TableName:='Amplya';
      AvtorLine_ADOTb.TableName:='AvtorLine';
      AvtorRelLine_ADOTb.TableName:='AvtorRelLine';
      AvtorUkrLine_ADOTb.TableName:='AvtorUkrLine';
      Bitn_ADOTb.TableName:='Bitn';
      BitnLine_ADOTb.TableName:='BitnLine';
      Category_ADOTb.TableName:='Category';
      CategoryLine_ADOTb.TableName:='CategoryLine';
      Korporation_ADOTb.TableName:='Korporation';
      Lang_ADOTb.TableName:='Lang';
      LangLine_ADOTb.TableName:='LangLine';
      Mitka_ADOTb.TableName:='Mitka';
      NamePrg_ADOTb.TableName:='NamePrg';
      OfSite_ADOTb.TableName:='OfSite';
      OP_ADOTb.TableName:='OP';
      OPLine_ADOTb.TableName:='OPLine';
      Person_ADOTb.TableName:='Person';
      Poster_ADOTb.TableName:='Poster';
      Skrinshot_ADOTb.TableName:='Skrin';
      Statys_ADOTb.TableName:='Statys';
      Type_ADOTb.TableName:='Type';
      Version_ADOTb.TableName:='Version';
      WebSite_ADOTb.TableName:='Website';
    end;
  for I := 0 to ModulA_DMd.ComponentCount - 1 do//Активую всі таблиці
          if ModulA_DMd.Components[i] is TADOTable then
            begin
              (ModulA_DMd.Components[i] as TADOTable).Active:=True;
            end;
end;

Хоча закриваю ADOConnection1 та сам файл бази даних залишається відкритим підкажіть будь ласка як ще зробити.
Буду дуже вдячний.

2

Re: Помилка при повторному відкритті файлу додатком (Delphi)

Не знаю чи допоможе, але спробуйте закрити базу методом cancel

3 Востаннє редагувалося Romanvolja (03.02.2017 21:22:20)

Re: Помилка при повторному відкритті файлу додатком (Delphi)

Betterthanyou написав:

Не знаю чи допоможе, але спробуйте закрити базу методом cancel

Щиро вам вдячний, Ви мені дуже допомогли.
Мені просто потрібно було вставити між 28-м і 29-м рядком це:

KeepConnection:=False;

Дякую за допомогу. Тепер все працює як треба( *YAHOO* ).

4

Re: Помилка при повторному відкритті файлу додатком (Delphi)

З тими ADO треба дуже обережно працювати, бо вони надто розумні, а налаштувань у них мало. Добре, що в останніх версіях FireDAC з'явився, він більш передбачуваний.