Ну, я не знаю, правильно ли я вас понял. оператор выбора в случае, если статус плох для производительности, но все же возможно. вот тест.
Select
id,
licence,
genericInfo,
case
when (select count(*) from genericTable where status = 'DENIED') <= 0 and status = 'SUBMITTED' then
status
when (select count(*) from genericTable where status = 'DENIED') > 0 then
'DENIED - Do stuff'
end as 'Results'
from genericTable
я вас правильно понял?
Необходимо смочь выполнить компактную функцию из кода VBA.
Я имел ниже отрывка, отмеченного от давным-давно, когда я делал работу доступа.
Public Sub CompactDB()
CommandBars("Menu Bar").Controls("Tools").Controls("Database utilities").Controls("Compact and repair database...").accDoDefaultAction
End Sub
Можно поместить это в код для обхождения его.
Примечание: Вы могли бы также рассмотреть рост к большей системе дб, если у Вас есть эти типы масштабирования проблем.
С какими размерами Вы имеете дело? Каков код ошибки, когда он отказывает? Я был бы удивлен, просто ли это, потому что файл становится "слишком большим", но я предполагаю, что существует предел. Это звучит из Вашего описания всего временного материала, что могут быть улучшения дизайна, которые помогли бы.
Править: Я ожидаю, что Вы понимаете, что это нетривиально для замены базы данных чем-то еще - даже при попытке сохранить то независимо от того, что находится в mdb помимо таблиц. Доступ querydefs уникален, Доступ, SQL нестандартен и Вы были бы в основном начинающие законченный.
Большинство приложений Доступа, которые я видел, имеет большую возможность для рефакторинга; и это обычно не настолько трудно, если a) Вы понимаете логику и бизнес-правила и b) у Вас есть основательное понимание программирования Доступа. Но это было бы более или менее верно для любых альтернатив. На вашем месте и Вы немного коротки в любой области, возможно, можно получить некоторую справку. Но я попытался бы спасти приложение Доступа сначала.
Существует также предложение из другого плаката о перемещении таблиц в один или несколько, присоединил MDBs. Это - твердая, доказанная техника в целом. Но сначала я разобрался бы, какова реальная причина проблемы.
Я протолкнул бы данные к MS SQL (постоянные данные и промежуточные таблицы); и можно оставить часть кода в Доступе MS в настоящее время.
Это решает две больших проблемы:
Оба из них не означают больше необходимости сжать/восстановить базу данных; можно получить бесплатную версию (Express Edition) MS SQL и не то, чтобы трудно сделать.
Если Вы не хотите переключаться на SQL Express или подобный, Вы могли бы вырыть следующие идеи:
Я не MVP, но Google нашел их. Возможно, они помогут Вам:
http://www.mvps.org/access/general/gen0041.htm http://forums.devarticles.com/microsoft-access-development-49/compact-database-via-vba-24958.html
К сожалению, Доступ MS имеет проблемы, когда Вы становитесь слишком крупными - я думаю, что макс. размер составляет 2 ГБ для доступа DB.
Можно рассмотреть перемещение в Sql Express, VistaDB, и т.д.
Согласно http://office.microsoft.com/en-us/access/HP051868081033.aspx, Доступ 2003 и 2007 имеют предел на 2 ГБ. Однако легко переместить некоторых или все таблицы в отдельный .mdb файл и затем связаться с теми таблицами. Это - хорошая практика так или иначе, чтобы иметь два файла, один для Ваших данных и один для всех макросов, запросов, и так далее. У Вас могло даже быть несколько файлов, если Ваш файл таблицы добирается около предела на 2 ГБ.
Положение дел в отношении размеров файлов Jet для меня бесконечно проблематично.
В настоящее время я просматриваю фрагмент моего собственного кода VBA из базы данных Access A, поскольку он выполняет серию обновлений поля с одной записью с использованием ADO в таблицу в базе данных Access B (через обновляемый запрос ссылка в базе данных A). Единственное поле - это СИМВОЛ (8). После каждых 4 обновлений база данных B увеличивается примерно на 8 Кбайт. Этому нет оправдания. Увеличение размера файла сильно снижает производительность; при каждом росте файла обновление происходит медленно, примерно от одного в секунду (в таблице, содержащей около 30-40 тысяч записей с использованием одиночных SQL-запросов и без каких-либо индексов) до одного в 5-10 секунд. Теперь я признаю , Я сжал / восстановил базу данных B перед запуском этого кода обновления; возможно, если бы я этого не сделал, спектакль не был бы таким плохим. Если бы целевое поле для обновления было, скажем, типа Memo, я бы этого ожидал. Но выполнять обновление поля CHAR () и получить такой результат просто неразумно.
Большая часть вышеперечисленного (без особой критики в адрес какого-либо одного задуманного решения) кажутся действительными решениями для приложений, которые используют относительно постоянную структуру бизнес-приложений (постоянно обращаются к одним и тем же целевым базам данных). У меня не так. . . Я не могу изменить целевую базу данных (база данных B), поскольку она создается и используется инструментом поставщика, который мы используем для экспорта и импорта данных из их приложения.
Я понимаю и благодарю вышеупомянутых авторов за то, что они предлагали решения проблем пользователей.Однако я не могу допустить этого, когда плохой дизайн / реализация программного обеспечения мешает пользователям использовать продукт так, как пользователи ожидают, что он будет работать.