Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/33: Рейтинг темы: голосов - 33, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 110
1

Предыдущая запись как значение по умолчанию

08.03.2013, 22:17. Просмотров 6641. Ответов 47
Метки нет (Все метки)


Удивительно, но поиском не смог найти, хотя должно быть не первый спрашиваю...

Как в форме вида "Несколько элементов" сделать так, что бы значение предыдущей записи ставилось как значение по умолчанию?

То есть если в предыдущей записи было написано "Модель 1", то в следующей (создаваемой) по умолчанию сразу было "Модель 1". И человек если устраивает - ничего не менял бы. А если надо - тогда выбирал бы нужное из выпадающего списка.


/// снова переделываю свою базу. надеюсь теперь удастся отойти от экселлевской логики.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2013, 22:17
Ответы с готовыми решениями:

Как убрать следующая/предыдущая запись под постом
Собственно вопрос в заголовке. Как убрать эту бяку?

Кнопка следующая запись, предыдущая запись---какие коды
Подскажите пожалуйста коды на кнопки, выполняющие функции "следующая запись, предыдущая запись", по...

Следующая/предыдущая запись mysql
Доброго времени суток. На PHP сделал код для добавления и удаления записей. Есть главная...

Предыдущая запись foreach DataGridView
Как обратиться к предыдущей записи? Convert.ToSingle(row.Cells.Value) Добавлено через 1...

47
Эксперт MS Access
26610 / 14309 / 3166
Регистрация: 28.04.2012
Сообщений: 15,691
08.03.2013, 23:03 2
Надо переопределять значение свойства DefaultValue. Для существующих записей на событии Текущая запись (Current), для новой, только вводимой на событии AfterUpdate поля или записи.
Visual Basic
1
Me.МоeПоле.DefaultValue="='" & Me.МоeПоле & "'"
0
3539 / 1113 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
09.03.2013, 09:56 3
Цитата Сообщение от mobile Посмотреть сообщение
Для существующих записей на событии Текущая запись (Current)
Поясните, пожалуйста, зачем?
Цитата Сообщение от mobile Посмотреть сообщение
для новой, только вводимой на событии AfterUpdate поля или записи.
Если вводить без проверки значения свойства NewRecord формы, то будет срабатывать не только на новой записи. Если же проверять
Visual Basic
1
If Me.NewRecord Then Me!tel.DefaultValue = "='" & Me!tel & "'"
то на событии AfterUpdate формы Me.NewRecord равно False.
ИМХО, рекомендуемый вами код поместить в процедуру обработки события AfterInsert формы.
Цитата Сообщение от Ruido
То есть если в предыдущей записи было написано "Модель 1", то в следующей (создаваемой) по умолчанию сразу было "Модель 1".
Предположим, что под словом "запись" имеется ввиду запись (строка) таблицы/запроса, а не нечто иное.
Что вы понимаете под словом "предыдущая" запись? Варианты, напрашивающиеся после прочтения цитаты:
1. Запись на форме, расположенная непосредственно перед вновь создаваемой.
2. Запись добавленная последней (по времени)
3. Последняя (по времени) запись, в которой корректировалось интересующее нас поле.
0
2840 / 772 / 41
Регистрация: 20.05.2012
Сообщений: 2,056
09.03.2013, 10:45 4
Цитата Сообщение от Ruido Посмотреть сообщение
Как в форме вида "Несколько элементов" сделать так, что бы значение предыдущей записи ставилось как значение по умолчанию?
Ещё как вариант - сохранять в пользовательской системной таблице.
Во-первых, чуть надёжнее, если данные в таблицу вводятся не так интенсивно; во-вторых, важнее, - "на перспективу": таким образом можно сохранять и любые другие пользовательские настройки. А сделать функционал со временем гибче и удобнее и предоставить пользователю возможность подстраивать интерфейс под себя - до этого аппетиты рано или поздно возрастут :-)
Получать эти величины можно приблизительно так:
Visual Basic
1
2
s= DLookup("DefaultOne", "tblSysOptions", "Id=" & Forms!frmВашаФорма!Id)
' условие просто для примера синтаксиса
0
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 110
09.03.2013, 10:50  [ТС] 5
Прикладываю архив с файлом (сразу это мне надо было сделать - ступил). Там форму я не делал полностью - лежит эскиз.

