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

Вниз

Как при вставке задать полям знач-я по умолч., те что в БД заданы   Найти похожие ветки 

 
TheEd   (2006-02-22 02:24) [0]

Господа мастера, собственно subj.
Подробности: тип БД - IB7
поле имеет default-значение.
По идее, после вставки если юзверь ничего не ввёл оно должно быть присвоено, но это не происходит, более того, хотелось бы это значение получить сразу после вставки.

ps: ответ типа: задать полю DefaultExpression, и в OnNewRecord делать SomeField.Value := SomeField.DefaultExpression не катит, так как это уже програма влазит в значения по умолчанию, а корректнее когда это делает СУБД (мухи отдельно, котлеты - отдельно)...


 
Deniz ©   (2006-02-22 06:33) [1]

Если сделать Refresh только что добавленной записи, то поля имеющие default значения должны показать их(default значения). Но здесь есть грабли.
К примеру:
Create table t (i integer, s varchar(10) default "111")
так вот если послать запрос
insert into TEST(i) values(1)
то s примет значение "111"
а если послать запрос
insert into TEST(i, s) values(2, null)
то в s будет null, и default не отработает.
Default подставляется только если поле не указано в запросе.


 
Виталий Панасенко   (2006-02-22 09:31) [2]

В FIBPlus это решается устновкой одного параметра для DataSetа. www.devrace.com для xUSSR - дешево. Для Украины - 83 грн., год бесплатное обновление


 
evvcom ©   (2006-02-22 10:15) [3]

Не знаю, как в IB, а в оракле ставлю для default-поля constraint not null и передавая в in/out параметре null, получаю default-значение. Напиши наследника на свой DataSet, там писать-то десяток строк. После выполнения запроса цикл по всем параметрам, и если параметр out или in/out, то прописать значение в поле, сопоставленное с этим параметром. И никаких переоткрытий НД!


 
TheEd   (2006-02-25 22:27) [4]


> Deniz ©   (22.02.06 06:33) [1]
>
> Если сделать Refresh только что добавленной записи*, то поля
> имеющие default значения должны показать их(default значения).
>  Но здесь есть грабли.
> К примеру:
> Create table t (i integer, s varchar(10) default "111")
> так вот если послать запрос
> insert into TEST(i) values(1)
> то s примет значение "111"
> а если послать запрос
> insert into TEST(i, s) values(2, null)
> то в s будет null, и default не отработает.
> Default подставляется только если поле не указано в запросе.
>


я имел в виду, когда не SQL-оператором добавляем, а в DBGrid вставляем новую запись.

и ещё: в * - рефрешь делать dataset"у наверно имелось в виду, и есть ещё момент: если делаешь рефрешь, то не работает почему-то, а Close+Open - нормально. В чём глюк?


 
Deniz ©   (2006-02-26 07:05) [5]

>TheEd   (25.02.06 22:27) [4]
>я имел в виду, когда не SQL-оператором добавляем, а в DBGrid вставляем новую запись.


Как бы ты не извращался с визуальными компонентами, все равно на сервер придет запрос типа insert into table(...) values(...), а вот кто и как его отправит, это уже другой вопрос.

>и ещё: в * - рефрешь делать dataset"у наверно имелось в виду
Конечно.

>если делаешь рефрешь, то не работает почему-то, а Close+Open - нормально
Close + Open чего? Dataset"а или DataBase"a?
Если DataBase"a - то уровень изоляции транзакции http://www.ibase.ru/develop.htm#trans
Если Dataset"а - то тебе надо поподробнее рассказать про твою проблему.


 
TheEd   (2006-02-26 18:29) [6]


> Как бы ты не извращался с визуальными компонентами, все
> равно на сервер придет запрос типа insert into table(...
> ) values(...), а вот кто и как его отправит, это уже другой
> вопрос.

да, но визуальный компонент отправляет этот запрос видимо в момент когда проходит Post, т.е. до этого момента визуальный компонент сам берёт на себя обязанности по определению всех введенных пользователем записей, а когда он смещается на строку выше-ниже или иным способом делает post, тогда посылает серверу Insert.


> Close + Open чего? Dataset"а или DataBase"a?

к примеру TIBQuery (т.е. Dataset"а)


 
Deniz ©   (2006-02-27 06:34) [7]

Визуальный компонент ничего не отправляет.
IBQuery.Refresh работает нормально, только надо его правильно настроить.
1. В запросе на Refresh должно быть нечто вроде:
select ... from ... where PrimaryKey = :OLD_PrimaryKey
2. Настроить PrimaryKey на генератор.
3. Наслаждаться.
Более подробно можно прочитать почти в любой книжке по Delphi+DB.
Здесь все это рассказывать слишком долго.


 
evvcom ©   (2006-02-27 09:21) [8]


> да, но визуальный компонент отправляет этот запрос видимо
> в момент когда проходит Post, т.е. до этого момента визуальный
> компонент сам берёт на себя обязанности по определению всех
> введенных пользователем записей

Визуальный компонент работает только с невизуальным абстрактным TDataSet его методами First, Last, Next, Prev, MoveBy, Append, Insert, Edit, Delete, Post или частью из них. Отправка же запросов на сервер лежит на совести конкретных компонентов-потомков от TDataSet, а также совести программиста, настраивающего эти компоненты.


 
TheEd   (2006-02-27 21:39) [9]

И всё же...
Ответа конкретного не увидел:
TDBStringGrid (SG) "натравлен" на TDataSourse, который с TIBQuery (ну или TIBTable) завязан. Как при добавлении в SG записи на момент редактирования, т.е. до Post установить Default-значения из базы, т.е. не дублируя их в полях SG?

Нельзя, так нельзя, ну или если гемора много, тогда буду делать задать полю DefaultExpression, и в OnNewRecord делать SomeField.Value := SomeField.DefaultExpression :(


 
Johnmen ©   (2006-02-27 22:52) [10]

Берёшь библиотеку FIBPlus, компонент TpFIBDataSet, выставляешь опцию pfImportDefaultValues из PrepareOptions вTrue.
И всё!


 
Виталий Панасенко   (2006-02-28 09:15) [11]


> Johnmen ©   (27.02.06 22:52) [10]
> Берёшь библиотеку FIBPlus, компонент TpFIBDataSet, выставляешь
> опцию pfImportDefaultValues из PrepareOptions вTrue.
> И всё!

Я об этом сказал еще в посте 2..:-)) Только человек не хочет слушать. Хочет пределать IBX, наверное


 
TheEd   (2006-03-01 00:40) [12]

Удалено модератором
Примечание: Варез за углом


 
Deniz ©   (2006-03-01 07:18) [13]

http://www.devrace.com/ru/shop/fibplus.php
не на много дороже чем ... могу на пиво WM подкинуть, или напр. на мобилу деньгу перевести.


 
Виталий Панасенко   (2006-03-01 09:31) [14]


> зы: если найдётся нежадный чел + если эта FIBPlus стоит
> того - могу на пиво WM подкинуть, или напр. на мобилу деньгу
> перевести.

На самом деле библиотека стОит нааамного дороже. Но нам, бедным, цену опустили до "нимагу"... Даже пиратские сайты, когда узнают, сколько это стоит для бывшего Союза, убирают дистрибутивы... 15 у.е. за эту великолепную(честно!) библиотеку не жалко...


 
Reindeer Moss Eater ©   (2006-03-01 09:44) [15]

Да уж...
Чудесатый полет мысли.
Сначала делают поле с default значением, затем с клиента пытаются узнать это значение и после вставляют с клиента это значение.


 
Виталий Панасенко   (2006-03-01 10:33) [16]


> Reindeer Moss Eater ©   (01.03.06 09:44) [15]
> Да уж...
> Чудесатый полет мысли.
> Сначала делают поле с default значением, затем с клиента
> пытаются узнать это значение и после вставляют с клиента
> это значение.

Кому как. Мне нравится."На вкус и цвет.."


 
Reindeer Moss Eater ©   (2006-03-01 10:45) [17]

Оттого, что извращения кому-то нравятся, они не перестают быть извращениями.
Default значения для полей придуманы как раз для того, что бы поля эти не перечислять в инсерте. Тогда-то они и получают свои default значения.


 
Виталий Панасенко   (2006-03-01 10:52) [18]

Нужно быть либеральней в отношении вкусов других.:-). От того, что мне нравится пиво, а кому-то нет, я не считаю его извращенцем.:-)) Зато я от вина не "фтыкаю"...А по поводу темы: мне приятней(да и пользователю), когда сразу вижу дату документа, ДО записи, а не после. При этом можно оперативней среагировать, допустим, если ты проводишь вчерашние документы сегодня(ну, получилось так !)


 
Reindeer Moss Eater ©   (2006-03-01 10:55) [19]

>когда сразу вижу дату документа, ДО записи, а не после.
Дата для новой записи может генериться на клиенте и без дефолт значений.
Получается, что default констрейнты используются вместо словаря данных.
Это и зовется извратом.


 
Виталий Панасенко   (2006-03-01 11:10) [20]

Странно, Access так же делает.. Ну, тут ясно, в Мелком Софте сплошные извращенцы..:-)))


 
msguns ©   (2006-03-01 11:29) [21]

>Reindeer Moss Eater ©   (01.03.06 10:55) [19]
>Дата для новой записи может генериться на клиенте и без дефолт значений.
Получается, что default констрейнты используются вместо словаря данных.
Это и зовется извратом.

Согласен.
Если так уж непременно хочется "задефолтить" такие реквизиты, как дата, № и т.д. документа (хотя мне лично непонятно нафига, но кому пиво, а кому дефки), то почему бы это не сделать посредством какого-нибудь ini-файла. Во-первых, каждый юзер может настроить их "под себя". Во-вторых, для их правки "вручную" не надо никаких Ибэкспертов или Ибконсолей. Да и вообще сервера. В-третьих, это просто грамотнее с т.зр. проекта в целом ибо забивать бизнес-логику такой галиматьей - искать приключения на собственную задницу


 
Виталий Панасенко   (2006-03-01 12:02) [22]

Странно, оказывается в Devrace одни тупицы и извращенцы.. Не знал.. Теперь буду знать. Спасибо..


 
TheEd   (2006-03-06 19:10) [23]

Удалено модератором



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

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

Наверх





Память: 0.51 MB
Время: 0.011 c
15-1144298335
opoloXAI
2006-04-06 08:38
2006.04.30
C: Windows Applog


2-1144872057
Дарья
2006-04-13 00:00
2006.04.30
мини проблема


4-1139220699
Stas_Kalishenko
2006-02-06 13:11
2006.04.30
Toolbar-меню в чужом приложении


3-1141957031
Exciter
2006-03-10 05:17
2006.04.30
Внести значения параметров TQuery


15-1144295698
Карелин Артем
2006-04-06 07:54
2006.04.30
Выбор MP3-плеера. На какие параметры смотреть?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский