Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

AutoINC поля и Interbase [D6, IB6.x]


msoftware ©   (2003-05-02 04:54:00) 

Приветствую! В б.д INterBase имеется автоприращаемое поле, для него естественно генератор и триггер. Из компонентов использую TIBTable, TIBUpdateSQl, TIBTransaction,TIBDataBase, TDataSource.
При добавлении новой записи в базу данных, возникает ошибка, которая просит чтобы юзер внес значение в это AutoINC поле, хотя значение этого поля должно само генерироваться. Понятно что генерация происходит только после метода POST, а пока AutoINC поле пусто сервер не дает команду на выполнение POST. Можно было бы сделать генерируемое поле необязательным, но на него ссылается первичный ключ. Посоветуйте как быть


Zacho   (2003-05-02 21:25:00) [1]

Еще немного добавлю.
Главная проблема msoftware © в том, что он присваивает значение ПК для новой записи в триггере. Как следствие из этого - приложение не может узнать ПК новой записи. Стандартный подход - значение в поле ПК заносит именно приложение, а не триггер. Это можно сделать с помощью св-ва GeneratorField или, например, в событии OnNewRecord выполнить запрос SELECT GEN_ID(MY_GEN,1) FROM RDB$DATABASE и полученное значение присвоить нужному полю. Впрочем, как именно получать значение ПК и присваивать его есть несколько вариантов, главное - что присвоение происходит именно на клиенте, а не на сервере. Или для вставки новой записи используется ХП, которая и возвращает ПК.


Zacho   (2003-05-02 21:08:00) [2]


> Vlad1 © (02.05.03 20:45)

Для выполнения запросов есть специальный компонент - TIBSQL, лучше пользоваться им, чем TIBQuery и ExecSQL
А вообще, насколько я понял, msoftware © нужен просто редактируемый DataSet. Для этого лучше использовать TIBDataSet или TIBQuery. Для получения значения первичного ключа новой записи в этом случае можно воспользоваться св-вом GeneratorField.
И еще могу посоветовать автору вопроса прочитать статью http://www.ibase.ru/devinfo/generator.htm


Vlad1   (2003-05-02 20:45:00) [3]

Попробуй TIBQUERY, всё делай через ExecSQL - нахрен тебе TIBTable,TIBUpdateSQL? - и проблем не будет.


Sergey Masloff   (2003-05-02 09:21:00) [4]

Компоненты доступа закачивают метаданные из бызы и для ключа ставят свойство Required. То есть пока его не введешь... Решение - снять этот флажок вручную.
TField -> property Required: Boolean;


Наверх

Титульная страница Поиск, карта сайта Написать письмо