Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
ВнизAutoINC поля и Interbase Найти похожие ветки
← →
msoftware (2003-05-02 04:54) [0]Приветствую! В б.д INterBase имеется автоприращаемое поле, для него естественно генератор и триггер. Из компонентов использую TIBTable, TIBUpdateSQl, TIBTransaction,TIBDataBase, TDataSource.
При добавлении новой записи в базу данных, возникает ошибка, которая просит чтобы юзер внес значение в это AutoINC поле, хотя значение этого поля должно само генерироваться. Понятно что генерация происходит только после метода POST, а пока AutoINC поле пусто сервер не дает команду на выполнение POST. Можно было бы сделать генерируемое поле необязательным, но на него ссылается первичный ключ. Посоветуйте как быть
← →
Sergey Masloff (2003-05-02 09:21) [1]Компоненты доступа закачивают метаданные из бызы и для ключа ставят свойство Required. То есть пока его не введешь... Решение - снять этот флажок вручную.
TField -> property Required: Boolean;
← →
Vlad1 (2003-05-02 20:45) [2]Попробуй TIBQUERY, всё делай через ExecSQL - нахрен тебе TIBTable,TIBUpdateSQL? - и проблем не будет.
← →
Zacho (2003-05-02 21:08) [3]
> Vlad1 © (02.05.03 20:45)
Для выполнения запросов есть специальный компонент - TIBSQL, лучше пользоваться им, чем TIBQuery и ExecSQL
А вообще, насколько я понял, msoftware © нужен просто редактируемый DataSet. Для этого лучше использовать TIBDataSet или TIBQuery. Для получения значения первичного ключа новой записи в этом случае можно воспользоваться св-вом GeneratorField.
И еще могу посоветовать автору вопроса прочитать статью http://www.ibase.ru/devinfo/generator.htm
← →
Zacho (2003-05-02 21:25) [4]Еще немного добавлю.
Главная проблема msoftware © в том, что он присваивает значение ПК для новой записи в триггере. Как следствие из этого - приложение не может узнать ПК новой записи. Стандартный подход - значение в поле ПК заносит именно приложение, а не триггер. Это можно сделать с помощью св-ва GeneratorField или, например, в событии OnNewRecord выполнить запрос SELECT GEN_ID(MY_GEN,1) FROM RDB$DATABASE и полученное значение присвоить нужному полю. Впрочем, как именно получать значение ПК и присваивать его есть несколько вариантов, главное - что присвоение происходит именно на клиенте, а не на сервере. Или для вставки новой записи используется ХП, которая и возвращает ПК.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c