|
|
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Существут запрос: SELECT [Контроль договоров].№района, Count([Контроль договоров].№района) AS [Count-№района] FROM [Контроль договоров] WHERE ((([Контроль договоров].[Договор оформлен]) Is Null) AND ((Date()-[Дата принятия документов])>=15)) GROUP BY [Контроль договоров].№района; На основе этого запроса создан отчет. Все отлично работает. Проблема в том, что если нет записей удовлетворяющих запросу, то в отчете появляется #Ошибка! Это не есть гуд. Пришла идея написать макрос с такими командами: ОткрытьОтчет - *задается условие* Сообщение - *вписывается сообщение* Вопрос: Как правильно задать условия в ОткрытьОтчет , чтобы это все сработало?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 21:15 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
В собщении, будет сказано, что нет соответсвующих данных, т.е сообщение будет поверх пустого отчета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 21:37 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Не надо макросов. Private Sub Report_Open(Cancel As Integer) if me.recordcound=0 then msgbox "Сам дурак!" cancel = true endif end sub У Гетца то-ли в "решениях", то-ли в 1-м томе был пример. М.б. он лучше сказанного мною. --- 2ВС Забыл, а как пишется "то-ли". Не слитно, это я вижу. Но через дефис чи ни? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 21:46 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
2Geo Я с кодом не очень дружу. Понимаю, так, что если нет записей удовлетворяющих условию, то выскакивает меседж. Изв за глупый вопрос: что именно нужно открыть и в какой части кода этот кусок вставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 21:55 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Открой нужный отчет в режиме конструктора. Свойства отчета (не выбирая ни какого поля, или нажав на квадратик в перекресии линеек). Вкладка событие. Строка открытие. Три точки [...] Программа. Вставляй приведенный мною выше код. Замени в нем строку "Фиг вам" на культурное сообщение. Закрой код. Закрой и сохрани отчет. --- Только я этого никогда не делал. Я смотрю, у события OnOpen есть Cancel, поэтому про него и написал. Возможно, придется использользовать другое - OnLoad, OnCurrent или др. --- Кстати, на будущее, у форм/отчетов запрос, который обеспечивает им отображаемые данные, выполняется "асинхронно". Т.е. сначала он смотрит, есть ли хоть одна запись, удовлетворяющая условиям и сортировке, и возвращает ее. Когда появлятся время, "догоняет" это число до 51 (не знаю, почему). А когда появляется потребность, вычисляет все остальное. И это удобно. Поэтому в событии, выполняемом при открытии отчета, нельзя делать проверки, что, скажем, число записей > 200 и др. --- Знатоки меня поправят, если что. А вообще, я не знаю, зачем последний абзац написал. Но, раз уж написал, не стирать же. М.б. пригодится в жизни. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 22:07 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
2Geo Access послал твой if me.recordcound=0 говорит мол это не наш метод... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 22:11 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Гео, у отчета есть событие "Отсутствие данных". Как раз то что надо для этого случая. И Cancel там тоже есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 22:11 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
2ЛП Все круто, я туда и стал вставлять. Маленькая проблема - не работает. Я даже по этому поводу сделал резервную копию базы, снес там записи, чтоб значит данных не было, да вот беда: Private Sub Report_NoData(Cancel As Integer) If Me.RecordCound = 0 Then MsgBox "Сам дурак!" Cancel = True End If End Sub Не работает! Ругается в частности на If Me.RecordCound = 0 Then Ставил If Me.RecordCoun t = 0 Then на всякий случай - тоже самое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 22:17 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Ну вот, уже поправили. :)) Пошел дальше квасить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 22:18 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
2 Rimbombo Если ты вставляешь в Report_NoData - то там никакие RecordCound'ы не нужны. Просто выкинь эту строчку на фиг. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 22:38 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
2ЛП Все отлично, спасибо большое! Маленькая ремарка: после того как я жму Ок и закрывается мой меседж, появляется еще меседж, мол прервано выполнение команды OpenReport, жму ок и как говорится все ок. Скажи, пожалуйста, а можно сделать так, чтобы второй меседж не появлялся (без ущерба для работоспособности базы)? Еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 22:50 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
2 Geo: :^) Наш форум начинает превращаться в форум по русскому языку... ку... ку... Короче, "ли" всегда пишется раздельно. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:27 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч! Не подскажите как отключить меседж "прервано выполнение команды OpenReport"?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:32 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Очень просто. В начале процедуры рисуется On Error, а в обработчике проверяется: если тот самый номер, который "прервано", то Resume Next. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:36 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
А можно более популярно? Где этот On Error вписывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:39 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, но это вроде как обязательно в каждой процедуре - писать обработчик ошибок. Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Оператор Resume может иметь следующие варианты: Resume Next - продолжить выполнение со строки, следующей за той, где возникла ошибка (т.е. как бы Ignore) Resume просто - вернуться на саму ту строку, где возникла ошибка (т.е. как бы Retry) Resume DrugayaMetka - продолжить с указанной метки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:46 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
И что интересно при запуске отчета из окна базы этот месседж не появляется, только после клика по кнопке в форме! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:47 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
Но между прочим: если сообщение выскакивает, а потом программа продолжает работать, то похоже, что там какой-то On Error уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:48 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
сейчас попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:51 |
|
||
|
Проблема с макросом
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Проблема была не в это процедуре. ведь 2-й меседж появлялся только по нажатию кнопки в форме, если отчет запускать из окна базы то появлялся только один меседж как и требовалось. Я снес под кнопкой MsgBox Err.Description и все стало ок! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 00:02 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32315418&tid=1678447]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 419ms |

| 0 / 0 |
