Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access. Запрос в свойстве формы "Значению по умолчанию" / 21 сообщений из 21, страница 1 из 1
26.04.2016, 07:03
    #39224345
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Добрый день!
Подскажите, пожалуйста, почему Запрос отрабатывает нормально как запрос, но при переносе (простым копированием) в свойство формы "Значение по умолчанию" выдает ошибку "Выражение содержит ошибочный подчиненный запрос".
Запрос :
SELECT "Номер" & CStr(Max(CInt(Mid([СерНомер],6)))+1)
FROM Устройства
WHERE (((Устройства.СерНомер) LIKE "Номер"));

Смысл запроса:
Установить в поле [СерНомер] значение по умолчанию "НомерХХХ", где ХХХ - следующий номер (1,2,3,....).
Поле [СерНомер] - индексируемое.
...
Рейтинг: 0 / 0
26.04.2016, 07:11
    #39224347
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
serg22tssСмысл запроса:
Установить в поле [СерНомер] значение по умолчанию "НомерХХХ", где ХХХ - следующий номер (1,2,3,....).
Поле [СерНомер] - индексируемое.
Если это поле имеет тип "Счетчик", тогда можно в свойстве "Формат поля" указать: "Номер "&
...
Рейтинг: 0 / 0
26.04.2016, 07:22
    #39224348
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Спасибо, Agapov_stas.
Нет, это поле не счетчик, просто текстовое поле, но индексируемое (совпадения не допускаются).
А что, если было бы счетчиком, то "... ошибочный подчиненный ..." изчез бы?
...
Рейтинг: 0 / 0
26.04.2016, 07:28
    #39224350
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Agapov_stas,
Прошу прощения, не сразу сообразил - если было бы счетчиком, то значение формировалось бы "по умолчанию".
Спасибо за совет, хороший вариант, но здесь нужно как-то по-другому..
...
Рейтинг: 0 / 0
26.04.2016, 07:29
    #39224351
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
serg22tss, тогда не нужно было бы создавать запрос в принципе. Он последовательно создается с новым номером.
...
Рейтинг: 0 / 0
26.04.2016, 07:44
    #39224357
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
serg22tss,

В "значение по умолчанию" можно вводить не запрос, а функцию. Например, VBA функцию. Напишите какую-нибудь функцию что-то вроде этого в VBA:
Код: vbnet
1.
2.
3.
4.
Function QueryResult(SQL As String)
    On Error Resume Next
    QueryResult = CurrentDb.OpenRecordset(SQL).Collect(0)
End Function


Ну а потом в "значение по умолчанию" так и напишите =QueryResult("Здесь SQL текст запроса")

В принципе можно и DMax использовать. Что-то вроде этого:
Код: vbnet
1.
=CStr(CInt(DMax("СерНомер";"Устройства";"СерНомер LIKE 'Номер'"))+1)


Правда, я не знаю тип данных поля "СерНомер" и как себя поведёт запрос.
...
Рейтинг: 0 / 0
26.04.2016, 07:51
    #39224359
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Да, Agapov_stas, я уже сообразил... И этот вариант мне понравился, но в моем случае его не применишь.
Кстати, в вашем примере (если я правильно понял) в выражении [ "Номер "& ] символ & означает текущее значение поля-счетчика.
Может быть у меня ошибка возникает из-за того, что в моем запросе этот символ применяется, но "в другом смысле"?
...
Рейтинг: 0 / 0
26.04.2016, 07:54
    #39224362
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Спасибо большое, studieren, продолжу "изыскания"..
...
Рейтинг: 0 / 0
26.04.2016, 10:08
    #39224449
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Код: sql
1.
="Номер" & DMax("Mid(СерНомер,6)";"Устройства")+1
...
Рейтинг: 0 / 0
26.04.2016, 13:42
    #39224746
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Спасибо, __Michelle.
Попробовал ваш вариант.
Выдает ошибку (при попытке добавить новую запись): #Имя?
Изменил строку до такого вида:

DMax("Mid(Устройства.[СерНомер],6)";"Устройства")

Результат тот же

Поле [СерНомер] у меня текстовое, для DMax нужно преобразовывать в число?
Хотя, даже если я ставлю дополнительно CInt

DMax("CInt(Mid(Устройства.[СерНомер],6))";"Устройства")

все-равно ошибка #Имя? остается.
Откуда она лезет, пока не понял.
...
Рейтинг: 0 / 0
26.04.2016, 13:53
    #39224753
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
serg22tss,

Внутри DMax использовать название функции нельзя, в том числе и MID. Только название поля.
Код: vbnet
1.
="Номер" & (CLng(Mid(DMax("СерНомер";"Устройства");6))+1)
...
Рейтинг: 0 / 0
26.04.2016, 14:22
    #39224800
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
studierenserg22tss,

Внутри DMax использовать название функции нельзя, в том числе и MID. Только название поля.
Код: vbnet
1.
="Номер" & (CLng(Mid(DMax("СерНомер";"Устройства");6))+1)

То есть, как?
Вот сейчас специально сделала в таблице текстовое поле с аналогичным именем.
И форму ленточную только с этим полем, имеющим аналогичное 19106418 значение по умолчанию.
Прекрасно DMax выполняется.
И значение по умолчанию правильно формируется.

