|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
||||
Ошибка 3048: открытие дополнительных баз данных невозможно04.04.2015, 13:25. Показов 12230. Ответов 19
Ну вот, кажется, настал и мой черед поморочить себе голову с этой дурацкой ошибкой...
Предыстория. Создал для клиента замечательную базу склада с учетом всех его пожеланий. База, само собой, была разделенная на клиентскую часть и часть с таблицами данных, то есть использовались связанные таблицы (и прекрасный алгоритм их автопривязки в случае смены клиентской части - этот алгоритм нашел здесь на форуме). Пока все прекрасно. При этом реализовал в базе многоэкземплярность форм, чтобы можно было открыть одновременно несколько форм (для разных заказов, разных товаров и т.д.) - рецепт для этого нашел тоже здесь же на форуме, там в начале при загрузке главной формы заодно открываются в скрытом виде все нужные формы, клоны которых потом открываются по необходимости). На каждой из этих форм имелось по нескольку вкладок с разными подформами для удобного представления данных (о заказе, товаре, поставщике и т.д.). Так вот, в идеале все работало замечательно. А когда база "ушла в работу" - тогда и начала вылазить эта вот ДУРАЦКАЯ "Ошибка 3048: открытие дополнительных баз данных невозможно". Раньше я с ней, слава богу, не сталкивался, поскольку до этого как-то не приходилось делать разделенные базы данных, все больше обходился стандартным вариантом с одним файлом базы... Прочитал несколько форумов по ее поводу и все больше склоняюсь к упаднической мысли о том, что мне проще нафиг заново соединить клиентскую часть и часть с таблицами в единую базу (при этом потеряв такую прекрасную автолинковку связанных таблиц) и забыть эту ошибку как страшный сон, чем заново "рихтовать" всю базу с учетом всех тех требований и ограничений, которые накладываются данной ошибкой... Из прочитанного на других форумах можно выделить такие главные моменты (далее будут цитаты):
В принципе, на прочитанных мною форумах я нашел несколько советов по поводу если не преодоления, то хотя бы уменьшения частоты появления данной ошибки, но... Ей богу, я не считаю хорошим советом "Старайтесь делать меньше форм" - звучит глупо как минимум. Если учесть, что формы я создавал ОЧЕНЬ продуманными с точки зрения логики подачи информации и удобства для пользователя (мы с заказчиком каждую из них "рожали в муках")), то было бы как минимум досадно (и это мягко сказано) переделывать их "в угоду" ограничениям JET... Почему-то не нашел поиском темы про данную ошибку на этом форуме - скорее всего плохо искал. Буду очень признателен за любые возможные советы и "наводку" на что почитать по данному вопросу, хотя, повторюсь, все уже прочитанное приводит к довольно грустным выводам...
0
|
||||
| 04.04.2015, 13:25 | |
|
Ответы с готовыми решениями:
19
Открытие дополнительных баз данных невозможно
Открытие других баз данных |
|
65 / 51 / 2
Регистрация: 15.12.2010
Сообщений: 297
|
|
| 05.04.2015, 12:45 | |
|
Я тоже наталкивался на такую запись в реестре... Пороюсь у себя Мб найду
0
|
|
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 05.04.2015, 13:59 [ТС] | |
|
Настаев, Я читал про параметр реестра MaxLockPerFile (вроде бы так называется), у меня он по умолчанию стоит 9500, пробовал менять - не помогает.
0
|
|
|
65 / 51 / 2
Регистрация: 15.12.2010
Сообщений: 297
|
|
| 05.04.2015, 15:06 | |
|
Просто догадка: может этот параметр для 64-битного офиса хранится в отдельной ветке?
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ Microsoft\Office\15.0 Добавлено через 8 минут Я тут выяснил, что этот параметр на самом деле служит для работы с большими файлами (или таблицами) А на количество открытых рекордсетов никак не влияет (я проверил с помощью отдельной процедуры) http://support.microsoft.com/en-us/kb/286153/ru
0
|
|
|
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 5
|
|
| 05.04.2015, 15:12 | |
|
0
|
|
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 07.04.2015, 10:53 [ТС] | |
|
Да, этот параметр - явно не то. Да я особо и не надеюсь на правку реестра, в общем-то...
на других форумах я начитался кучу советов по поводу того, чтобы "не держать открытыми рекордсеты", при запуске базы объявить объектную переменную для CurrentDB и использовать ее везде вместо CurrentDB и так далее. Вчера попробовал, объявил-позаменял, не помогло. Также есть совет касательно субформ на вкладках. Мол, если вкладка неактивна, то нужно делать SourceObject="". Вот в этом моменте хотелось бы подробностей... У меня при старте базы загружаются в скрытом виде пара форм, касающихся заказов, эти формы содержат вкладки (состав заказа, история оплаты и т.д.), и потом во время работы при двойном клике на строке заказа - открывается клон данной формы именно для этого заказа (т.к. реализована многоэкземплярность форм). Я подозреваю, что основная причина появления этой ошибки у меня в базе - именно в этих двух формах, которые содержат вкладки с субформами, потому хотелось бы подробностей, как правильно управлять SourceObject данных субформ в зависимости от активности содержащей их вкладки?..
0
|
|
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|||||||
| 07.04.2015, 12:31 | |||||||
2
|
|||||||
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 07.04.2015, 15:51 [ТС] | |
|
mobile, Все гениальное - просто)))... Спасибо большое, вечером буду проверять, но мне кажется, что это - реально то, чего мне не хватало! В очередной раз очень признателен за совет)
0
|
|
|
шапоклякистка 8-го дня
|
|
| 26.06.2015, 15:43 | |
|
Столкнулась с этой же ошибкой при вообще загадочных обстоятельствах. База создана в Аксес 2007, открывается в Аксес 2010 32-разрядная. База разделена, ошибка появляется только когда файл с таблицами находится на сервере в расшаренной папке. При работе с тем же файлом, скопированным на локальный компьютер, при всех прочих идентичных обстоятельствах - ошибка не возникает.
Подробней об обстоятельствах. Ошибка появляется при открытии формы, содержащей две подформы-графика, и две подформы-поясняющие данные к графикам. После нажатия "ОК" на сообщении об ошибке форма продолжает работать как ни в чем ни бывало, отображать графики и цифры, так что единственная проблема - моральная травма пользователя. В момент открытия формы графиков одновременно может быть открыто от 2 до 5 других форм, некоторые со вложенными, т.е. да, общее число рекордсетов вполне может быть большим. С другой стороны, если вместо формы с графиками открывать другие формы, даже в очень большом количестве, и даже с большим числом вложенных - ошибка НЕ возникает. Есть какие-то рациональные объяснения или хотя бы идеи?
0
|
|
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
| 26.06.2015, 18:22 | ||||||
|
Предположительно, создается слишком большое число подключений к БД. Но пока создается сообщение, система успевает отрегулировать ситуацию и, хотя сообщение об ошибке есть, самой ошибки уже нет.
Общего, единого рецепта нет. Но чаще всего помогает: - закрытие неиспользуемых рекордсетов: переменнаярекордсета=Nothing - вместо Currentdb создание копии: set db=Currentdb. Особенно, если сделать переменную db публичной и инициировать один раз при открытии БД. А во всех процедурах вместо Currentdb использовать db Ну и конечно, очень желательно отследить где и на каком этапе образуется ошибка. Для этого надо ставить обработчики ошибок в процедурах событий и, конечно на событии Error формы. Тогда, вполне вероятно, что ситуация полностью прояснится. И можно будет ликвидировать сообщение в зародыше, а не бороться с последствиями. Добавлено через 59 минут Ну и в свете предыдущих решений также можно предложить последовательную загрузку форм с графиками. Лишить подформы источника и погружать SourceObject подформ на событии открытия главной формы, но по таймеру с секундной задержкой. В Open главной пишем Me.TimerInterval=500. В процедуре на событии таймера:
1
|
||||||
|
шапоклякистка 8-го дня
|
|
| 26.06.2015, 19:30 | |
|
Спасибо, обе идеи ценные, возьму на вооружение.
0
|
|
|
459 / 246 / 15
Регистрация: 29.10.2014
Сообщений: 1,084
|
|
| 27.06.2015, 13:30 | |
|
Ну если обязательно хотите открывать все формы сразу (что сам Акс не рекомендует),хотя бы в случае чтения данных создавайте формы, не связанные с источниками данных (свободные формы), используя свои модули класса.
Добавлено через 31 минуту Я думаю суть дела вот в чем. Положим имеем две формы, в качестве источника данных которых одна и та же таблица. В локальном режиме конфликта нет - драйвер Акса знает, какая форма в данный момент активна. Изменения в одной форме отражаются в таблице и в другой форме при ее активизации. Когда пользователей много, с какой формой прикажете серверу связывать таблицу даже у одного пользователя? Ведь сервер не знает, какая из форм активна. А когда пользователей много, форме какой базы клиента отдать управление таблицей? Поэтому жесткий отказ. Нужно проверить-все формы должны иметь в кач источника данных запрос. Он выполняется однажды.
0
|
|
|
шапоклякистка 8-го дня
|
|||||||
| 04.07.2015, 21:18 | |||||||
|
Autoexec? OnLoad стартовой формы? Или просто при каждой попытке использовать:
0
|
|||||||
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 04.07.2015, 21:41 | |
|
Если ВСЕ процедуры снабжены обработкой ошибок и задействована Form_Error в каждой форме, то достаточно один раз на старте инициализировать переменную. Все, что пробъется через этот забор в любом случае требует нестандартных действий.
Но на этапе разработки часто приходится переводить форму в дизайн, останавливать процесс и публичная переменная переменная может исчезнуть. На этом этапе можно на лоад всех форм инициировать переменную Database.
1
|
|
|
шапоклякистка 8-го дня
|
|
| 04.07.2015, 22:05 | |
|
Честно говоря, с Form_Error я знакома очень мало. Использовала пару раз, для обработки конкретной ошибки, о которой наперед знала, но это и все.
Не очень хорошо понимаю, как по этому событию определить, какой элемент и какое событие вызвало ошибку. И ставит в тупик, что параметр, ощначающий номер ошибки, иногда равен другому числу, чем Err.Number в элементе/событии, ошибку вызвавшем.
0
|
|
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 04.07.2015, 22:33 | |
|
Событие Error возникает при ошибках формы. Это могут быть процессы не связанные с событиями, например отсутствие таблицы в источнике формы, хотя и описанной в скл-выражении. Или когда ошибка возникает в контроле, для которого нет процедуры событий. Например, деление на нуль в свободном вычисляемом поле.
Также, и это более сложный случай, в Form_Error может придти ошибка по стеку ошибок. Например, в некоторой процедуре стоит On Error Resume Next и ошибки подавляются. Но то же деление на нуль от этого не исчезнет, а передастся по стеку в вызывающую процедуру. Если такой нет, то следующим элементом стека обработки ошибок станет Form_Error. И не факт, что DataErr - параметр Form_Error - будет показывать именно деление на нуль, ведь при этом генерируются и многие иные события, которые тоже могут реагировать на ошибку и генерировать собственные в ответ.
1
|
|
|
5 / 4 / 1
Регистрация: 22.04.2015
Сообщений: 15
|
||
| 13.06.2019, 15:30 | ||
|
Если удалось, то какой из методов помог?
0
|
||
|
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,298
|
|
| 13.06.2019, 17:41 | |
Сообщение было отмечено alexpro1979 как решение
Решение
0
|
|
|
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
|
|
| 01.12.2019, 16:45 | |
|
Всем привет.
1. А как можно посмотреть, сколько открыто баз на текущий момент? 2. Me![Form1].Form.RecordSource = "" Такая конструкция открывает дополнительную базу или нет?
0
|
|
|
13198 / 5892 / 1510
Регистрация: 05.10.2016
Сообщений: 16,530
|
||||||||
| 01.12.2019, 17:43 | ||||||||
|
Сложно. Простенько:
0
|
||||||||
| 01.12.2019, 17:43 | |
|
Помогаю со студенческими работами здесь
20
Отображение Дополнительных Баз В Списке Адресов
Ошибка при импорте баз данных Не выводит картинку из баз данных, в чем ошибка? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|