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

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

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

Ответить
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

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

Сообщение Andreich »

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

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

select * from NEW_TABLE;

В чем может быть причина такого поведения DBGrid и и как принудительно сохранять изменения в редактируемой БД?
Буду признателен за любой совет/ссылку по теме.
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

SQLQuery.InsertSQL:= ???
SQLQuery.updateSQL:= ???
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

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

А можно про эти свойства чуть подробнее? (ничего тута не писал)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Сообщение Andreich »

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

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

Сообщение Vadim »

Andreich
А свойтву IBConnection.Transaction Вы присвоили компонент SQLTransaction?
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

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

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

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

Почему Дельфи? Она сама сгенирирует нужный код. Ну и потом в Lazarus прописывает почти то же самое, только в рукопашную. Автоматического генератора в Lazarus, увы, нет. Если получится в Дельфи, то портрировать в Лазаря то же получится. Удачи.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

У компонентов ZEOS есть. :)
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

UIB+FBDataSet
генерируем запросы на обновление и т.д.
AutoCommit=true - и всё в шоколаде.
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

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

alexs, это все знают! давай обнову Rx грид!!! :D
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

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 поновее, но не думаю что причина в нем.
62mkv
новенький
Сообщения: 10
Зарегистрирован: 27.03.2010 13:41:16
Откуда: Барнаул

Сообщение 62mkv »

чем дело кончилось ? у меня та же самая проблема: viewtopic.php?f=5&t=5053&p=49436#p49436
Ответить