Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Использование IBDataSet


Автор: Striderr 24.11.2009, 11:45
Всем доброго времени суток. 

Пробую использовать компонент IBDataSet для взаимодействия с таблицами БД.
Так как работаю с ним первый раз, то ошибки пока не знакомы. 

Существует к примеру таблица TOVAR.
Для отображения ее в DBGrid ипользовал стандартную связку: IBDataBase+IBTransaction+IBDataSet+DAtaSource+DBGrid

В EditSQL у IBDataSet прописал select * from TOVAR. Потом сгенерировал запрос на добавление:

Код

insert into TOVAR
  (NAME_TOV, TIP_TOV, PRICE_TOV_ZAK, COUNT_TOV, PROIZV_TOV)
values
  (:NAME_TOV, :TIP_TOV, :PRICE_TOV_ZAK, :COUNT_TOV, :PROIZV_TOV)


Пробую сделать добавление. В обработчике нажатия кнопки "Добавить" пишу следующее:
Код

 IBDataSet1->InsertSQL;
 IBDataSet1->FieldByName("NAME_TOV")->AsString = Edit5->Text;
 IBDataSet1->FieldByName("TIP_TOV")->AsString = Edit6->Text;
 IBDataSet1->FieldByName("PRICE_TOV")->AsString = Edit7->Text;
 IBDataSet1->FieldByName("COUNT_TOV")->AsString = Edit8->Text;
 IBDataSet1->FieldByName("PROIZV_TOV")->AsString = Edit9->Text;
 IBDataSet1->Open();
 IBDataSet1->Post();


Чувствую, что где-то может быть ошибка, плюс при попытке добавления появляется ошибка со словами "Not in Edit Mode".

Пожалуйста, помогите разобраться. 

Автор: Striderr 24.11.2009, 12:13
Немножко продвинулся. 
Добавил перед строчку IBDataSet1->Edit(); перед
IBDataSet1->InsertSQL;  

Добавляет, но по несколько раз и если перейти в конец DBGrid, то наверх уже почему то подняться нельзя. Хоть свойство UniDirectional у IBDataSet установлено в True.

Что-то с айдишниками упустил наверно??

Автор: Striderr 24.11.2009, 12:35
Исправил код добавления:

Код

 IBDataSet1->Open();
 IBDataSet1->Insert();
 IBDataSet1->FieldByName("NAME_TOV")->AsString = Edit5->Text;
 IBDataSet1->FieldByName("TIP_TOV")->AsString = Edit6->Text;
 IBDataSet1->FieldByName("PRICE_TOV_ZAK")->AsString = Edit7->Text;
 IBDataSet1->FieldByName("COUNT_TOV")->AsString = Edit8->Text;
 IBDataSet1->FieldByName("PROIZV_TOV")->AsString = Edit9->Text;
 IBDataSet1->Post();


Все добавляет. Только почему то DBGrid стал чудить. 
При просмотре до конца таблицы все идет нормально. Записи не дублируются. 
Однако если потом попробовать подняться наверх, сам скролл поднимается совсем не намного, после чего опять опускается, то есть подняться нельзя. Плюс все записи становятся многократно дублированными. 

Почему это происходит? 

Автор: Striderr 25.11.2009, 20:45
Разговариваю сам с собой...
Благодарю за поддержку smile  
В общем свойство UniDirectional надо было как раз в False устанавливать, а не в True. 

Автор: Lowrad 13.1.2010, 10:26
Могу только сказать "спасибо". 
мне помогли твои размышления...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)