Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Вниз

Как работает IBDataSet   Найти похожие ветки 

 
lejik   (2002-09-27 12:57) [0]

Доброе время суток!
У меня возникла следующая проблемка. Использую компонент IBDataSet у которого в свойстве InsertSQL прописано что-то типа INSERT INTO TABLE (NAME) VALUES(NILL). В таблице есть еще поле ID значение которого привязано к генератору, существут триггер BEFORE INSERT в котором значению поля ID присвоивается значение. Так вот при вызове метода IBDataSet.Insert а затем IBDataSet.ApplyUpdates вылетае ошибка что поле ID должно иметь значение (оно в таблице NOT NULL), почему не срабатывает триггер, в чем ошибка? Заранее спасибо!


 
SergeyDove   (2002-09-27 13:05) [1]

Привет.
Установи параметр Required этого поля в false, это в Fields Editor. После этого BDE будет считать, что это поле не обязательно для ввода.
Пока.


 
Johnmen   (2002-09-27 13:31) [2]

>SergeyDove © (27.09.02 13:05)

Причем здесь BDE ????????/

>lejik ©

Присвой полю ID значение 0 перед вставкой.


 
Wolf226   (2002-09-27 13:54) [3]

SergeyDove тоже прав, кроме того, что это не BDE дело.


 
lejik   (2002-09-27 14:19) [4]

> Johnmen ©
А как же триггер????
Ведь насколько я понимаю работу компонента IBDataSet после вызова метода IBDataSet.Insert должен выполняться SQL запрос который прописан в InsertSQL, а тот в свою очередь активизирует триггер. Связка TQuery и UpdateSQL работает в этом случае нормально но хотелось бы использовать IBDataSet


 
Johnmen   (2002-09-27 14:35) [5]

>lejik © (27.09.02 14:19)
>> Johnmen ©
>А как же триггер????

А что с триггером ? Переопределит он значение 0 на значение генератора и все дела...



 
lejik   (2002-09-28 12:09) [6]

> Johnmen ©
А что с триггером ?

Ни фига не получается :-((((. Значение в поле заносится, но триггер один фиг не срабатывает, т.е. как я понимаю не срабатывает SQL запрос который прописан в InsertSQL.


 
evgeg   (2002-09-28 12:36) [7]

> lejik © (28.09.02 12:09)

Как вы определяете, что триггер не сработал?


 
lejik   (2002-09-28 13:11) [8]

Значение поля ID остается равным 0


 
kaif   (2002-09-28 13:34) [9]

Дело в том, что у Вас после вставки TIBDataSet должен как-то получить значение поля ID для того, чтобы вызвать RefreshSQL для вставленной строки (что он делает по умолчанию).
Поэтому присвоение значения генератора полю ID в триггере - не лучшее решение. По крайней мере, если у Вас нет альтернативного ключа, с помощью которого можно было бы вписать корректный SELECT в RefreshSQL...
Я вижу здесь 2 выхода:

1. Иметь альтернативный ключ и делать присвоение ID в триггере, а в RefresSQL вписать SELECT записи где в WHERE стоят условия выборки по альтернативному ключу (не ID).

2. Вообще не присваивать полю ID значение в триггере, а присваивать в InsertSQL, как это обычно делается компонентами палитры IBX. Для этого нужно присвоить значение свойству Generator в IBDataSet. Я обычно так и делаю. В этом случае IBDataSet сначала сам запрашивает новое значение генератора, затем присваивает полученное значение полю ID вставляемой строки в наборе, а затем уже делает Post. Тогда RefreshSQL может опираться на уже известное значение ID.


 
lejik   (2002-09-28 13:39) [10]

> kaif ©
Спасибо за помощь! Единственный вопросик. При вызове метода IBDataSet.Insert будет ли выполняться SQL оператор прописанный в свойстве InsertSQL.


 
kaif   (2002-09-29 14:53) [11]

Нет, при вызове метода Insert SQL оператор прописанный в свойстве InsertSQL вызываться не будет. Метод Insert просто переводит TDataSet в режим State = dsInsert. Ведь пользователь может отказаться от сохранения новой записи вызовом метода TDataSet.Cancel.
SQL-оператор, прописанный в InsertSQL, сработает в тот момент, когда происходит DataSet.Post, если DataSet к этому времени находится в состоянии State = dsInsert.
Посмотри в Help состояния свойства State, которые принимает любой DataSet или любой его потомок (TIBDataSet, TIBQuery, TIBTable) и ты все сам поймешь.
А еще посмотри исходные тексты класса TIBDataSet и проследи, какой метод что вызывает.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-68835
alord
2002-10-09 11:17
2002.10.21
Печать HTML файла


1-68801
Blacker77
2002-10-08 05:03
2002.10.21
Сохранение массива Record ов в файл


1-68847
Sergey_Elf
2002-10-10 12:56
2002.10.21
CreateProcess не работает без полного пути к исп.файлу, а надо бы


1-68723
BillyJeans
2002-10-11 08:24
2002.10.21
Не могу создать TQRLabel в QReport...


1-68751
REA
2002-10-09 12:26
2002.10.21
Wizards





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский