как изменить путь к базе данных из программы? (при запуске)
Модератор: Модераторы
-
midisa
- новенький
- Сообщения: 95
- Зарегистрирован: 13.06.2013 18:27:53
- Откуда: Omsk
- Контактная информация:
как изменить путь к базе данных из программы? (при запуске)
Сделал свою первую программу на фри паскале.
Но моя программа запускается только по указанному пути (где лежит проект).
Как сделать так, чтобы программа могла запускаться из любой папки?
ОС Linux Fedora 18 64bit.
я в событие OnShow формы приложения, написал эту строчку:
DataModule1.ZConnection1.Database:=GetCurrentDirUTF8+'/db.sqlite';
но программа пытается какие то library, хотя проект собран как релиз без отладочной информации и стоит галочка вырезать символы из запускаемого файла (в общем сделано по инструкции на wiki).
Помогите пожалуйста разобраться.
Заранее спасибо.
Но моя программа запускается только по указанному пути (где лежит проект).
Как сделать так, чтобы программа могла запускаться из любой папки?
ОС Linux Fedora 18 64bit.
я в событие OnShow формы приложения, написал эту строчку:
DataModule1.ZConnection1.Database:=GetCurrentDirUTF8+'/db.sqlite';
но программа пытается какие то library, хотя проект собран как релиз без отладочной информации и стоит галочка вырезать символы из запускаемого файла (в общем сделано по инструкции на wiki).
Помогите пожалуйста разобраться.
Заранее спасибо.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
В событии создания DataModule прописать
И DataModule1 поставить первым в списке автосоздаваемых модулей
Код: Выделить всё
ZConnection1.Database:=ExtractFilePath(Application.ExeName)+'db.sqlite';И DataModule1 поставить первым в списке автосоздаваемых модулей
-
midisa
- новенький
- Сообщения: 95
- Зарегистрирован: 13.06.2013 18:27:53
- Откуда: Omsk
- Контактная информация:
чего то не получается.
добавил строчку в событие бефореконнект, в датамодуле.
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.
Может не туда прописал?
добавил строчку в событие бефореконнект, в датамодуле.
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.
Может не туда прописал?
Может быть, так пойдёт:
Код: Выделить всё
ZConnection1.Database:=ExtractFilePath(Application.ExeName)+PathDelim+'db.sqlite';-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
svk12, ExtractFilePath
midisa, пропишите код смены файла БД в DataModule1.DataModuleCreate, а не в BeforeConnection
midisa, пропишите код смены файла БД в DataModule1.DataModuleCreate, а не в BeforeConnection
-
midisa
- новенький
- Сообщения: 95
- Зарегистрирован: 13.06.2013 18:27:53
- Откуда: Omsk
- Контактная информация:
Сделал как Вы сказали. Вот результат (он был и ранее)
--------------------
SQL Error: library routine called out of sequence.
------------------
Он не базу потерял, а что то другое. Если базу переименовать, то сообщение выглядит так:
------------------
SQL Error: SQL logic error or missing database.
------------------
В моем проекте, только два файла.
1. запускаемый файл.
2. база данных.
Я пробовал удалить все файлы из папки проекта. Как я понял он не может найти самого себя?
Перевел текст в трансляторе:
-------------------------------
Ошибка SQL: библиотечная процедура называется не по порядку.
------------------------------
Что это может означать? Есть у кого то мысли?
Добавлено спустя 1 час 19 минут 2 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
Прописываю жестко путь к базе.
Вижу что переменная имеет другое значение, а база как подключалась к той что указано в проекте в настройках так и подключается.
Уважаемые программисты, помогите пожалуйста.
Вы ведь храните настройки подключения к базе в каком то конфигурационном файле....
Где вы его подгружаете и как?
Буду признателен за Вашу помощь.
--------------------
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:='путь к базе';
Вижу что переменная имеет другое значение, а база как подключалась к той что указано в проекте в настройках так и подключается.
Уважаемые программисты, помогите пожалуйста.
Вы ведь храните настройки подключения к базе в каком то конфигурационном файле....
Где вы его подгружаете и как?
Буду признателен за Вашу помощь.
Насколько мне помнится Application.ExeName работает только под виндой, под линухом совсем другое используется для определения пути к исполняемому файлу.
Тут почитайте
Тут почитайте
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
midisa, выкладывайте ваш проект. У меня приведенный код работает.
SeZuka, Application.Exename отлично работает в линуксе, а в статье пример дан для конфигов.
SeZuka, Application.Exename отлично работает в линуксе, а в статье пример дан для конфигов.
-
midisa
- новенький
- Сообщения: 95
- Зарегистрирован: 13.06.2013 18:27:53
- Откуда: Omsk
- Контактная информация:
дело не в путях к базе. до базы еще не дошло, а ошибка сообщает что не может найти библиотеки для работы с sql. т.е. если программа линкует библиотеки себе, то программа не может найти саму себя. где то у нее в настройках прописано где брать эти библиотеки. Нужно указать путь к библиекам т.е. к самому запускаемому файлу. А какая это переменная я не знаю.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
midisa, проверяйте настройки компонентов Zeos или выкладывайте проект. Гадать на кофейной гуще дело не благодарное.
-
midisa
- новенький
- Сообщения: 95
- Зарегистрирован: 13.06.2013 18:27:53
- Откуда: Omsk
- Контактная информация:
Вот мой первый чудо проект на паскале: ftp://ftp.midisa.net/rukobludstvo/passw ... ord.tar.gz
P.S. Прошу не хихикать т.к. изучаю паскаль с суботнего вечера (всего три дня прошло).
P.S. Прошу не хихикать т.к. изучаю паскаль с суботнего вечера (всего три дня прошло).
midisa
В Вашей ОС установлена библиотека для работы с базой данных SQLite?
В Вашей ОС установлена библиотека для работы с базой данных SQLite?
-
midisa
- новенький
- Сообщения: 95
- Зарегистрирован: 13.06.2013 18:27:53
- Откуда: Omsk
- Контактная информация:
да конечно
Добавлено спустя 1 минуту 27 секунд:
Re: как изменить путь к базе данных из программы? (при запуске)
система фкдора 18 64 бита, бибоиотека /usr/lib64/libsqlite.so (пишу на память могу ошибится)
Добавлено спустя 1 минуту 10 секунд:
Re: как изменить путь к базе данных из программы? (при запуске)
проект когда откроете, переключите на дебаг версию иначе (в моем случае) релиз почему то не собирается, пока дебаг не собереш.
Добавлено спустя 2 минуты 2 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
задача сделать так, чтобы программа могла работать с любой папки. если например папку проекта переименовать, то программа отображает сообщение об ошибке.
Добавлено спустя 1 минуту 27 секунд:
Re: как изменить путь к базе данных из программы? (при запуске)
система фкдора 18 64 бита, бибоиотека /usr/lib64/libsqlite.so (пишу на память могу ошибится)
Добавлено спустя 1 минуту 10 секунд:
Re: как изменить путь к базе данных из программы? (при запуске)
проект когда откроете, переключите на дебаг версию иначе (в моем случае) релиз почему то не собирается, пока дебаг не собереш.
Добавлено спустя 2 минуты 2 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
задача сделать так, чтобы программа могла работать с любой папки. если например папку проекта переименовать, то программа отображает сообщение об ошибке.
Код рабочий. Поместил в свою папку, удалил из настроек ZConnection упоминание о БД, т.е. осталось только то, что в процедуре TDataModule1.DataModuleCreate(). База данных прекрасно открывается.
Вам задание: в репозитории Вашей ОС найдите любую программу, которая открывает базы SQLite, установите её у себя и попробуйте ей открыть Вашу базу.
Вам задание: в репозитории Вашей ОС найдите любую программу, которая открывает базы SQLite, установите её у себя и попробуйте ей открыть Вашу базу.
-
midisa
- новенький
- Сообщения: 95
- Зарегистрирован: 13.06.2013 18:27:53
- Откуда: Omsk
- Контактная информация:
спасибо за вашу помощь. вопрос закрыт.
Добавлено спустя 2 минуты 23 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
мой проект с сервера удален. всем большое спасибо кто помогал в изучении этого и других вопросов.
Добавлено спустя 2 минуты 23 секунды:
Re: как изменить путь к базе данных из программы? (при запуске)
мой проект с сервера удален. всем большое спасибо кто помогал в изучении этого и других вопросов.
