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

Судя по “нет данных” там что-то некорректное получилось.

Ну или может просто папка с БД лежит не в папке программы + выведите куда-нибудь GetCurrentDir, чтобы узнать текущую директорию, вдруг там что-то не то.

image

Так а папка с БД лежит в ней?)

1 лайк

Если FireDAC то надо полностью указать путь http://docwiki.embarcadero.com/CodeExamples/Rio/en/FireDAC.MSAccess_Sample
Если через ADO то там не обязательно - главное что файл БД находилось тот папке где проект


Почему же не выбрать ADO если вы работайте Access -е

1 лайк

Тогда вам dbGo

1 лайк

а, точно.


Вообще там же не сложно программно путь указать.

Вторая ссылка в гугле: https://stackoverflow.com/a/30822412/964478

  1. Поставить Connection = False на форме (чтобы оно само не подключалось при запуске)

  2. Где угодно в коде (FormCreate, …):

    AppDirPath := ExtractFilePath(ParamStr(0));
    DatabaseFilePath := AppDirPath + 'db\Users.mdb';
    
    ...
    
    FDConnection1.Params.Values['Database'] := DatabaseFilePath;
    
    FDConnection1.Connected := True;
1 лайк
  1. и можно ещё так что программа читал это параметры на пример: из .ini файла , на будущее если программа будет на другом ПК и -или БД на другом месте, поменять параметры .ini файле и программа будет работать… интернете много примеров "Delphi работа с ini файлами " можно его допилить .
  2. Можно ещё создать программу для шифрование -дешифровка .ini файлов чтобы всех не мог почитать параметры из ini файлов… Надо ?! Пожалуйста: IdEncoderXXE1 и IdDecoderXXE1 много чего можно придумать и создать :wink: Shifr
1 лайк

это там где лежит программа потом еще не большой хвостик bd\Users.mdb

вот

procedure TForm2.FormCreate(Sender: TObject);
var
DatabaseFilePath, AppDirPath:String;
begin
AppDirPath := ExtractFilePath(ParamStr(0));
DatabaseFilePath := AppDirPath + 'db\Users.mdb';
FDConnection1.Params.Values['Database'] := DatabaseFilePath;
FDConnection1.Params.DriverID:='MSAcc';
FDConnection1.Params.Values['StringFormat']:='sfANSI';
FDConnection1.Params.Values['ReadOnly']:='false';
FDConnection1.LoginPrompt := False;

FDConnection1.Connected:=true;
form2.FDQuery1.Active:=true;
end;

что и получилось вот что
image

не вышло ado сейчас не нужно. Нужен FDConnection.

Всё что написано выше это всё для вас … перечитайте. Нужно и применяйте

1 лайк

Можно не писать всё остальное если вы уже указали это на форме и не очищали тут (.Clear).

И у вас не такое имя папки было.

1 лайк

вот полный путь
image

  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 лайк

непомог