Изменение данных БД Firebird через DBGrid ?

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

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

Изменение данных БД Firebird через DBGrid ?

Сообщение Andreich » 21.02.2010 17:54:41

Никогда ранее не работал в Lazarus с базами данных,.. для знакомства решил начать с Firebird. Создал новый проект, разместил на форме IBConnection, SQLQuery, Datasource, SQLTransaction. Потом в нагрузку поставил DBGrid, связал все вместе запустил и порадовался - все открывается! Но дальше последовало разочарование - изменения вносимые в DBGrid после закрытия программы не сохраняются в базе. Что делать? Саму базу создавал в IBExpert, а в качестве скрипта SQLQuery.SQL использовал:

Код: Выделить всё
select * from NEW_TABLE;

В чем может быть причина такого поведения DBGrid и и как принудительно сохранять изменения в редактируемой БД?
Буду признателен за любой совет/ссылку по теме.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение dunin » 21.02.2010 18:27:19

SQLQuery.InsertSQL:= ???
SQLQuery.updateSQL:= ???
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение Andreich » 21.02.2010 18:35:57

dunin писал(а):SQLQuery.InsertSQL:= ???
SQLQuery.updateSQL:= ???

А можно про эти свойства чуть подробнее? (ничего тута не писал)
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение Vadim » 21.02.2010 19:30:12

Andreich
Судя по запросу, в DBGrid у Вас данные отображаются в том же виде, что и хранятся в таблице. Значит можно поступить просто:
В компоненте SQLTransaction свойству Action присвоить значение caCommit, тогда при переходе на другую запись, т.е. при перемещении с одной строки DBGrid на другую, изменённые данные будут сохранятся автоматически. Это удобно, когда другие пользователи этой же БД должны видеть каждое изменение.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение Andreich » 22.02.2010 14:26:03

Vadim
Попробовал выставить Action = caCommit, но безрезультатно, изменения не сохраняются. При следующем запуске приложения все выглядит как и прежде. Я даже пробовал удалять записи - они снова возвращаются после переподключения!

Где можно глянуть простейший пример работы с БД Firebird, так чтобы изменения сохранялись в базе?
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение Vadim » 22.02.2010 15:29:08

Andreich
А свойтву IBConnection.Transaction Вы присвоили компонент SQLTransaction?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение dunin » 22.02.2010 15:31:37

Andreich, долго расписывать. Я вот чего посоветую. Без всякой теории, не примере. Но... только если Дельфи есть под руками.

В дельфи:
- набросать на форму соответствующие компоненты из IBX;
- Подконектиться с БД;
- как источник данных использовать tDataSet;
- у tDataSet прописать SelectSQL;
- жмакаем правым кнопелем по Dataset и выбираем DataSet Editor.

Вываливается окно в котором можно сгенерировать InsertSQL, UpdateSQL и т.д. Разобраться не сложно. А еще лучше все довести до работоспособного состояния. Ну и про коммиты не забывать.

Почему Дельфи? Она сама сгенирирует нужный код. Ну и потом в Lazarus прописывает почти то же самое, только в рукопашную. Автоматического генератора в Lazarus, увы, нет. Если получится в Дельфи, то портрировать в Лазаря то же получится. Удачи.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение Vadim » 22.02.2010 15:43:01

dunin писал(а):Автоматического генератора в Lazarus, увы, нет.

У компонентов ZEOS есть. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение alexs » 22.02.2010 18:33:18

UIB+FBDataSet
генерируем запросы на обновление и т.д.
AutoCommit=true - и всё в шоколаде.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение dunin » 22.02.2010 20:27:31

alexs писал(а):UIB+FBDataSet
...

alexs, это все знают! давай обнову Rx грид!!! :D
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение Andreich » 23.02.2010 19:10:48

dunin писал(а):Без всякой теории, не примере. Но... только если Дельфи есть под руками.

В делфях получилось сгенерировать скрипты, но прикрутить их к лазарусу пока не получается. :(

Уже хотел было пойти по другому пути:
Код: Выделить всё
  DataSource1.DataSet.Edit;
  DataSource1.DataSet.FieldByName('ID').AsString:=Edit1.Text;
  DataSource1.DataSet.FieldByName('NAME').AsString:=Edit2.Text;
  DataSource1.DataSet.FieldByName('AGE').AsString:=Edit3.Text;
  DataSource1.DataSet.Post;

Изменения даже отражаются в дб-гриде, но в базу не хотят переноситься ни в какую.
Попробую скачать сборку Lazarus поновее, но не думаю что причина в нем.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Изменение данных БД Firebird через DBGrid ?

Сообщение 62mkv » 07.01.2011 20:31:17

чем дело кончилось ? у меня та же самая проблема: viewtopic.php?f=5&t=5053&p=49436#p49436
62mkv
новенький
 
Сообщения: 10
Зарегистрирован: 27.03.2010 14:41:16
Откуда: Барнаул


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru