Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
30.05.2019, 16:24
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Всем добра! Прошу помощи общественности. Ситуация типичная для форума - есть я, который полный ноль в access, и есть база на нем, доставшаяся "в наследство" вместе с парком техники. Учитывая мое незнание, не смог грамотно сформулировать даже контекст для поиска, потому и создаю тему. Может, кто-то аккуратно пошлет в нужном направлении :) База - самописная на MS Access 2003 кем-то в ходе изучения. Не убивается на предприятии, ибо в ней уже много всего. После активных доработок разработчиком допиливалась по необходимости моими предшественниками. Несколько раз, судя по словам предыдущего товарища, рекавилась. Собственно, сама история началась с жалобы старшего менеджера на то, невозможно внести ассортимент. "Вот только вчера было можно, а сегодня - уже нет". Анализ бекапов показал, что "вчера" было более трех месяцев назад, еще до моего прихода. Работало "это" следующим образом: старший менеджер тыкал одну из двух кнопок "Муж." или "Жен.", вызывался соответствующий запрос ("Ассортимент муж" или "ассортимент жен") и потом - соответствующая форма (так же "муж." или "жен.", хотя, фактически, форма одинаковая и обращается к одной таблице). После заполнения полей в форме (в табличном виде) обновление базы происходило, но в поле "тип" соответствующей записи "муж." или "жен." уже не попадало (это поле в форме не показывается). Запросы типовые: из таблицы "ассортимент" читает все поля, при этом поле "тип" не показывает (птица "показывать" снята), но по нему стоит фильтр, а по полю "код материала" читает свойства материала (название и характеристики) из таблицы "материалы". Два одинаковых запроса с разным фильтром. Я попытался использовать структуру "Ме", но, видимо, она оказалась хитрее - прикрутить не смог. Итогом моих усилий стало добавление в обработку нажатия кнопки следующей строки: CurrentDb.TableDefs(EditDBName).Fields(EditFieldName).DefaultValue = "Муж." для одной кнопки и "Жен." для другой. И, конечно, предварительно задание переменных. Костыль ужасный, но в условиях "надо быстро" вполне себя оправдал. Осталось опасение, что если кто-то полезет помогать старшему менеджеру, то будет неприятный конфликт. Новым толчком стало желание менеджера "список большой, хочу еще две кнопки" - теперь должно быть четыре критерия: "Обувь муж.", "Обувь жен.", "Одежда муж.", "Одежда жен." В принципе, нарисовать пару кнопок и скопировать костыль еще и на них - я могу. Но, во-первых, не дает покоя мысль о том, что форма получает, по сути, выборку из одной таблицы с параметром, а потому делать четыре одинаковых запроса и четыре формы - неумно. Во-вторых, если уж что-то допиливать, то так, чтобы не было мучительно стыдно за результат. Ну, и в-третьих, не исключаю, что будут (возможно, не мне) задачи на кнопки "обувь дети" и "одежда дети" или обувь/одежда мальч/дев. Хочется унифицировать процесс. Вызов запроса по нажатию кнопки, как я понимаю, стандартный - DoCmd.OpenForm stDocName, , , stLinkCriteria Как я понимаю, для выборки из таблицы мне будет достаточно в stDocName указать имя формы и задать stLinkCriteria - тогда не нужно будет запроса в целом и понадобится только одна форма. Но как при добавлении данных в форме сделать, чтобы в поле "тип" записывалась строка, переданная через stLinkCriteria? Вернее, не вся строка, а именно параметр? Заранее благодарен! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.05.2019, 16:55
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
всегда напрягало "многабуквов" не по делу... чо там? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.05.2019, 17:58
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Панург...чо там?Больше чем уверен что в базе "черт ногу сломит" т.к.ей занимался не один "рационализатор"-поэтому выложить её не прошу.А на вопрос типа:как добавить в таблицу запись? Вам ответят.Сформулируйте кратко и конкретно вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.05.2019, 18:27
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
sdkuБольше чем уверен что в базе "черт ногу сломит" т.к.ей занимался не один "рационализатор"-поэтому выложить её не прошу. Именно так. Ну, и кроме того - размер. Ибо там склад и куча всякого прочего. sdkuА на вопрос типа:как добавить в таблицу запись? Вам ответят.Сформулируйте кратко и конкретно вопрос. Не добавить запись, в том и дело. Нужна как оценка со стороны - имеет ли смысл копать в сторону одной формы на N кнопок, на которые можно повесить запрос с параметром (как я это вижу) вместо N запросов плюс N форм. И, во-вторых, реализация. Как записать этот параметр, который должен быть фильтром отбора, в конкретное поле таблицы при добавлении записи? Сами записи пишутся, с ними проблемы нет. Проблемное именно поле отбора, невидимое в форме, заполнение которого я реализовал через CurrentDb.TableDefs(EditDBName).Fields(EditFieldName).DefaultValue То есть, менеджер нажал кнопку "Жен." - открылась форма с отбором по "Жен.", внес новое значение - и это "Жен." тоже должно записаться в поле "тип" новой записи. В моем случае оно записывается, поскольку для новых записей значение поля устанавливается по умолчанию при нажатии на кнопку. Но это неправильно, костыль. Реализовано было как-то иначе, угадывать - смысла нет. Но хочу сделать нормально. А перевести в термины access не могу, не владею, получается многословно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.05.2019, 18:36
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Якорь... Но как при добавлении данных в форме сделать, чтобы в поле "тип" записывалась строка, переданная через stLinkCriteria? Вернее, не вся строка, а именно параметр?... Можно пользуйте НЕ аргумент stLinkCriteria, а аргумент OpenArgs, которым передавать значение "тип". В описании процедуры обработки события "Open" формы: 1. присваивать дефолтное значение соответствующему контролу формы, переданное аргументом OpenArgs, 2. присваивать значение свойству RecordSource формы, с учетом значения переданного/пропущенного аргумента OpenArgs. Есть более изящные решения, но этот вариант, полагаю, будет Вам по скилам. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.05.2019, 20:16
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
CurrentDb.TableDefs(EditDBName).Fields(EditFieldName).DefaultValue = "Муж." это Вы в форме применяли?таким костылем и убиться можно! по делу - открыли Вы форму общим запросом изменяйте в форме фильтр кнопками Код: vbnet 1. 2. 3. 4.
и т.д.-это если в форме все это происходит, но сдается мне что если субформа, в которой оный ассортимент и вызывается, потому Me и не прикручивается. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.05.2019, 20:46
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Якорь, разместите на форме combo с источником Код: vbnet 1.
и после его обновления открывайте тот запрос,который выберите,а в запросе сошлитесь на поле формы, в которое вводите критерий (учитывайте что критерии для разных запросов могут быть разные и примите меры к тому что записи должны содержать значения которые есть в соответствующем поле. Короче-как обеспечить правильность отбора решайте сами. Я в этом сообщении хотел сказать что в скрытой таблице MSysObjects есть имена всех пользовательских объектов. Запросы имеют Type-5) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 10:35
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Спасибо большое, но именно с учетом скилла даже с этим проблема - Predeclared1. присваивать дефолтное значение соответствующему контролу формы, переданное аргументом OpenArgs, Есть более изящные решения, но этот вариант, полагаю, будет Вам по скилам. В самой форме нет этого контрола. В запросе на выборку это поле invisible (вывод на экран - птицы нет), в конструкторе запроса следующее: Код: plaintext 1. 2.
При обновлении в таблицу записываются значения "Название", "модель", "код материала". А поле "тип" не пишется. PS Получилось записать, если изменить в запросе видимость и добавить столбец с данными "тип" и с указанием значения по умолчанию (строковая константа). Видимость столбцу поставил "нет". Это адекватное решение? Если я значение этого поля по умолчанию исправлю на Forms.OpenArgs, будет ли это отличаться от PredeclaredВ описании процедуры обработки события "Open" формы присваивать дефолтное значение соответствующему контролу формы ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 10:57
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Всем большое человеческое спасибо за помощь! aleckoCurrentDb.TableDefs(EditDBName).Fields(EditFieldName).DefaultValue = "Муж." это Вы в форме применяли?таким костылем и убиться можно! Безусловно, можно. Хотя при моих ограничениях и работало, но... очевидно, что надо переделывать, а кроме меня - некому. Вот и приходится выставлять свое незнание на обозрение. aleckoпо делу - открыли Вы форму общим запросом изменяйте в форме фильтр кнопками Код: vbnet 1. 2. 3. 4.
и т.д.-это если в форме все это происходит, но сдается мне что если субформа, в которой оный ассортимент и вызывается, потому Me и не прикручивается. Я думаю, оно не прикручивается из-за моей безграмотности в MS Access :) Только у меня основная проблема с записью данных (значения фильтра в конкретное поле каждой добавляемой записи), а не фильтрацией. sdkuЯкорь, разместите на форме combo с источником Код: vbnet 1.
и после его обновления открывайте тот запрос,который выберите,а в запросе сошлитесь на поле формы, в которое вводите критерий Идея интересная, но пока не для моего уровня... хотя смысл я понял. Попробую в качестве "улучшайзинга" прикрутить в другое место этой базы... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 11:46
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
ЯкорьВызов запроса по нажатию кнопки, как я понимаю, стандартный - DoCmd.OpenForm stDocName, , , stLinkCriteria Как я понимаю, для выборки из таблицы мне будет достаточно в stDocName указать имя формы и задать stLinkCriteria - тогда не нужно будет запроса в целом и понадобится только одна форма Обычное решение --ленточная форма --5-10 полей для ввода условий ----муж/жен/дет/подр, ----48/50/52,,, ----обувь/одежда,,, ----блузки/брюки/юбки..... ----китай/турция/польша/белорус в зависимости от заполненных условий --формирование строки для фильтра думаю, что менеджер будет достаточно доволен, хотя бы некоторое время ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 13:01
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Якорь, гляньте это-может что пригодится: ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 14:14
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
sdkuЯкорь, гляньте это-может что пригодится: Да, примерно так и организовано, если предположить, что это - вызываемая форма. Аналог ctl5 - там как раз значение фильтра хранится, а на форме оно не представлено. Вот его мне и надо сохранить в таблицу. Я попытался наспех приблизить к тому, как реализовано в базе. Соответственно, там две кнопки на форме и вызов запроса по нажатию (на каждую кнопку свой запрос и своя форма). Значение фильтра в запросе должно попасть в ctl5 при добавлении записи. Это два момента, которые я хочу реализовать: - на любое количество кнопок вызывать одну и ту же форму и один запрос (или ни одного) с параметром - строковой константой; - записывать значение константы, с которой был вызов, в ctl5 В принципе, по совету Predeclared получилось - со скрытым столбцом ctl5 на форме. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 16:42
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Якорь, тож костыль, вобщем-то, но - как вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 17:33
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
sdkuСформулируйте кратко и конкретно вопрос.просмотрел еще раз топик, но понимания так и не возникло. Что,в зависимости от чего, и куда надо записать (или что открыть). Что и где вводит оператор (как-то так:оператор открывает форму(ленточную,одиночную) с такими-то данными,затем заполняет поле.... для ввода критерия отбора и нажимает кнопку...,на форме отражаются такие-то данные,создает новую запись которая сохраняется в такую-то таблицу,при этом в таблице....создается новая запись со значением поля ...=ID,поля...=полю...внесенной оператором записи) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 18:11
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
sdkuСформулируйте кратко и конкретно вопрос. Пользователь нажимает кнопку "Жен.", открывается форма (ленточная? Не уверен, в понедельник проверю), источник данных - запрос с параметром "тип"="Жен." из таблицы "ассортимент". В форме табличное представление выбранных данных. Для ввода новых данных пользователь ставит курсор на новую строку, заполняет поля. Например, наименование="Пальто", модель="Мисс Север-2019", материал="код материала" (тянется из другой таблицы, работает). При установке курсора на другую строку должна произойти запись в таблицу "ассортимент" record'а: Код: plaintext 1. 2.
Код: plaintext 1.
Если брать выложенный пример: на форме1 кнопка "Обувь" вызывает по нажатию форму "Обувь", источник данных для которой - запрос "ЗОбвуь". Он из Таблица1 выбирает записи с полем ctl5="Обувь" При сохранении записи поля ctl1-ctl4 он берет из заполненных полей, а в ctl5 должен записать "Обувь" и сохранить именно так в таблицу. Как заставить сохранить критерий отбора в ctl5? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 19:59
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
я бы имел 2 таблицы-с товарами для женщин и для мужчин т.к.некоторые поля должны быть в тбл.для женщин при отсутствии таковых в тбл.для мужчин (и наоборот-например размер груди) "Пользователь нажимает кнопку "Жен.", открывается форма" на таблице "товары для женщин"(кнопку "М" на таблице "товары для мужчин") - это предложение потребует полной переделки БД (изменение структуры БД).Если это не возможно(по веской причине)-разместите в заголовке формы свободное поле которому задавайте значение при открытии формы,в зависимости от нажатия кнопки "М" или "Ж".При сохранении записи поле [tbl]![тип]=полю формы ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 20:10
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
или просто DefaultValue скрытому полю [тип](в зависимости от того для какого пола открывается форма) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 20:37
|
|||
---|---|---|---|
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
ну и фсе... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 21:16
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
К сожалению, там исторически сложилось такое, что я не распутаю - это о глобальной переделке. О чем говорить, если для склада до сих пор маячат "кв м" ткани, хотя пошивом/ремонтом сейчас не занимаются (но материалы на складе числятся)? Может, поэтому и материалы отдельной таблицей сделаны. И размеры почему-то нужны только на связке "менеджер - склад" (которая пока работает и устраивает). Потому же и предложение ПЕНСИОНЕРКА не пройдет - они так не работают... sdkuя бы имел 2 таблицы-с товарами для женщин и для мужчин т.к.некоторые поля должны быть в тбл.для женщин при отсутствии таковых в тбл.для мужчин (и наоборот-например размер груди) При сохранении записи поле [tbl]![тип]=полю формы Вот реализацию этого действа я и не потянул, пришлось пользоваться костылем на всю таблицу... а потом вопросы задавать. Куда его тогда поставить, это присвоение [tbl]![тип]=полю формы ? В BeforeUpdate? На неделе буду все-таки мучить OpenArgs. Всем спасибо за участие, советы и помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.05.2019, 22:20
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
ЯкорьПотому же и предложение ПЕНСИОНЕРКА не пройдет - они так не работают. раз таблицы разные, то и форм поиска должно быть столько же или одна, но с настройкой на таблицу +union запрос для связи складов, если склад неизвестен ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.06.2019, 17:05
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
sdkuну и фсе... Значит, я структур Ме крутил неправильно... "Фсе" - это для тех, кто понимает... я к таким не отношусь, но код - то, что мне и надо, огромное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.06.2019, 14:00
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Всем добра! sdkuили просто DefaultValue скрытому полю [тип](в зависимости от того для какого пола открывается форма) Итоги: - OpenArgs прикрутил, он передается в форму. В итоге на выборку - все хорошо, как и хотелось, одна форма плюс в ней параметрический запрос SQL через RecordSource и OpenArgs. Вылезла проблема с формой - после изменения источника данных в свойствах формы она при открытии и в конструкторе почему-то отображается в свернутом до заголовка виде (по ширине отображается нормально). UPD: ругайте решение. 1 - RecordSource выбросил из кода. Причина - не смог связать скрытое поле в форме со столбцом таблицы "тип". 2 - источником данных стал стандартный запрос через конструктор запросов, критерий отбора по полю "тип" - [Forms]![ИмяФормы].[OpenArgs] 3 - значение Me.поле_для_тип.DefaultValue=Me.OpenArgs, выставленное при открытии формы, почему-то не дало нужного эффекта - при создании новой записи в поле_для_тип и, соответственно, в таблицу ассортимента новое значение не вносится, поле пустое. Причину не понял 4 - выругался и в свойствах формы в событии "после вставки" добавил строку Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.06.2019, 21:37
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
Якорь... 3 - значение Me.поле_для_тип.DefaultValue=Me.OpenArgs, выставленное при открытии формы, почему-то не дало нужного эффекта - ... Присваиваемое значение нужно обернуть апострофами или счетверенными кавычками. Во встроенном хелпе есть пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.06.2019, 09:54
|
|||
---|---|---|---|
|
|||
CurrentDb.TableDefs...DefaultValue как плохой костыль |
|||
#18+
PredeclaredПрисваиваемое значение нужно обернуть апострофами или счетверенными кавычками. Апострофами - помогло. Спасибо большое! Думал, строка же... :) Ну, вот - попросил хоть какое-то ТЗ на изменения. В итоге дошли в ТЗ до девяти кнопок вместо двух О_О Пошел курить подключение группы радиобаттонов либо поле со списком... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=45&tablet=1&tid=1610660]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 129ms |
0 / 0 |