Форма "Нормировщик". Я пытаюсь, что бы при создание новой строчки - в поле "Модель" ставилось значение с предыдущей (последней) строчки.

Логика следующая - человек создает модель обуви. Какая именно модель - я включаю в каждую строчку, что бы отчеты проще делать и для связей. В поле "Номер" - там просто номера по порядку для этой конкретной модели. Я не стал добавлять столбцы в которых как раз и будет основная начинка.
Логика следующего порядка:
Модель такая-то состоит из 10 деталей. У меня в базе десять строк. В первом столбце десять раз указывает человек название одной и той же модели. Во втором - порядковый номер, поскольку без пропусков, то 1,2,3,4...8,9,10. Следующие столбики заполнены данными которые являются индивидуальными.
Я хочу упростить участь человека и что бы ему не вводить каждый раз название модели, а оно смотрелось из предыдущей строчки. И человеку приходилось менять лишь когда он делает новую модель.

В идеале прикрутить еще бы счетчик порядковых номеров, что бы по умолчанию ставилось число на единичку больше чем предыдущее - но это мелочь. А вот выбирать каждый раз из сотен моделей одну - это достаточно напряжно.
0
Вложения
Тип файла: rar учет заданий 08 марта.rar (101.1 Кб, 52 просмотров)
Эксперт MS Access
16259 / 6720 / 1458
Регистрация: 21.06.2012
Сообщений: 12,398
09.03.2013, 11:15 6
По схеме данных Нормировщик подчинена Модели. Почему бы форму Нормировщик не подчинить форме Модели (связь Код-Модель), тогда не нужно никаких изменений значений по умолчанию, модель будет браться из основной формы.
1
Эксперт MS Access
26610 / 14309 / 3166
Регистрация: 28.04.2012
Сообщений: 15,691
09.03.2013, 11:15 7
Цитата Сообщение от minob Посмотреть сообщение
Цитата Сообщение от mobile Посмотреть сообщение
Для существующих записей на событии Текущая запись (Current), для новой
Поясните, пожалуйста, зачем?
Автор хочет минимизировать затраты труда. Записав код на Current, можно поставить курсор на запись с нужным значением и получить желаемый DefaultValue без дополнительного выбора.
0
3539 / 1113 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
09.03.2013, 12:19 8
Цитата Сообщение от mobile Посмотреть сообщение
Автор хочет минимизировать затраты труда. Записав код на Current, можно поставить курсор на запись с нужным значением и получить желаемый DefaultValue без дополнительного выбора.
При объеме данных, значительно превышающем количество строк комбобокса, найти необходимую запись иногда труднее, чем выбрать нужное значение, тем более, если включена автоподстановка. Еще один минус - сортировка или фильтрация вероятнее всего изменят значение DefaultValue, не говоря уже о случайном или нет позиционировании на "неподходящую" запись, и "наша песня хороша, начинай сначала".
0
Эксперт MS Access
26610 / 14309 / 3166
Регистрация: 28.04.2012
Сообщений: 15,691
09.03.2013, 12:44 9
Цитата Сообщение от minob Посмотреть сообщение
При объеме данных, значительно превышающем количество строк комбобокса, найти необходимую запись иногда труднее, чем выбрать нужное значение, тем более, если включена автоподстановка. Еще один минус - сортировка или фильтрация вероятнее всего изменят значение DefaultValue, не говоря уже о случайном или нет позиционировании на "неподходящую" запись, и "наша песня хороша, начинай сначала".
Вероятная ситуация. Но не исключен и обратная случай. Поэтому желательно предоставить юзеру возможности. А уж какие ему пригодятся, покажет опыт использования. Но не лишать его их, исходя из собственного понимания плохо неизвестной ситуации.

А "случайное позиционирование" не более вероятно как и при выборе с комбо.

Добавлено через 8 минут
Говоря про "обратный случай", имелось в виду вот это "При объеме данных, значительно превышающем количество строк комбобокса, найти необходимую запись иногда труднее, чем выбрать нужное значение"
0
Андрэич
09.03.2013, 12:48
  #10

Не по теме:

Как бы было хорошо, когда б на Форуме нашёлся бы энтузиаст, конвертирующий вложения в старослужащий формат. Вот была бы благодать :yahoo:
(Я не за неуставные отношения, но ведь картошку тоже кто-то должен чистить :) )

0
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 110
09.03.2013, 13:55  [ТС] 11
mobile

Внес код в поле "Номер" на событие "После обновления". Вместо МоeПоле указал название поля "Модель". Вообще никакой реакции.

ltv_1953

Беда в том, что я совсем не понимаю как делать подчиненные формы. Поищу в сети, но пока не знаю как это может сработать. Хотя вроде нашел как... буду экспериментировать.

Андрэич
Могу попробовать в старом формате сохранить если не открывается.


//////////////////////////
Я думаю, что если смогу решить эту проблему, то база которую так или иначе делаю два-три года - будет готова.
0
Эксперт MS Access
16259 / 6720 / 1458
Регистрация: 21.06.2012
Сообщений: 12,398
09.03.2013, 14:09 12
Цитата Сообщение от Ruido Посмотреть сообщение
Беда в том, что я совсем не понимаю как делать подчиненные формы. Поищу в сети, но пока не знаю как это может сработать. Хотя вроде нашел как... буду экспериментировать.
Посмотрите во вложении Модели1 и подчиненную ей Копия "Нормировщик". В режиме таблицы форма, подчиненная Модели1, открывается по нажатию на + слева. Там и делается ввод составляющих конкретной модели.
1
Вложения
Тип файла: 7z учет заданий 08 марта.7z (55.7 Кб, 41 просмотров)
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 110
10.03.2013, 13:46  [ТС] 13
Почти всё законченно. Вариант ltv_1953 оказался оптимальным (спасибо всем кто помогал). Теперь я в такой вид переведу все остальные формы и дело будет в шляпе. Но возник последний рубеж. Посмотрите пожалуйста приложенный файлик.

Суть в том, что рядовой сотрудник заполняет форму, его начальник смотрит-проверяет. И если всё нормально, то ставит электронную визу (логическое поле). И если виза стоит, то рядовой сотрудник уже не может ничего изменить исправить.

Я это решал кодом (который мне тут дали):

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
OPTION Compare DATABASE
 
IF [ВизаНачальникаНормировщиков].Value = TRUE THEN
 
Me.[Номер].Enabled = FALSE
Me.[ВидМатериала].Enabled = FALSE
Me.[ОбъемОперацииДлина].Enabled = FALSE
Me.[ОперацийКоличество].Enabled = FALSE
Me.[Операция].Enabled = FALSE
Me.[Особенности].Enabled = FALSE
Me.[Разряд].Enabled = FALSE
Me.[СложностьОперации].Enabled = FALSE
 
ELSE
 
Me.[Номер].Enabled = TRUE
Me.[ВидМатериала].Enabled = TRUE
Me.[ОбъемОперацииДлина].Enabled = TRUE
Me.[ОперацийКоличество].Enabled = TRUE
Me.[Операция].Enabled = TRUE
Me.[Особенности].Enabled = TRUE
Me.[Разряд].Enabled = TRUE
Me.[СложностьОперации].Enabled = TRUE
 
