как изменить путь к базе данных из программы? (при запуске)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

как изменить путь к базе данных из программы? (при запуске)

Сообщение midisa »

Сделал свою первую программу на фри паскале.
Но моя программа запускается только по указанному пути (где лежит проект).
Как сделать так, чтобы программа могла запускаться из любой папки?

ОС Linux Fedora 18 64bit.

я в событие OnShow формы приложения, написал эту строчку:
DataModule1.ZConnection1.Database:=GetCurrentDirUTF8+'/db.sqlite';

но программа пытается какие то library, хотя проект собран как релиз без отладочной информации и стоит галочка вырезать символы из запускаемого файла (в общем сделано по инструкции на wiki).

Помогите пожалуйста разобраться.
Заранее спасибо.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

В событии создания DataModule прописать

Код: Выделить всё

ZConnection1.Database:=ExtractFilePath(Application.ExeName)+'db.sqlite';

И DataModule1 поставить первым в списке автосоздаваемых модулей
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

чего то не получается.
добавил строчку в событие бефореконнект, в датамодуле.
procedure TDataModule1.ZConnection1BeforeConnect(Sender: TObject);
begin
ZConnection1.Database:=ExtractFilePath(Application.ExeName)+'db.sqlite';
end;
переименовал проект и запустил.
Вижу это сообщение об ошибке:
SQL Error: library routine called out of sequence.
Press OK to ignore and risk data corruption.
Press Cancel to kill the program.

Может не туда прописал?
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Может быть, так пойдёт:

Код: Выделить всё

ZConnection1.Database:=ExtractFilePath(Application.ExeName)+PathDelim+'db.sqlite';
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

svk12, ExtractFilePath

midisa, пропишите код смены файла БД в DataModule1.DataModuleCreate, а не в BeforeConnection
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

Сделал как Вы сказали. Вот результат (он был и ранее)
--------------------
SQL Error: library routine called out of sequence.
------------------
Он не базу потерял, а что то другое. Если базу переименовать, то сообщение выглядит так:
------------------
SQL Error: SQL logic error or missing database.
------------------
В моем проекте, только два файла.
1. запускаемый файл.
2. база данных.

Я пробовал удалить все файлы из папки проекта. Как я понял он не может найти самого себя?
Перевел текст в трансляторе:
-------------------------------
Ошибка SQL: библиотечная процедура называется не по порядку.
------------------------------
Что это может означать? Есть у кого то мысли?

Добавлено спустя 1 час 19 минут 2 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
Прописываю жестко путь к базе.

Код: Выделить всё

ZConnection1.Database:='путь к базе';


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

Уважаемые программисты, помогите пожалуйста.
Вы ведь храните настройки подключения к базе в каком то конфигурационном файле....
Где вы его подгружаете и как?

Буду признателен за Вашу помощь.
SeZuka
постоялец
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Сообщение SeZuka »

Насколько мне помнится Application.ExeName работает только под виндой, под линухом совсем другое используется для определения пути к исполняемому файлу.
Тут почитайте
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

midisa, выкладывайте ваш проект. У меня приведенный код работает.
SeZuka, Application.Exename отлично работает в линуксе, а в статье пример дан для конфигов.
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

дело не в путях к базе. до базы еще не дошло, а ошибка сообщает что не может найти библиотеки для работы с sql. т.е. если программа линкует библиотеки себе, то программа не может найти саму себя. где то у нее в настройках прописано где брать эти библиотеки. Нужно указать путь к библиекам т.е. к самому запускаемому файлу. А какая это переменная я не знаю.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

midisa, проверяйте настройки компонентов Zeos или выкладывайте проект. Гадать на кофейной гуще дело не благодарное.
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

Вот мой первый чудо проект на паскале: ftp://ftp.midisa.net/rukobludstvo/passw ... ord.tar.gz

P.S. Прошу не хихикать т.к. изучаю паскаль с суботнего вечера (всего три дня прошло).
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

midisa
В Вашей ОС установлена библиотека для работы с базой данных SQLite?
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

да конечно

Добавлено спустя 1 минуту 27 секунд:
Re: как изменить путь к базе данных из программы? (при запуске)
система фкдора 18 64 бита, бибоиотека /usr/lib64/libsqlite.so (пишу на память могу ошибится)

Добавлено спустя 1 минуту 10 секунд:
Re: как изменить путь к базе данных из программы? (при запуске)
проект когда откроете, переключите на дебаг версию иначе (в моем случае) релиз почему то не собирается, пока дебаг не собереш.

Добавлено спустя 2 минуты 2 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
задача сделать так, чтобы программа могла работать с любой папки. если например папку проекта переименовать, то программа отображает сообщение об ошибке.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Код рабочий. Поместил в свою папку, удалил из настроек ZConnection упоминание о БД, т.е. осталось только то, что в процедуре TDataModule1.DataModuleCreate(). База данных прекрасно открывается.
Вам задание: в репозитории Вашей ОС найдите любую программу, которая открывает базы SQLite, установите её у себя и попробуйте ей открыть Вашу базу.
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

спасибо за вашу помощь. вопрос закрыт.

Добавлено спустя 2 минуты 23 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
мой проект с сервера удален. всем большое спасибо кто помогал в изучении этого и других вопросов.
Ответить