|
|
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Как задать значение по умолчанию числовому полю равное значению этого же поля предыдущей записи + 1. Есть таблица: 11 вапвап 12 варвр 13 авпва 14 авп 21 екн 22 аар При добавлении новой записи надо, чтобы в 1 поле по умолчанию появилось значение 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:16 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
99%, что это невозможно. Таблица не знает, что такое предыдущая запись. Визуальный порядок записей на экране - это еще не все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:20 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Можно использвовать DMax(...)+1 Можно использовать временную таблицу для хранения последнего значения Можно использовать счетчик, но тогда возможны пропуски Ну, пока хватит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:23 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Опаньки.... я слова "предудущей" записи я не заметил. Grechuhin Anton тебе это число для чего нжно-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:24 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Через форму - можно. На BeforeUpdate смотреть в RecordsetClone. 2 Сенен Виктор DMax+1 - не удовлетворяет. Надо не максимальное + 1, а последнее + 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:25 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
> Через форму - можно. На BeforeUpdate смотреть в RecordsetClone. Да, я об этом подумал. Но наружу не вышло. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:27 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч, а если использовать формочку для ввода новой записи, то вполне даже можно... Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:29 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 Лоху >Через форму - можно. На BeforeUpdate смотреть в RecordsetClone. А если база в сети, и кто-нить в таблицы записей наставляет? Пока набор не обновиться будет лажа. И вообще это херня полная "последнее"+1 искать. Grechuhin Anton ты бы нам объяснил че ты все-таки хочешь, а то у меня такое ощущение что это тебе нафиг не нужно, а нужен просто последовательный счетчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:29 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
А если база в сети, и кто-нить в таблицы записей наставляет? Пока набор не обновиться будет лажа. Ну и кто ж его знает тогда, какая из них последняя По моему, автор топика нас испугался и убежал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:39 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
По моему, автор топика нас испугался и убежал Не думал, что так быстро ответите :) Зачем мне это надо: Есть куча анкет, информацию из которых надо поместить в бд. У каждой анкеты - свой номер, обычно номера идут по-порядку. В принципе номер можно вводить и ручками, но для облегчения работы хотелось бы чтобы это делалось автоматически... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:52 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Счетчик тебя спасет Или, если не счетчик, то все равно значение по умолчанию тебе не нужно. Нужно автоматическое присвоение следующего номера. На BeforeInsert - номер присваивай DMax([Номер]) + 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:54 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Спасибо всем. Сделал через DMax() - не совсем то, что хотел, но и так неплохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:08 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 G&P Ну так я и говорю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:25 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
a function DLast() +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:25 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Интересно, кто, как делает. Мне пока не было нужды, но может появиться. Например, накладные. Нумерация начинается каждый год с начала года (значит не счетчик). Конечно, что первое приходит в голову - Recordset и DMax(). Но может есть интереснее варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:26 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 igol Цитата из хелпа "Функции DFirst и DLast используют для возвращения значений из Код: plaintext Мыслю я, что случайно выбранные записи - точно не нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:29 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
У DMax можно указать критерий отбора. Код: plaintext 1. Вернет максимальное значение счетчика (если его нет, то 0) за текущий год. Это, конечно, не готовое решение, просто один из вариантов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:37 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Есть еще одно решение, но оно совершенно сумасшедшее. 1. Ctrl+' заносит в поле значение из предыдущей строки - эта штука встроенная. 2. Написать на KeyPress или KeyDown процедурку, которая при нажатии, скажем, Ctrl+L берет значение поля и добавляет к нему 1. И нажимать каждый раз в этом поле подряд Ctrl+' и Ctrl+L. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:38 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Опс, чего то намудрил, правильно будет Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:41 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Нумерация начинается каждый год с начала года - пережитки прошлого. Нет необходимости, не вручную же нумируются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:46 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
V. Motchulsky "Если Вы не всилах остановить лавину - не пытайтесь ей противостоять". Иногда клиентам не интересно наше мнение о пережитках. Изживать их у себя, во всяком случае, пока "жареный петух не клюнет", они не собираются. Вместо сеанса психотерапии они ждут от нас нечто другое. Если за это нечто платят, чего бы его не сделать (желательно с наименьшими затратами времени и сил)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:56 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
В одной программе пришлось убрать нумерацию с начала года. Заказчик потребовал: однажды он клиента потерял из-за этого. Тот увидел в феврале накладную с номером то ли 30 то ли 40, и подумал "На хрен мне такая фирма, у которой за месяц 40 продаж" и свалил... А вот был бы номер 23423 - хрен бы он свалил - психология! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 12:58 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Похоже все-таки DMax(). Хотя недавно столкнулся с такой фигней при использовании этой функции. На форме две субформы: "Действия" и "Операции" - отображают данные соответствующих таблиц. 1 со 2 связаны отношением один-ко-многим по полю "КодДействия" . На событие текущая запись 1-й - Requery 2-й. В субформе "Операции" в свойстве "значение по умолчанию" поля "№" - функция Dmax("№", "Операции", "КодДействия = " & Forms!Задачи!Действия.Form.КодДействия)+1 Закономерность так и не уловил - иногда возвращает значение без +1 (устанавливал +2, тогда нормально), а иногда с +1. Тогда если было установлено +2 - значение было на 2 больше максимального. Не стал ковыряться, перешел на Recordset, но интерес (почему?) так и остался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 13:14 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Иногда клиентам не интересно наше мнение о пережитках. Иногда да, но в большинстве случаев у них нет вообще полностью СФОРМИРОВАНОГО мнения. И если вы задаете им вопрос, надо ли нумеровать с нового года по новому, тем самим наталкиваете их на мысль а может надо. Лучше сказать "нет необходимости начинать нумерацию с каждого года по новому, так как компютер успешно с этим справляется и во всех продвинутых фирмах этого больше уже не делают." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 13:40 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Ага, и еще клиенту сказать, что счета-фактуры все равно нумеруются с начала года, и по фиг, продвинутая у вас фирма или нет - законы у нас такие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 13:43 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Если вовремя обсуждения, то согласен. А если: "Меня не интересует как в других. Хочу только так и не иначе?". Можно, конечно, сменить клиента... Но спорить с ним, почему ему так удобнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 13:50 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Хочу только так и не иначе - то уж никуда не денишся. Можно как предложил Senin Viktor. Только в сети могут возникнуть проблемы - один пользователь считал значение, второй считал, первый записал, второй увы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 16:27 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
И при наличии уникального индекса один из пользователей будет послан и нажмет кнопку еще раз. Ничего страшного. Или делать счетчик. Только не забыть, что от необходимости создания уникального индекса счетчик не избавляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 16:33 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 Витал "Закономерность так и не уловил - иногда возвращает значение без +1 (устанавливал +2, тогда нормально), а иногда с +1. Тогда если было установлено +2 - значение было на 2 больше максимального. " Дык Dmax по табличке ищет :). Т.ч. результат означает, что на момент поисков данное ("предыдущее") не сохранено - и плюсует к последнему сохраненному... А вот почему там бывает несохраненка - скорей всего, ежели вы принудительно не сохранялись, то и "значение по умолчанию" в форму проставилось, но в запись (так и не записанную) не попало, надо думать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 16:59 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Все может быть, все может статься... Закономерности и я не уловил. Может это глюк ХР? Бывает при открытии формы (еще ничего не делал) - значение по умолчанию DMax(), хотя в свойствах DMax()+1. Меняю на DMax()+2. При открытии получаю по умолчанию DMax()+1. Выбираю другую запись в субформе "Действие" - получаю в субформе "Операции" по полю № значение по умолчанию DMax()+2. Правда не помню ставил Recalc по этому полю в проце Form_Current?!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:14 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Если нежелание сохранять - "глюк ХП", то "все может статься". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:20 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 V. Motchulsky >. Только в сети могут возникнуть проблемы - один пользователь считал значение, второй считал, первый записал, второй увы... Легко решаются эти "сетевые" проблемы. В случае возникновения ошибки, прога сама добавляет еще +1 и опять пытается сохранить. И так далее. Правда вставил ограничение не более 5 попыток (что-то побоялся в случае какой-либо заподлянки уйти в непрерывный цикл) З.Ы. Правда у меня не DMax работает - слишком, гад, меленный для сети - а его аналог, на основанный на DAO - работае в несколько раз быстрее. З.Ы.Ы. Хотя я и предлагал заказчику не использовать самодельный счетчик, а пользоваться встроенным, он отказался, сославшися, что пользователи должны сами управлять номерами документов, только после одной неразберихи (два юзера напеременяли так, что потом неделю разбирались), отказался - да поздно - убрать уже не получится - слишком много завязано ( бум. документов) на этот суррагатный счетчик. Заменить-то можно, я даже готов - только им почему-то моя цена не понравилась . так и живут... Мораль: сами придумайте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:21 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
assa Если нежелание сохранять - "глюк ХП", то "все может статься". :) Что сохранять??? Еще ничего нового не вводил!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:28 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 Витал не думаю, что Recalc сохраняет запись... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:36 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
блин, развели разговор на целый бор dmax ставьте не на значение по умолчанию а на "до обновления" формы (причем событие должно срабатывать тока для новой записи) вот тогда она действительно вернет последнее даже если одновременно 2 юзверя будут вводить новую строку давно уже обсуждавшаяся тема всплывает через какое-то время с завидным постоянством ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:40 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2 Сенин Виктор Я тоже счетчики не люблю. Слишком уж они криво в аксесе реализованы. 2 Зам Трамвайный И с какой же стати на событии до обновления гарантировано вернет разные значения для двух юзеров? Те же яйца и получатся - два юзера одновременно выполнят один и тот же запрос, получат одинаковые значения и один обломается. Другое дело что вероятность этого уменьшается, т.к. длительность глюкоопасного куска мала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:50 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
>Хаму трамвайному "Ударим трамваем по бездорожью!!!" Если тема все время всплывает "...с завидным постоянством" значит она ... то, что не тонет... в молоке и завидовать ей не стоит. Совет про BeforeUpdate с удовольствием принимается. Так что просьба хамить дальше, больше, круче и чаще. >assa Для синхронизации субформ на событие Current формы подвешена процедурка SubForm.Requery, а Recalc - как сейчас думаю мог бы помочь (или не мог бы) обновить значение по умолчанию (пересчитать) в поле по аналогии со списками. И вообще-то не блокировал я сохранение записи при переходе к следующей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 17:56 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
по моему тут две проблемы 1 если использовать Dmax (mdb, база ~20-50m, слабые клиенты fsb=66Mz) то есть вероятность что два клиента начнут искать максимум с небольшим промежутком времени и не известно который из них наудет первым и успеет записать измененный номер первым. и запишет новый и попадет ли новый в поиск другого. случаи редкие тно в практике встречались при 2 клиентах примерно раз в полгода при ~20 записях в день на двоих. для бухгалтерии это сами понимаете... 2 пусть будет Dmax - отработал нормальна. первый клиент увеличил номер. к нему (к ней ) приблизил() особь противоположного пола минут на 5. разговор за жизнь. в это время второй клиент ищет мах и находит такой-же номер увеличивает и бысто записывает. потом записывает 1 клиент. опять 2 одинаковых. надо искать бысто и сразу производить запись, что бы "застолбить новый номер" , а потом редактировать остальные поля в этой записи. а на время поиска мах и его записи блокировать табл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 21:33 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Для тех, кто не против счетчиков в принципе, а только против поля типа счетчик в данной таблице, - предлагаю вашему вниманию: 1. Заводим таблицу с одним полем типа счетчик и без записей, назовем ее Cou. Ее надо поместить в отдельном mdb и никогда его не сжимать (а его размер увеличиваться и не будет). 2. В той таблице, которую мы заполняем, даем полю значение по умолчанию MyCou() и запираем его от редактирования. 3. И вот сама функция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 22:17 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2Владимир Саныч механизм вот этого ' главное, что тут никакого Update не нужно .Close почему? поподробнее плииззз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 22:24 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Механизм следующий: при каждом AddNew увеличивается на единицу то значение, которое будет возвращено, однако благодаря отсутствию Update размер таблицы не растет. А файл запрещено сжимать потому, что при сжатии это очередное готовое к выдаче значение счетчика обнулится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 22:34 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Да, мороки в этих MDB, в ADP все проще. Все равно как лучь света в темном царстве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 23:07 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
V. Motchulsky ну раз сказал.... так предложи вариант. все знют - проще... а раз начал, так скажи почему проще. раз разговор идет - значит грабли еще не убрали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 19:54 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
В ADP написал процедурку которая ведет счетчики и вызывай когда надо, где то я ее уже писал. Если надо еще раз напишу. Только тут разговор про ADP не идет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 23:47 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
2V. Motchulsky ADP not ADP все равно все начинают косить глаза в сторону ADP так что выкладывай (не скромничай ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2003, 21:26 |
|
||
|
DefaultValue
|
|||
|---|---|---|---|
|
#18+
Ну тут нефиг скромничать, тут не я придумал, из сайта М$ ALTER proc GetNextIdentity @ForTable sysname, @Value int OUTPUT AS set nocount on begin tran /* if this is the first value generated for this table, start with zero */ if not exists (select * from IdentityTable where ForTable = @ForTable) insert IdentityTable (ForTable, Value) values (@ForTable, 0) /* update must be before select to issue a lock and prevent duplicates */ update IdentityTable set Value = Value + 1 where ForTable = @ForTable select @Value = Value from IdentityTable where ForTable = @ForTable commit tran return @value ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2003, 00:10 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1681494]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 391ms |

| 0 / 0 |
