FD connect как заменить абсолютный на относительный путь

  1. Это НЕ полный путь. смотрите док : http://docwiki.embarcadero.com/CodeExamples/Rio/en/FireDAC.MSAccess_Sample
  2. Я бы на ваши месте делал так что это путь
Add('DriverID=MSAcc');
    Add('Database=x:\path_to_db\db.fdb');

читал программа из .ini файла

1 лайк

не видите разницу между этим и

?

1 лайк

@mari_rohan, а разве совет Алекса отсюда - FD connect как заменить абсолютный на относительный путь
(установить Connection в False и задать параметр Database в коде программы (на FormCreate) )
не помог?

1 лайк

Что именно “это”? В последнем коде автора он полный, просто не тот, что нужен ему )

Так а зачем заставлять людей писать путь если предполагалось, что БД лежит рядом с программой.

Разве что в ини по умолчанию использовать какую-нибудь свою “переменную” типа $APPDIR$/db/db.mdb, которую потом в строке заменять программно при чтении из файла.

1 лайк

Либр база открыта другим процессом монопольно
Либо недостаточно прав

1 лайк

Да имя папки там не то.

Текст ошибки конечно странный, но вроде бы вполне возможная причина. https://stackoverflow.com/questions/26244425/general-error-unable-to-open-registry-key-temporary-volatile-from-access

This is the top-level error message produced by the Access Database Engine (a.k.a. “ACE”) ODBC driver when the current process is unable to open the Access database file for one of the following reasons:

  1. The database file simply does not exist.
1 лайк

непомог

как сделать чтобы читала из ини файла

Так проблема-то в чем именно сейчас? Я ж сказал уже 3 раза, укажите правильное имя папки.

1 лайк

открываю свойства базы данных там написан путь до базы данных вот он:
image
что в нем не хватает?
в папке db лежит база.
в папке debug экзешник.

На этом скриншоте нет такого имени папки.

1 лайк

А надпись расположение и дальше строчка?

отож , db<>bd ))

1 лайк

Ну вообщем ошибочка вышла в свойствах правильный путь к базе

Так теперь работает?)

1 лайк

Короче ладно…! Я рады уважение участников этого форума и рады уважение вас буду демонстрировать мои готовы пример… Я тоже был новичок мне тоже помогли много раз… Именно [Аватар] мне много раз помог.! и совесть меня не позволяет не показать всё подробно.!
Что касается [mari rohan] Я не увидел от него огромное желание достичь цель. Ну ладно
Приступим: Вот мои ini файл Connect.ini где написано путь файла и при необходимости можно его изменить

Acces_FDAC.rar (3.9 МБ)
1)

uses
     IniFiles,
  //------------------
var
  Form1: TForm1;
  //--- ini
   Ini: TIniFile;
    { Private declarations }
    procedure Connect;
  1. тело процедуры
procedure TForm1.Connect;
begin
  try
    Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'Connect.ini');  //
    FDConnection1.Connected := false;
    FDConnection1.Params.Add('DriverID=MSAcc');
    FDConnection1.Params.Add('Database=' + Ini.ReadString('Database','MyDatabase', ''));
    FDConnection1.Connected := true;
    FDQuery1.Open();
    ini.Free;
  except
    MessageDlg('Ошибка!!! программа не может подключится к базе данных',  mtError, [mbOK], 0);
    Application.Terminate;
  end;
end;
  1. вызов процедуры
procedure TForm1.FormShow(Sender: TObject);
begin
 Connect();
end;

1 лайк

Надо либо .Clear перед этим, либо оставить свойство пустым на форме, иначе вроде будет использоваться старое (первое) значение.

1 лайк

Я его быстро собрал и всё работает… Может что то “мелочи” упустил. Но надеюсь вы меня этого простите :wink:

1 лайк

Смотрел про Clear на сайте http://docwiki.embarcadero.com/CodeExamples/Rio/en/FireDAC.MSAccess_Sample

with dbMain do begin
  Close;
  // create temporary connection definition
  with Params do begin
    Clear;
    Add('DriverID=MSAcc');
    Add('Database=x:\path_to_db\db.fdb');
  end;
  Open;
end;

в коде dbMain это FDConnection1 и там Clear не нужно. Clear нужно только при FDQuery1 который предназначено для SQL запроса.

1 лайк

Так и зачем он тогда тут?))

Clear нужен если в Params уже есть например Database=, потому что тогда Add добавит еще один Database= в конец, но использоваться будет первый.

Или писать через Values и т.п. как выше.

1 лайк