powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отчет * Окно ввода параметра * Определение кода возврата
12 сообщений из 12, страница 1 из 1
Отчет * Окно ввода параметра * Определение кода возврата
    #32164233
DaveM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

Есть такая проблемка.
В проекте .adp (MS Access 2000 + MS SQL Server 2000) есть куча отчетов, с паратеризированными запросами. Т.е., при генерации отчета вначале запрашивается параметр (используется просто запрос с "?" и InputParameters для задания текста типа "Введите параметр такой-то"). Т.е., появляется окно с полем для ввода параметра и двумя кнопками "Ок" и "Cancel". В обработчике OnNoData() выдается сообщение типа "Нет записей по Вашему запросу", когда не было найдено записей для введенного парамерта. Все вроде бы ничего, но этот обработчик вызывается даже тогда, когда пользователь нажал "Cancel". Нельзя ли как-нибудь определить был ли нажат "Cancel" или для данного параметра действительно нет записей. Или может быть есть какие-то другие признаки для определения такого рода ситуаций.
Могу предположить, что копаю я не там, т.к. опыт работы с Access - ровно неделя. :)
Заранее благодарен всем, кто сможет помочь советом.
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32164255
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не сделать форму с параметрами отчета в которой две кнопки "Запуск" и "Отмена" и InputParameters перевести на форму?
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32164256
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Легче сделать форму с кучей окошек для параметров,
а запросу передавать данные из этих контролов.
По нажатию кнопки, запускающей запрос, проверь ввод данных в контролы - и ругай юзверя, если не ввел.
вот и все ;)
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32164271
DaveM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы.
В некоторых отчетах именно так и сделано. Имеются форма с кучей параметров и т.д. Но есть отчеты, в которых только один параметр. Писать для каждого отчета отдельную форму... Ну, вы понимаете. Интересует как определить что нажал юзер именно в системном окне ввода параметров.
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32164279
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно написать универсальную форму для всех отчетов, но это довольно трудоемко, хотя в дальнейшем себя оправдывает.

Что касается перехвата результатов работы с системным окном, то я думаю не получится (хотя кто его знает).
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32164293
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть идея выписать функцию свою, и указать ее
(
МояФция()
вместо
[ДайМнеПараметр:]
)
в запросе.
Эта ф-ция уже может делать то, что тебе надо (и возвращать условие отбора в запрос ;-):
запуская inputbox(..), лови пустую строку или еще что.
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32164382
DaveM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Alexus12

Я сейчас попробовал сделать, что-то подобное предложенное тобой. В общем, работает. Имеется функция, которая вызывается для задания параметра, в ней вызывается форма, отлавливается код возврата и устанавливается глобальная переменная, которая потом проверяется в OnNodata(). Честно говоря, мне кажется, что это как левой ногой правое ухо чесать. Есть еще сомнения насчет типов параметров, подставляемых в запрос или двойного вызова этой самой функции для 2-х параметров и т.п. Ладно, если ничего другого нет, то придется или этот вариант использовать, или дальше копать.

В любом случае, спасибо всем за ответы.
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32164622
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для типов параметров опеределяй фцию явно:

function MyFunc() as integer (!!!)

Ну а с левой ногой...
Как уже предлагали, для всех отчетов делается 1 глобформа,
и все запросы/отчеты перевешиваются с таблиц на новый источник данных - 1-ый глобальный запрос, у которого условия отбора берутся из формы.
Удобно и радостно.

Корифеи, скажите, прав я?
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32165121
DaveM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Alexus12

В общем, поигрался я немного со свойствами отчета. Было найдено следующее решение. В обработчике OnNodata() проверяется свойство CurrentRecord. Если юзер нажал Cancel во время ввода параметра, то попытка доступа к этому свойству будет вызывать ошибку 2455. Если просто нет данных, то CurrentRecord будет 0.

Этот вариант больше подходит мне. Неохота создавать какую-то глобальную универсальную форму для ввода одного параметра, если уже есть что-то системное.

По правде сказать, даже не думал, что это какая-то хитрая проблема. Ведь куча народу использует параметризированные запросы, посему и решение вроде стандартное должно быть.
Ок. Может кому пригодится. Еще раз спасибо.

Вот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub Report_NoData(Cancel As Integer)
On Error GoTo ErrHandler
    ' Check for number of records returned
    ' Note: Accessing this property will cause an error if the user pressed Cancel
    ' An error handler must be implemented to catch run-time errors
    If (Me.CurrentRecord = 0) Then          ' No records found for specified criteria
        MsgBox  "There are no records that match your criteria" , vbOKOnly Or vbInformation,  "Report generation error" 
    End If
    
    Cancel = True
    Exit Sub
    
ErrHandler:
    Select Case (Err.Number)
    Case  2455 :                              ' User pressed Cancel in the InputParameter window
        Cancel = True                       ' Abort the report generation. Don't display any messages
    Case Else:                              ' On all other errors
        MsgBox Err.Description              ' Display an error message
    End Select
End Sub
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Отчет * Окно ввода параметра * Определение кода возврата
    #32733287
Orlic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня несколько другая продлема, но все же...
Есть форма, в которой оператор вводит много-много данных... Так вот, после того, как все заведено, необходимо вызвать отчет с формы, который все данные напечатает в виде справки/догофора/и тд и тп... Так вот, в отчет нужно передать значение 1 из полей (ИНН фирмы)...Никаких параметров тут руками вводить не надо, 1 параметр - из формы.
Что мне сделать?
...
Рейтинг: 0 / 0
Отчет * Окно ввода параметра * Определение кода возврата
    #32733365
Orlic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OrlicУ меня несколько другая продлема, но все же...
Есть форма, в которой оператор вводит много-много данных... Так вот, после того, как все заведено, необходимо вызвать отчет с формы, который все данные напечатает в виде справки/догофора/и тд и тп... Так вот, в отчет нужно передать значение 1 из полей (ИНН фирмы)...Никаких параметров тут руками вводить не надо, 1 параметр - из формы.
Что мне сделать?

Все, сам сделал... Создал запрос, в который передается значение ключевого поля активной записи на форме:
Код: plaintext
1.
2.
SELECT ПДС.Код, ПДС.Предприятие, ПДС.Госномер, .......... , FROM ПДС
WHERE ((ПДС.Код)=(forms![ПДС]![Код]));
и на основе него работает отчет. На форме кнопочка "ОТЧЕТ", на нее повесил код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Кнопка75_Click()
On Error GoTo Err_Кнопка75_Click

    Dim stDocName As String
     'обновляем, чтобы занести данные в таблицу перед тем, как 
     'сработает запрос по выборке этих данных для отчета 
    Me.Refresh
    
    stDocName = ChrW( 1055 ) & ChrW( 1044 ) & ChrW( 1057 )
    DoCmd.OpenReport stDocName, acPreview
вот и то, что требовалось.
Самое интересное, что не нужны букмарки, так как используется рефреш, а не реквери, и при обновлении данных остаемся на той же позиции.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Отчет * Окно ввода параметра * Определение кода возврата
    #39362402
Pavel2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, никак не могу сообразить... Есть таблица как мне задать параметр вывода информации через диалоговое окно перед запросом? К примеру - в окне "Введите номер счета" и я ввожу "36" и мне показываются все строки с 36 счетом. Потом ввожу "63" счет - все строки с 63счетом по столбику "СчетДляОтбора"
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отчет * Окно ввода параметра * Определение кода возврата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]