Может, у ТС таблица пустая и не хватает Nz?
...
Рейтинг: 0 / 0
26.04.2016, 14:29
    #39224811
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
__Michelle,

Кажется в старых версиях Access по моему было так. Сейчас попробовал в А2010, таки да, оказывается и Mid можно использовать внутри DMax.
...
Рейтинг: 0 / 0
26.04.2016, 14:32
    #39224813
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
__MichelleМожет, у ТС таблица пустая и не хватает Nz?

Возможно строка, начиная с 6-позиции вовсе не число. Надо смотреть что возвращает
=DMax("Mid(СерНомер,6)";"Устройства")
...
Рейтинг: 0 / 0
26.04.2016, 14:34
    #39224818
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
studieren,

Я пробовала в 2000-м)))
Могу сейчас и в 97-м, и в 2003-м для полного уяснения попробовать.
Только надо снова табличку и форму заново делать,
так как уже далеко от той машины, на которой сделано.
...
Рейтинг: 0 / 0
26.04.2016, 14:36
    #39224822
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
studieren__MichelleМожет, у ТС таблица пустая и не хватает Nz?

Возможно строка, начиная с 6-позиции вовсе не число. Надо смотреть что возвращает
=DMax("Mid(СерНомер,6)";"Устройства")Это тоже возможно.
Пока верю ТС, утверждающему, что поле имеет значения вида "НомерХХХ".)))
...
Рейтинг: 0 / 0
26.04.2016, 14:52
    #39224843
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
serg22tss,

В окне Immediate (вызывается по Ctrl-G в окне редактора VBA) выполните

? DMax("Mid(СерНомер,6)";"Устройства")
и
? DMax("СерНомер";"Устройства")

Что выдает?
...
Рейтинг: 0 / 0
26.04.2016, 16:29
    #39224949
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
serg22tss,
проверьте зто:
Код: vbnet
1.
Me.серия.DefaultValue = "'номер" & Mid(Me.серия, 6) + 1 & "'"
...
Рейтинг: 0 / 0
27.04.2016, 08:15
    #39225235
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Доброе утро, форумчане.
Огромное спасибо всем откликнувшимся (признаться, даже не ожидал)!

По порядку:
1. У меня Access 2007 – 2010.
2. База и таблица [ Устройства ] не пустые.
3. Поле [СерНомер] - текстовое, может содержать и буквы и цифры в текстовом виде. Предназначено для хранения серийного номера устройства. Если серийный номер пока неизвестен, то нужно ввести ( или по умолчанию сразу при добавлении новой записи ) НомерХХХ (где ХХХ – число). Таким образом, в поле находятся записи и типа [SC90LA08243] и типа [номер121].

__Michelle
Большое спасибо за доверие. Если случайно ввел Вас в заблуждение – прошу прощения.
В моем SQL-запросе изначально стоит фильтр на выборку - WHERE СерНомер LIKE “Номер”, но запрос, прекрасно отрабатывая сам по себе, не желает работать в поле “Значение по умолчанию” (см. вопрос).

Команды и ответы:
? DMax("Mid(СерНомер,6)";"Устройства")
SC90LA08243
? DMax("СерНомер";"Устройства")
Номер9

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

sdku
Me.серия.DefaultValue = "'номер" & Mid(Me.серия, 6) + 1 & "'"
Выдает ошибку «Пропущен операнд или оператор, введен недопустимый знак или запятая, либо задана строка без кавычек». Мои попытки поставить кавычки по-другому либо не помогают, либо приводят к другой ошибке. Увы, не силен, пока..
...
Рейтинг: 0 / 0
27.04.2016, 09:03
    #39225246
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
serg22tss,

Ну, что ж. Теперь все прояснилось.

1. В режиме конструктора в свойстве Значение по умолчанию поля СерНомер укажите
Код: sql
1.
="Номер" & DMax("Mid(СерНомер,6)";"Устройства";"СерНомер Like ""Номер*""")+1

Это для того, чтобы значение присутствовало в новой записи при открытии формы.
Скопируйте все полностью, включая знак равенства!!!

2. Но этого недостаточно.
Как только запись начнет заполняться, откроется следующая "новая" запись,
но значение в поле СерНомер этой следующей "новой" записи будет тем же самым, что и в заполняемой.
Это произойдет потому, что новое максимальное значение (из заполняемой записи) еще не зафиксировалось в базе,
а значение по умолчанию уже срабатывает.
Поэтому для формы введите процедуру обработки события После обновления (это VBA)
Код: vbnet
1.
2.
3.
Private Sub Form_AfterUpdate()
 СерНомер.DefaultValue = """Номер" & DMax("Mid(СерНомер,6)", "Устройства", "СерНомер Like ""Номер*""") + 1 & """"
End Sub

Здесь не точки с запятой, а запятые.
В режиме конструктора в свойствах используются точки с запятой, а в VBA запятые.

Для начала, пока Вам не все ясно, просто скопируйте все в точности отсюда.

Все должно нормально получиться.
...
Рейтинг: 0 / 0
27.04.2016, 12:32
    #39225494
serg22tss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access. Запрос в свойстве формы "Значению по умолчанию"
Большое спасибо __Michelle!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access. Запрос в свойстве формы "Значению по умолчанию" / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]