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

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

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

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

Сообщение midisa » 17.06.2013 17:59:46

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

ОС Linux Fedora 18 64bit.

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

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

Помогите пожалуйста разобраться.
Заранее спасибо.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

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

Сообщение Padre_Mortius » 17.06.2013 20:21:15

В событии создания DataModule прописать
Код: Выделить всё
ZConnection1.Database:=ExtractFilePath(Application.ExeName)+'db.sqlite';

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

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

Сообщение midisa » 17.06.2013 20:28:40

чего то не получается.
добавил строчку в событие бефореконнект, в датамодуле.
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.

Может не туда прописал?
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

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

Сообщение svk12 » 17.06.2013 20:54:40

Может быть, так пойдёт:
Код: Выделить всё
ZConnection1.Database:=ExtractFilePath(Application.ExeName)+PathDelim+'db.sqlite';
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

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

Сообщение Padre_Mortius » 17.06.2013 21:11:10

svk12, ExtractFilePath

midisa, пропишите код смены файла БД в DataModule1.DataModuleCreate, а не в BeforeConnection
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение midisa » 18.06.2013 02:41:39

Сделал как Вы сказали. Вот результат (он был и ранее)
--------------------
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:='путь к базе';


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

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

Буду признателен за Вашу помощь.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

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

Сообщение SeZuka » 18.06.2013 07:31:24

Насколько мне помнится Application.ExeName работает только под виндой, под линухом совсем другое используется для определения пути к исполняемому файлу.
Тут почитайте
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

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

Сообщение Padre_Mortius » 18.06.2013 10:16:14

midisa, выкладывайте ваш проект. У меня приведенный код работает.
SeZuka, Application.Exename отлично работает в линуксе, а в статье пример дан для конфигов.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение midisa » 18.06.2013 11:38:57

дело не в путях к базе. до базы еще не дошло, а ошибка сообщает что не может найти библиотеки для работы с sql. т.е. если программа линкует библиотеки себе, то программа не может найти саму себя. где то у нее в настройках прописано где брать эти библиотеки. Нужно указать путь к библиекам т.е. к самому запускаемому файлу. А какая это переменная я не знаю.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

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

Сообщение Padre_Mortius » 18.06.2013 12:16:19

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

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

Сообщение midisa » 18.06.2013 12:22:58

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

P.S. Прошу не хихикать т.к. изучаю паскаль с суботнего вечера (всего три дня прошло).
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

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

Сообщение Vadim » 18.06.2013 12:27:50

midisa
В Вашей ОС установлена библиотека для работы с базой данных SQLite?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение midisa » 18.06.2013 12:29:58

да конечно

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

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

Добавлено спустя 2 минуты 2 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
задача сделать так, чтобы программа могла работать с любой папки. если например папку проекта переименовать, то программа отображает сообщение об ошибке.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

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

Сообщение Vadim » 18.06.2013 12:53:32

Код рабочий. Поместил в свою папку, удалил из настроек ZConnection упоминание о БД, т.е. осталось только то, что в процедуре TDataModule1.DataModuleCreate(). База данных прекрасно открывается.
Вам задание: в репозитории Вашей ОС найдите любую программу, которая открывает базы SQLite, установите её у себя и попробуйте ей открыть Вашу базу.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение midisa » 18.06.2013 12:59:36

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

Добавлено спустя 2 минуты 23 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
мой проект с сервера удален. всем большое спасибо кто помогал в изучении этого и других вопросов.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru