Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Добавление записи - значение по умолчанию из базы |
Автор: vinvin 7.10.2007, 20:50 |
Как при добавлении записи использовать значение по умолчанию, которое указано в поле (полях) для этой базы данных. Я имею ввиду момент после ds.Insert, чтобы в котролах формы отобразились значения по умолчанию. У меня база Access, но это касается и других баз. А может быть использовать какой-нибудь другой подход? Заранее благодарен за ответ. |
Автор: Lunatikus 8.10.2007, 08:21 |
привет.Если значение по умолчанию есть,оно автоматически должно подставляться при добавлении записи,разве нет? Другой выход...дополнительная таблица со значениями по умолчанию ![]() |
Автор: vinvin 8.10.2007, 09:15 | ||
Да, я забыл сказать главное. Я работаю с ADO.
В том-то и дело, что значения по умолчанию в Dataset при добавлении не подставляются. Ведь когда мы делаем Insert, то добавление идет в курсор, расположенный у нас на машине (т.е. у меня выбран тип курсора - статический). При добавлении Dataset ничего о значениях по умолчанию в базе не знает. У самого Dataset в конструкторе полей можно указать значение по умолчанию. Ну и что получается - нужо указывать значения по умолчанию в базе, а потом еще в Dataset в модуле данных. Неужели все так делают? А для чего же тогда значения по умолчанию в базе? Получается их можно использовать только через SQL - insert? Неужели нет другого подхода? Или делать так: Пользователь нажал - Добавить. Выполнилась SQL-Insert, в Dataset сделали ds.Edit и отобразили форму редактирования деталей. Дальше - нажал сохранить - Post, нажал отменить - делаем ds.Cancel и SQL-Delete. Но это же глупость! Зачем же добавлять в базу, если пользователь еще не решил нужно это делать или нет! |
Автор: Lunatikus 8.10.2007, 13:16 |
А ,извини, не сразу понял, о чем ты. Т.е ты хочешь увидеть значение по умолчанию до того, как эта запись будет создана в БД и это создание будет закреплено post'ом. В таком случае я ы использовал метод ondrawcell,чтобы там при каждой перерисовке в поля,где еще нет значений добавлялась запись со значением по умолчанию. Хотя не знаю,может можно сделать чтото вроде DBGrid1.fields[0].asstring='значение по умолчанию'. |
Автор: vinvin 11.10.2007, 10:19 |
Хорошо, а как из базы, ну хотя бы Access вытащить значение поля по умолчанию? |
Автор: vinvin 11.10.2007, 11:11 |
Хорошо, а как получить доступ к базе, чтобы вытащить значение по умолчанию? В том- то и дело, что в некоторых СУБД еще можно (например в SQL сервере через таблицы метаданных), а в других, например в Accesse или никак или очень хитроумными и порой даже недокументированными способами. К тому же некоторые значения по умолчанию хранят не просто статические значения, а какую-нибудь функцию. Поэтому, тот подход, который мне казался не очень хорошим, кажется единственный выход в данном случае, т.е. сначала создавать запись с помощью того же Insert-Sql, а потом в случае отказа пользователя - удалять ее. Только в этом случае возникает проблема - какую запись показывать. Я думаю, что можно попытаться найти добавленную запись по номеру автоинкремента - 'select @@IDENTITY as [ID]' |