В Delphi подключение к базе данных во время выполнения

#delphi

#delphi

Вопрос:

Я занят проектом, в котором база данных должна быть встроена таким образом, чтобы, если ее нужно скопировать на любой компьютер, вы могли запустить ее, не устанавливая соединение с базой данных снова. Я пробовал это :

 path:=extractFilePath('MEDA_p.exe');
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= ' path 'dbMEDA.accdb; Persist Security info=false';
dmMEDA.conMeda.Connected:=true;
  

Но продолжайте получать ошибки «переполнения стека». Или, если я сделаю это:

 dmMeda.conMEDA.open;
path:=extractFilePath('MEDA_p.exe');
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= ' path 'dbMEDA.accdb; Persist Security info=false';
dmMEDA.conMeda.Connected:=true;
dmMEDA.conMeda.close;
  

Я получаю «Операция не разрешена, когда объект открыт».

Любая помощь?

Обновить:

Я попробовал некоторые предложения, такие как добавление двойных кавычек и использование connection и установка его false, а затем true, но когда я пытаюсь сделать таблицы (активными) true, я получаю еще одну «ошибку переполнения стека»

 dmMEDA.tbllogs.Active:=true;
  

Что мне делать?

Комментарии:

1. Вы открыли соединение в IDE? Если это так, установите для него значение active = false в IDE перед запуском программы.

2. Я не знаю, для чего предназначена эта переменная path, но если вы собираетесь использовать ее как путь к записываемым данным, это несчастный случай, ожидающий своего часа. Не предполагайте, что вы можете записывать в папку, в которой находится приложение.

Ответ №1:

Ваша последовательность событий неверна во втором блоке. Вам нужно закрыть соединение, внести изменения, а затем снова открыть соединение.

 dmMeda.conMEDA.Connected := False;
path:=extractFilePath(Application.ExeName);
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= ' path 'dbMEDA.accdb; Persist Security info=false';
dmMEDA.conMeda.Connected:=true;
  

Обратите внимание, что если путь к приложению может содержать пробелы, вам также может потребоваться заключить его в двойные кавычки.

 dmMeda.conMEDA.Connected := False;
path := extractFilePath(Application.ExeName);
dmMEDA.conMeda.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0; Data Source= "'   path   'dbMEDA.accdb"; Persist Security info=false';
dmMEDA.conMeda.Connected := True;
  

Комментарии:

1. Путь требует двойных кавычек, у меня была такая проблема в прошлом.