#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. Путь требует двойных кавычек, у меня была такая проблема в прошлом.