Базы Данных и Lazarus

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

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

Ответить
lLexl
незнакомец
Сообщения: 4
Зарегистрирован: 06.06.2009 17:19:42

Базы Данных и Lazarus

Сообщение lLexl »

Доброго времени суток всем!
Вот, столкнулся с такой проблемой в Лазарусе. Нужно написать нечто вроде коротких уроков по БД (ФБ) в Лазарусе. Сам немного знаю Делфи, поэтому отталкиваюсь от него. В принципе, в уроках нужно упомянуть редактирование БД и запросы. Сразу столкнулся с первой неприятностью. Знакомого класса TTable нету =(. Как аналог использую SQLQuery с запросом "select * from xxx". Прочитал, что необходим метод ApplyUpdates в случае этого запроса для сохранения данных, которые ввел через Лазарус, но он не помогает =( Все данные, которые я ввожу проподают как только я закрываю приложение =( Попробовал поискать другие варианты, самое ближнее это TDbf, но он не годится для ФаерБерда. Насколько понял он даже не может отличить в одной БД несколько таблиц.

Попробовал поставить Датасет уважаемого Alexs'а, но мой Лазарус (запускаю с w7) отказывается устанавливать UIBlaz.

Очень прошу помочь с данной неприятнотностью и заранее благодарю за помощь =)
Аватара пользователя
EmeraldMan
постоялец
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород
Контактная информация:

Сообщение EmeraldMan »

К IBConnection подключаем SQLTransaction.
Для сохранения данных в базе требуется две операции

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

Query.ApplyUpdates;
SQLTransaction.Commit; 

Вот так должно работать.
lLexl
незнакомец
Сообщения: 4
Зарегистрирован: 06.06.2009 17:19:42

Сообщение lLexl »

Вы себе даже не представляете, как я вам благодарен, EmeraldMan! =)
Я нечто похожее подозревал, исходя из метода исключений. И как раз начал читать про трансакции, но все равно не дощел бы до этого метода =)
Но это решение о двух концах =) После подтверждения трансакции приложение отконнективается от БД и грид умирает, немного не красиво, но терпимо =)
Еще раз спасибо, EmeraldMan!

Буду надеятся, что последущие вопросы смогу решить сам =)
ЗЫ
А насчет невозможности скомпилировать UIB 1.00 никто не подскажет? =) Скачал, распоковал, указал, а он не ставится, а из-за него все остальное (
Компиляцию останавливает на строчке
SQL_TIMESTAMP : EncodeTimeStamp(Value, PISCTimeStamp(sqldata));
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

lLexl писал(а):После подтверждения трансакции приложение отконнективается от БД и грид умирает, немного не красиво, но терпимо

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

SQLTransaction1.CommitRetaining;

вместо

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

SQLTransaction1.Commit;


Добавлено спустя 8 минут 24 секунды:
А вообще, как я понимаю

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

(Dataset as TSQLQuery).ApplyUpdates;
нужно вписать один раз в обработчик события BeforeClose того же SQLQuery1;
а

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

SQLTransaction1.Commit;
в BeforeDisconnect IBConnection1.
lLexl
незнакомец
Сообщения: 4
Зарегистрирован: 06.06.2009 17:19:42

Сообщение lLexl »

Насчет SQLTransaction1.CommitRetaining; я уже прочитал, но все равно благодарю за помощь =)
Их я сделал просто как кнопку Save. Довольно удобно получилось )
Сейчас проблема уже в другом =( Лазарус отказывается редактировать из грида значение ячейки. После .ApplyUpdates вылетает ошибка SQL. Насколько понял, ему не нравится то, что я не добовлял новые ячейки, а изменял старые =(
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

UIB - вот основная страницв проекта http://www.progdigy.com/
отсюда (а ещё лучше из их svn) брать исходники
там давно версия 2.1
1-я уже не скомпилируется
lLexl
незнакомец
Сообщения: 4
Зарегистрирован: 06.06.2009 17:19:42

Сообщение lLexl »

Вся проблема в том, что я и скачал оттуда. Версия UIB 2.1, но когда в лазарусе выбираю пакет UIBlaz, там сообщение, пакет UIBlaz 1.0 помечен на установку, хотите пересобрать лазарус? Нажимаю да и он мне выдает ошибку и выделяет ту самую строку кода.
Версия лазаруса lazarus-0.9.26.2-fpc-2.2.2-win32, пробовал ставить 24, там UIB встал, а вот Ваш DataSet_1_28 все равно не захотел =)
Ответить