(изменено: Kyle, 13 сентября 2013 08:36:30)

Тема: Построение отчета

Для постройки отчета потребовалось в модуле access создавать еще одну таблицу для записи в нее определенных данных. Во время построения отчета возникает ошибка связанная с тем, что отчет строиться быстрее чем создается таблица и в результате не срабатывают запросы к этой таблице. Как решить эту проблему?
Еще хочу добавить, что данная проблема только на мощных ПК.

Re: Построение отчета

Каким таким образом создается таблица, что отчет уже успевает выполниться?

(изменено: Kyle, 13 сентября 2013 09:10:01)

Re: Построение отчета

Олег Зырянов пишет:

Каким таким образом создается таблица, что отчет уже успевает выполниться?

прилагаю файл

вот ошибка которая появляется в результате построения

Post's attachments

new 1.txt 3.22 Кб, 11 скачиваний с 2013-09-13 

sql.jpg 31.43 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

Re: Построение отчета

  • Когда выполняется  процедура PrepareMDBStructure?.

  • В процедуре PrepareMDBStructure закомментируйте строку On Error Resume Next. После этого скорей всего увидите почему иногда не создается таблица.

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

(изменено: Kyle, 16 сентября 2013 08:17:57)

Re: Построение отчета

таблица строится. в отчете есть несколько запросов к этой таблице, так вот первый не срабатывает а остальные уже нормально. прилагая два файла.

отчет

Post's attachments

ReportDB_16092013 81225.mdb 272 Кб, 3 скачиваний с 2013-09-16 

Template_16092013 81227.xls 39.5 Кб, 3 скачиваний с 2013-09-16 

You don't have the permssions to download the attachments of this post.

Re: Построение отчета

Попробуйте создавать таблицу FileFIO через область управления «СозданиеИндексов» или через таблицу "REFERENCE" вписав в поле CreateIndex текст:

CREATE TABLE FileFIO (razrab varchar(100), prov varchar(100), tKontr varchar(100), nKontr varchar(100), utv varchar(100), predpri varchar(100))

Так таблица будет создана один раз и до выполнения запросов.

или

у объекта ADOCommand установите свойство

CommandTimeout = 0

тогда выполнение процедуры будет продолжено только после выполнения команды (синхронное выполнение, по умолчанию ожидание 30 секунд).

Спасибо сказали: Kyle1

(изменено: Kyle, 16 сентября 2013 12:38:47)

Re: Построение отчета

Виктор Бебякин пишет:

Попробуйте создавать таблицу FileFIO через область управления «СозданиеИндексов» или через таблицу "REFERENCE" вписав в поле CreateIndex текст:

CREATE TABLE FileFIO (razrab varchar(100), prov varchar(100), tKontr varchar(100), nKontr varchar(100), utv varchar(100), predpri varchar(100))

Так таблица будет создана один раз и до выполнения запросов.

или

у объекта ADOCommand установите свойство

CommandTimeout = 0

тогда выполнение процедуры будет продолжено только после выполнения команды (синхронное выполнение, по умолчанию ожидание 30 секунд).

попробовал эти два варианта, в обоих вариантах запросы выполняются раньше чем команда Выполнить в excel, в первом варианте таблица строится действительно раньше запросов, но не срабатывает команда Выполнить в таком случае

Re: Построение отчета

При создании таблицы FileFIO через СозданиеИндексов или CreateIndex
Ошибки нет но запросы ничего не возвращают?

Попробуйте установить задержку в конце процедуры

'объявить в начале модуля
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'добавить в конец процедуры
Sleep 1000

или текстовое сообщение

msgbox ""

сообщение должно появиться до того как отчет начнет строиться.

Еще у вас идет обращение к API TechnologiCS хотя по коду не вижу чтобы он использовался. Попробуйте закоментировать.

Re: Построение отчета

Виктор Бебякин пишет:

При создании таблицы FileFIO через СозданиеИндексов или CreateIndex
Ошибки нет но запросы ничего не возвращают?

Попробуйте установить задержку в конце процедуры

'объявить в начале модуля
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'добавить в конец процедуры
Sleep 1000

или текстовое сообщение

msgbox ""

сообщение должно появиться до того как отчет начнет строиться.

Еще у вас идет обращение к API TechnologiCS хотя по коду не вижу чтобы он использовался. Попробуйте
закоментировать.

спасибо, задержка помогла