Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 01:59   #1
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
Вопрос Firebird. Автоматическое внесение значения в поле при добовлении

Доброго времени суток товарищи!!!
Итак, я использую СУБД FIREBIRD 2.1. Для работы с ней пользуюсь компонентами вкладки InterBase. Пусть у нас есть таблица: P(a,b, id)
Поле a вводиться пользвателем. Значение поля b вводится нашей программой. Поле Id — primary key. Для отображения таблицы используем TIBQuery с прикрепленным к нему компонентом класса TIBUpdateSQLW.
У нас следующие запросы к БД:
1. на отображение данных
SELECT a,b, id FROM P
2. на изменение данных
update P
set
a = :a,
b = :b
where
ID = :OLD_ID
2. на вставку
insert into P
(a, b)
values
(:a, :b)

3. На обновление
SELECT a,b,id FROM P Where id=:OLD_Id
4. Удаление
delete from P
where
ID = :OLD_ID

Допустим нужно чтобы во всех следующих добавленных записях поле b имело, скажем, значение 5. Я вижу только один вариант: перевисывать каждый раз (ну когда значение меняется) запрос на вставку:
insert into P
(a, b)
values
(:a, 5)

Какие альтернативы товарищи??? ИМХО этот вариант не грациозен =)))
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 10.12.2010, 11:50   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

вопрос сам по себе "не грациозен"
как программа поймет когда нужно включить режим дефолтной вставки?
и какое дефолтное значение будет? оно будет одно и то же или иногда другое?

ваще-то в самой базе можно учесть дефолтность еще на стадии проектирования таблицы
Код:
field_name field_type default default_value
и при вставке просто в параметр отдавать нулл
soleil@mmc вне форума Ответить с цитированием
Старый 10.12.2010, 12:35   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

а интрукцию к СУБД почитать? в базе выставляешь default_value у поля например 5

если в insert не упомянуто поле с default_value то будет вставлено это самое default_value если упомянуто, то будет вставлено присвоенное ему значение.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 10.12.2010, 21:22   #4
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Я наверно не конца внятно выразился... пусть скажем в качестве значения поля b будет вводиться не всегда одно число... т.е. не всегда 5. Пользователь сам не может вводить значения поля b. Короче говоря про дефолтовые значения поля при создании таблицы мну знает (благо не дурак).
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 10.12.2010, 21:56   #5
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

ну можно так
Код:
procedure TForm3.pFIBDataSet1AfterInsert(DataSet: TDataSet);
begin
DataSet.FieldByName('поле').AsInteger:=strtoint(edit1.Text);
end;
vovk вне форума Ответить с цитированием
Старый 10.12.2010, 22:24   #6
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

ну как вариант можно :-)
Я вот кстате пытался замутить через свойтсво DefaultExpression поля но не получилось =(
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 10.12.2010, 22:45   #7
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

не вышло бы
Цитата:
DefaultExpression. Это свойство используется при Insert/Append новой
записи. (Эта опция вызывает дополнительные запросы к базе, с целью получения
текста значения по умолчанию)

прошу прощения был не прав поправился постом ниже

Последний раз редактировалось vovk; 11.12.2010 в 10:46.
vovk вне форума Ответить с цитированием
Старый 10.12.2010, 23:08   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от SNUPY Посмотреть сообщение
Я наверно не конца внятно выразился... пусть скажем в качестве значения поля b будет вводиться не всегда одно число... т.е. не всегда 5. Пользователь сам не может вводить значения поля b. Короче говоря про дефолтовые значения поля при создании таблицы мну знает (благо не дурак).
ну а мы чего - телепаты?
вот и программируй свои случаи
soleil@mmc вне форума Ответить с цитированием
Старый 11.12.2010, 00:46   #9
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Всем спасибо!!! =)
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 11.12.2010, 01:18   #10
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
не вышло бы
тут я был не прав на счёт DefaultExpression, перечитал хелп по фибам
в общем отключаем в опциях pFIBDataSet >Prepareoptions>pfImportDefaultValu es= false

потом в программе где нужно
Код:
pFIBDataSet1.FN('поле').DefaultExpression:=edit1.Text;
вот в общем исправился))
vovk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запись пустого значения в блоб поле в FireBird Lokos БД в Delphi 0 23.06.2010 07:01
Значения в поле подстановок зависят от значения в другом поле pyhtelka Microsoft Office Access 4 13.06.2010 10:42
Не обновляется поле при выборе значения Agapov_stas Microsoft Office Access 5 29.01.2010 10:29
автоматическое изменение значения intelx1989 Microsoft Office Access 1 12.01.2010 21:19
При добовлении записи в DBGrid выводит ошибку GhostBZ БД в Delphi 2 03.09.2009 15:46