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

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

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

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

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

function MyFunc() as integer (!!!)

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

Корифеи, скажите, прав я?
...
Рейтинг: 0 / 0
21.05.2003, 14:22
    #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
Период между сообщениями больше года.
12.10.2004, 09:31
    #32733287
Orlic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет * Окно ввода параметра * Определение кода возврата
У меня несколько другая продлема, но все же...
Есть форма, в которой оператор вводит много-много данных... Так вот, после того, как все заведено, необходимо вызвать отчет с формы, который все данные напечатает в виде справки/догофора/и тд и тп... Так вот, в отчет нужно передать значение 1 из полей (ИНН фирмы)...Никаких параметров тут руками вводить не надо, 1 параметр - из формы.
Что мне сделать?
...
Рейтинг: 0 / 0
12.10.2004, 10:19
    #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
Период между сообщениями больше года.
08.12.2016, 11:43
    #39362402
Pavel2004
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет * Окно ввода параметра * Определение кода возврата
Подскажите пожалуйста, никак не могу сообразить... Есть таблица как мне задать параметр вывода информации через диалоговое окно перед запросом? К примеру - в окне "Введите номер счета" и я ввожу "36" и мне показываются все строки с 36 счетом. Потом ввожу "63" счет - все строки с 63счетом по столбику "СчетДляОтбора"
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отчет * Окно ввода параметра * Определение кода возврата / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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