END IF
END Sub
Если в логическом поле "Виза" есть галочка, то доступа к другим полям нет. Если галочки нет, то можно другие поля править.
Но тут внезапно код отказался работать(

Посмотрите пожалуйста - форма "МодельНормировщика" - базовая. "Нормировщик" - подчиненная форма с кодом.
0
Вложения
Тип файла: rar учет заданий 08 марта.rar (132.9 Кб, 32 просмотров)
Эксперт MS Access
16259 / 6720 / 1458
Регистрация: 21.06.2012
Сообщений: 12,398
10.03.2013, 14:27 14
Вы потеряли заголовок процедуры.
Во вложении еще кое-что подчищено.
1. Поле ВизаНачальникаНормировщиков в подчиненной не нужно, оно есть в основной и в коде ссылка на него. поэтому из источника данных подчиненной это поле убрано вместе с основной таблицей.
2. Нужно добавить запрет на удаление записей из подчиненной, если стоит ВизаНачальникаНормировщиков .
Процедура добавлена.
3. Хотя здесь это не нужно, обычно добавляют еще и запрет на добавление записей. Для общности добавлена.
1
Вложения
Тип файла: 7z учет заданий 08 марта.7z (65.2 Кб, 22 просмотров)
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 110
10.03.2013, 17:43  [ТС] 15
Спасибо, вижу код. Дальше его буду копировать. Но беда в том, что данный метод не защищает от исправления данных после визирования.

Если нажать на "плюсик", откроется подчиненная форма. И если сразу щелкнуть на каком-либо поле, то оно доступно для редактуры и изменение сохраняется. Это работает лишь раз и если материнскую форму только-только загрузили, но из-за этого бага всё визирование не работает.
0
Эксперт MS Access
16259 / 6720 / 1458
Регистрация: 21.06.2012
Сообщений: 12,398
10.03.2013, 18:14 16
Да, при обработке текущей записи подчиненной формы. текущая запись основной формы м.б. не той. По текущим записям в формах видно, что вы попадаете на поле записи подчиненной, не запись основной пока еще другая. Посмотрите другой вариант. Там блокируется вся подчиненная форма и отдельно обрабатывается удаление в подчиненной (при попытке удаления текущая основной всегда та, которая нужна).
1
Вложения
Тип файла: 7z учет заданий 08 марта2.7z (65.1 Кб, 60 просмотров)
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 110
10.03.2013, 18:28  [ТС] 17
Всё работает) Огромное спасибо! Теперь под этот алгоритм буду всё перебивать. Я вижу свет в конце тоннеля!
0
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 13
28.07.2016, 07:45 18
Доброго дня, други. Хочу, что бы в форме, основанной на выборке из десяти последних по дате записей и отсортированных по возрастанию, одно из полей принимало по умолчанию значение предыдущей записи.

Прописываю это так: =DLookUp("[Поле1]";"[Запрос1]";"Дата=" & DMax('[Дата]';'[Запрос1]'))

По отдельности Dmax работает и возвращает необходимую последнюю дату из выборки. DLookUp бес параметра DMax возвращает первую запись из выборки. А вот с параметром DMax выдает ошибку. Подозреваю, что ошибка в синтаксисе. Подскажите, пожалуйста, в чем ошибка. Спасибо.
0
Эксперт MS Access
16259 / 6720 / 1458
Регистрация: 21.06.2012
Сообщений: 12,398
28.07.2016, 08:25 19
Попробуйте отформатировать DMax("[Дата]";"[Запрос1]"):
Format(DMax("[Дата]";"[Запрос1]");"\#mm\/dd\/yyyy\#")
1
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 13
28.07.2016, 09:50 20
ltv_1953, спасибо огромное. То, что нужно!

Добавлено через 1 час 18 минут
ltv_1953, а может быть вы ещё знаете как добавить второе условие по времени к этому запросу? Это уже для другой таблицы, но смысл тот же. Единственное отличие, что в ней есть отдельно поле Дата и отдельно поле Время. Если не делать условие на время, то выдаст первую запись последней даты. Но так как на эту дату записей несколько, то из них необходимо взять последнюю по времени.

Я делаю так: =DLookUp("[Поле1]";"[Запрос1]";"Дата=" & Format(DMax("[Дата]";"[Запрос1]");"\#mm\/dd\/yyyy\#") and

"Время=" & Format(DMax("[Время]";"[Запрос1]");"\#hh\/nn\#"))

Но условие в таком виде не срабатывает и возвращает первую запись из все выборки как будто условия вовсе не прописано.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2016, 09:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Предыдущая запись переодического регистра сведений
Здрасте, как получить значение ресурса предыдущей записи регистра сведений. Нужно получить разность...

Как разрешить запись в файл, по умолчанию запись не разрешена
Помогите! НАчинающий php - программист. Как разрешить запись в файл, по умолчанию запись не...

Как сделать значение по умолчанию для параметра, если оно должно быть значением по умолчанию для типа T?
Как сделать значение по умолчанию для параметра, если оно должно быть значением по умолчанию для...

Как сделать учетную запись по умолчанию
На компе есть две учетки Администратор и Гость который отключен Но при перезагрузке компа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.