Сверхдлинный запрос слишком часто истекает по тайм-ауту. Помощь?

Вот как должен работать этот конкретный процесс отчетности:

  1. Сценарий VBA указывает файлу Excel обновить его внешние данные.
  2. Файл Excel извлекает данные из базы данных Adhoc Access 2003 (хранящейся в сети), выполняет некоторое форматирование, чтобы привести их в порядок, и сохраняет файл на сетевом диске.
  3. Сценарий VBA отправляет его по электронной почте тем получателям, которым не хватает данных.

Я делал это в течение многих лет с спорадической проблемой, что машина иногда икает при извлечении данных. Это 2 сообщения об ошибках, которые я могу получить:

  • Удаленный сервер не существует или недоступен
  • Ошибка автоматизации
    Вызванный объект отключился от своих клиентов.

Со временем запросы в adhoc Access db становились все более и более сложными. Сегодня к одному конкретному запросу, в котором их уже было около 10, было добавлено еще 8 условий критериев ИЛИ. В результате, когда я попытался запустить обновленный отчет сегодня, он выдал ошибки 4 раза перед успешным запуском.

Если бы у меня была возможность, я бы отредактировал запросы напрямую и посмотрел, смогу ли я таким образом повысить производительность, но это маловероятно по политическим соображениям/соображениям безопасности. Поэтому я прошу вас, дорогие коллеги, участники StackOverflow, посоветовать, как сделать это более надежным.


person PowerUser    schedule 07.03.2011    source источник
comment
Можете ли вы скопировать базу данных access2003 на локальный компьютер?   -  person rene    schedule 08.03.2011
comment
@poweruser Мне очень жаль. Оберните его в сценарий оболочки, чтобы постоянно повторять попытки до тех пор, пока они не будут успешными, и используйте отложенные электронные письма для политического влияния, чтобы заменить его. Какая ОС выполняет задание? возможно, StackOverflow может помочь со скриптом.   -  person DefyGravity    schedule 08.03.2011
comment
@rene хороший звонок. добавьте это и в сценарий повтора PowerUser;)   -  person DefyGravity    schedule 08.03.2011
comment
@рене Извини. Не пытаясь переманить. Я не видел ваш комментарий, пока не отправил свой ответ.   -  person mwolfe02    schedule 08.03.2011
comment
Все хорошие предложения. Спасибо.   -  person PowerUser    schedule 08.03.2011
comment
Как вы думаете, почему дополнительные критерии вызывают проблему? Являются ли они цепочкой OR, которые вместо этого могут быть преобразованы в IN (a, b, c)? Или, возможно, вы могли бы записать их в таблицу данных INDEXED, а затем присоединиться к ним? Честно говоря, я не думаю, что критерии являются проблемой. Я также не думаю, что эта система нуждается в замене. База данных Access должна быть самым надежным звеном в цепочке - я бы подозревал, что проблема здесь, на самом деле, в Excel, и попытался бы перенести сценарии в базу данных Access и автоматизировать Excel из нее.   -  person David-W-Fenton    schedule 10.03.2011
comment
@ Дэвид, есть много способов оптимизировать запросы по скорости, но я пытался избежать этого из-за политической конфронтации.   -  person PowerUser    schedule 10.03.2011
comment
@ Дэвид, что касается второй половины вашего комментария, я хотел бы уточнить, что сценарии VB запускаются из базы данных 2nd Access (не Excel). Таким образом, файл доступа к контроллеру сообщает файлу Excel о необходимости извлечения данных из файла доступа к базе данных. Я почти никогда не добавляю код в Excel, потому что пользователь получает предупреждение о макросе.   -  person PowerUser    schedule 10.03.2011


Ответы (1)


Ваши возможности довольно ограничены, если вы не можете улучшить сами запросы. Сообщения об ошибках, которые вы получаете (и тот факт, что они возникают спорадически), похоже, указывают на то, что проблемы могут быть вызваны тем, что вы запускаете их в сети.

Если возможно, я бы попытался скопировать файл данных Access на компьютер, на котором выполняется сценарий, в качестве первой части сценария.

Если вы не можете повторно связать таблицы в Access, вы можете «обмануть» Access с помощью subst command, чтобы олицетворять их обычное сетевое расположение (при условии, конечно, что текущее связывание основано на сопоставленных буквах дисков, а не на UNC).

person mwolfe02    schedule 07.03.2011
comment
Итак, вы предлагаете мне переписать процесс для непрерывного выполнения запросов до тех пор, пока они не будут выполнены, возможно, в первую очередь скопировав всю БД? Это хорошая идея. Я думал об этом в какой-то момент, но забыл об этом. - person PowerUser; 08.03.2011
comment
Вот следующая проблема (возможно, для этого придется создать новый вопрос). Как мне убедить своего начальника, не являющегося техническим специалистом, что мне нужно возиться с процессом отчетности? Опять же, это политический вопрос. - person PowerUser; 08.03.2011
comment
Сформулируйте это в нетехнических терминах. Скажи ему, что я могу потратить четыре часа на решение этой проблемы, чтобы все прошло гладко. Или я могу потратить 20 минут на присмотр за этим процессом в обозримом будущем. Мы должны увидеть положительную отдачу от инвестиций через X недель/месяцев и т. д. Честно говоря, политический вопрос может быть сложнее, чем технический :) - person mwolfe02; 08.03.2011