Опубликован сбой WebForm: комбинация COMBOBOX - QUERY? - PullRequest
0 голосов
/ 05 декабря 2011

Я создал очень простой WebDB для доступа, которая содержит:

A) таблицу (в которой хранятся даты и оценки некоторых курсов).Б) одна форма, которую учителя используют в качестве входных данных (дата и оценки).C) другая форма, которая используется в качестве выходных данных, чтобы показать оценки (выбрав дату из выпадающего списка)


Для получения отчета с результатами каждого сделанного мной поиска, я создал запрос, а затем отчет.

После выбора даты в поле со списком, я нажимаю командную кнопку, которая запускает отчет на основе запроса.

Я установил поле со списком, чтобы показать даты изосновной стол.Мне кажется невозможным, чтобы каждый раз запускать запрос с критериями, выбранными в выпадающем списке.

Я установил для «условия условия» (под макросом кнопки) следующее:

[DateField]=[Forms].[FormThatContainsTheCombo].[Combo]

и на моем компьютере ВСЕ РАБОТАЕТ В РАМКАХ ...

СЕЙЧАС ПРИЧИНА, КОТОРАЯ Я ЗАПРОСИЛА ВАШУ ПОМОЩЬ:

Когда я публикую все это на сайте сервера sharepoint и нажмуКнопка, появляется следующая ошибка:

Недопустимая ссылка 'Forms.FormThatContainsTheCombo.Combo' в выражении.Возможно, вы пытались использовать необъявленный параметр или поле, которое не привязано к элементу управления в форме или отчете.

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

1 Ответ

1 голос
/ 06 декабря 2011

Предполагая, что код является вашим предложением where, он должен работать.Если отчет основан на веб-запросе с этими формами!в качестве условия, вы должны удалить его.Таким образом, вам нужно использовать здесь выражение «где» команды OpenReport.Это просто означает, что ссылки [forms]! [SomeFormName] в веб-запросе НЕ допускаются.

Если предположить, что вышеизложенные проблемы, то я могу подумать еще о двух вещах, которые могут привести к сбою:

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

На самом деле, из-за вышеуказанной неприятной проблемы, я, как правило, заполняю значениеиз элемента управления INTO локальной переменной, а затем использовать эту переменную в выражении фильтра.Причин этому много, но одним из преимуществ является то, что в коде нет ссылки на формы в жестком коде.Фильтр может принимать управление, но он ДОЛЖЕН быть жестко закодированными полностью определенными формами.Однако команда фильтра также может использовать локальную или глобальную переменную.

Оказывается (к счастью), что вы можете складывать значения из элементов управления форм в переменную БЕЗ необходимости в квалифицированных формах ref.Таким образом, вы можете просто использовать имя элемента управления.Это дает вам то же самое, что и «я» в VBA, и в результате получается нейтральный код.Поэтому этот «дополнительный» шаг настоятельно рекомендуется.

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

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

Доступ на стороне клиента будет часто «приводить» тип данных для вас, но для веб-сайтов это менее простительно.

Один простой подход здесь - это таблица свойств для поля со списком (форматвкладка), установите формат поля со списком на дату (попробуйте короткую дату).Это должно исправить вашу проблему.

Кроме того, я бы также использовал приведенную выше идею set var для удаления жестко закодированных форм ref и name.

Таким образом, ваш код должен выглядеть следующим образом:

 SetLocalVar  (dtUserDate,[myComboBox])

 OpenReport (myReport, [InvoiceDate] = [LocalVars]![dtUserDate], Normal)

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

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

Для дат вы также можете использовать команду dateSerial (), чтобы форсировать тип даты, но это, вероятно, не имеет смыслаиз поля со списком.

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

Как уже отмечалось, это, как правило, не проблема / проблема со связанными элементами управления, но для несвязанных тогда выражение часто принимает неверный тип данных, и в то время как клиент Access лучше выполняет "приведение"тип данных, веб-сторона вещей более чувствительна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...