- Это НЕ полный путь. смотрите док : http://docwiki.embarcadero.com/CodeExamples/Rio/en/FireDAC.MSAccess_Sample
- Я бы на ваши месте делал так что это путь
Add('DriverID=MSAcc');
Add('Database=x:\path_to_db\db.fdb');
читал программа из .ini файла
Add('DriverID=MSAcc');
Add('Database=x:\path_to_db\db.fdb');
читал программа из .ini файла
не видите разницу между этим и
?
@mari_rohan, а разве совет Алекса отсюда - FD connect как заменить абсолютный на относительный путь
(установить Connection в False и задать параметр Database в коде программы (на FormCreate) )
не помог?
Что именно “это”? В последнем коде автора он полный, просто не тот, что нужен ему )
Так а зачем заставлять людей писать путь если предполагалось, что БД лежит рядом с программой.
Разве что в ини по умолчанию использовать какую-нибудь свою “переменную” типа $APPDIR$/db/db.mdb
, которую потом в строке заменять программно при чтении из файла.
Либр база открыта другим процессом монопольно
Либо недостаточно прав
Да имя папки там не то.
Текст ошибки конечно странный, но вроде бы вполне возможная причина. 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:
…
- The database file simply does not exist.
непомог
как сделать чтобы читала из ини файла
Так проблема-то в чем именно сейчас? Я ж сказал уже 3 раза, укажите правильное имя папки.
открываю свойства базы данных там написан путь до базы данных вот он:
что в нем не хватает?
в папке db лежит база.
в папке debug экзешник.
На этом скриншоте нет такого имени папки.
А надпись расположение и дальше строчка?
отож , db<>bd ))
Ну вообщем ошибочка вышла в свойствах правильный путь к базе
Так теперь работает?)
Короче ладно…! Я рады уважение участников этого форума и рады уважение вас буду демонстрировать мои готовы пример… Я тоже был новичок мне тоже помогли много раз… Именно [Аватар] мне много раз помог.! и совесть меня не позволяет не показать всё подробно.!
Что касается [mari rohan] Я не увидел от него огромное желание достичь цель. Ну ладно
Приступим: Вот мои ini файл Connect.ini где написано путь файла и при необходимости можно его изменить
uses
IniFiles,
//------------------
var
Form1: TForm1;
//--- ini
Ini: TIniFile;
{ Private declarations }
procedure Connect;
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;
procedure TForm1.FormShow(Sender: TObject);
begin
Connect();
end;
Надо либо .Clear
перед этим, либо оставить свойство пустым на форме, иначе вроде будет использоваться старое (первое) значение.
Я его быстро собрал и всё работает… Может что то “мелочи” упустил. Но надеюсь вы меня этого простите
Смотрел про 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 запроса.
Так и зачем он тогда тут?))
Clear нужен если в Params уже есть например Database=, потому что тогда Add добавит еще один Database= в конец, но использоваться будет первый.
Или писать через Values и т.п. как выше.