![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;