Проблема с отчетами (vba)

отакота
Дата: 01.12.2009 12:13:29
endless
отакота,
Дело не в том, что я не могу в бланке свойств в конструкторе отыскать источник данных контрола (я уже сделал подобный отчет стандартными средствами), а в том, что я хочу разобраться как это все сделать кодом, потому что я очень не люблю конструкторы и мастера аксеса и использую их только в безвыходных ситуациях.

Написал как вы посоветовали, выводится пустая страница без соответствующей записи, ошибок при этом не возникает

Вот код:
Private Sub Report_Open(Cansel As Integer)

Dim NewSource As String

NewSource = "SELECT FIO FROM Users WHERE UserProfile='" & profile1& "' "

Me.RecordSource = NewSource

Me.txtTest.ControlSource = "FIO" '<-вот так

End Sub

Наименование таблиц и параметров указано правильно.


что есть profile1&? где и как описано? где значение задается?
чему равно в момент подстановки в запрос? NewSource какое получается - оно в построителе запросов возвращает данные?
endless
Дата: 01.12.2009 13:34:15
автор
что есть profile1&? где и как описано? где значение задается?
чему равно в момент подстановки в запрос? NewSource какое получается - оно в построителе запросов возвращает данные?


Есть таблица Users, в ней столбцы: UserProfile и FIO, они оба имеют текстовый тип данных.

Users:
FIO | UserProfile
Иванов И.И. | profile1


Если создать подобный запрос в посторителе запросов, то он вернет значение "Иванов И.И."
И если на основе этого запроса создать отчет (с помощью мастера или конструктора), то он выведет Иванов И.И.
отакота
Дата: 01.12.2009 13:50:11
endless
автор
что есть profile1&? где и как описано? где значение задается?
чему равно в момент подстановки в запрос? NewSource какое получается - оно в построителе запросов возвращает данные?


Есть таблица Users, в ней столбцы: UserProfile и FIO, они оба имеют текстовый тип данных.

Users:
FIO | UserProfile
Иванов И.И. | profile1


Если создать подобный запрос в посторителе запросов, то он вернет значение "Иванов И.И."
И если на основе этого запроса создать отчет (с помощью мастера или конструктора), то он выведет Иванов И.И.
вы не про то говорите. вопрос же был по конкретному коду -
у вас в вашем коде используется переменная profile1&, но в приведенном фрагменте данная переменная не описана и значение ей не присваивается. вот о ней и хотелось бы узнать:

- где и как эта переменная описана?
- где и как задается значение этой переменной?

просто ответьте на эти вопросы
отакота
Дата: 01.12.2009 13:55:50
...
NewSource = "SELECT FIO FROM Users WHERE UserProfile='" & profile1& "' "
Debug.Print NewSource
...
или вот добавьте синюю строку в ваш код, и покажите здесь полученное значение из окна отладки - чему равно NewSource (т.е. реальное значение в момент открытия отчета)
Rivkin Dmitry
Дата: 01.12.2009 14:17:14
автор
я очень не люблю конструкторы и мастера аксеса и использую их только в безвыходных ситуациях.

Ну, и зря! В случае создание отчетов и форм, мастер очень даже помогает. И зачем заморачиваться с кодом, если все можно сделать в макете. Я понимаю, если нужно динамически что-то менять во время загрузки. А так - это, просто, чванство (без обид!). Мастера сделаны для того, чтобы облегчать жизнь программисту. Так зачем же добровольно отказываться от такой возможности. Лучше, изучить, как они работают и какой результат предлагают...
Joss
Дата: 01.12.2009 15:41:45
А лучше выложите пример базы и напишите, что в нем надо сделать.
endless
Дата: 01.12.2009 16:33:33
В этой переменной хранится текущий пользователь (функция Environ возвращает текущий профайл (логин) используемый в операционной системе) я соответственно использую точно такой же профайл для работы в своей программке.

Dim profile1 as String

profile1 = Environ("USERNAME")

значение NewSource из отладки:

"SELECT FIO FROM Users WHERE UserProfile='' acrisamo "


Rivkin Dmitry,

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

автор
А так - это, просто, чванство (без обид!). Мастера сделаны для того, чтобы облегчать жизнь программисту.

Прошу прощения, но слова "чванство" я не знаю, наверно это что-то плохое. Но тем не менее я не обижаюсь, т.к. каждый пишет программы так, как ему нравится. В свою защиту могу сказать, что когда пишешь на бэйсике, ты уже изучаешь основы программирования в целом и тем самым уже понимаешь как работают все эти мастера и конструктуры + иногда бывает, что когда очень сложный запрос, конструктор начинает тормозить или выводит какой-то бред и приходится переписывать запрос в ручную (я в своей недлительной практике уже дважды с этим сталкивался). Возможно в последующих версиях аксеса конструкторы станут более совершенными и надобность в программировании отпадет, но пока они не такие уж и "умные"
отакота
Дата: 01.12.2009 17:14:25
endless
значение NewSource из отладки:
"SELECT FIO FROM Users WHERE UserProfile='' acrisamo "
да ну неправда, у вас не может быть такого значения в окне отладки

откуда двойные кавычки перед SELECT и в конце?
и почему апострофы, которые (в вашем коде) окружают значение значение переменной profile1, оказались тут в куче, а подразумеваемое текстовое значение этой переменной (acrisamo) разместилось ЗА ИХ ПРЕДЕЛАМИ - да еще с пробелами вокруг?

вы это значение, часом, не руками сюда переписали из окна отладки?
если так, то совершенно напрасно, надо было прямо скопировать через Clipboard.
endless
Дата: 01.12.2009 17:26:25
часом походу да... :DDD
отакота
Дата: 01.12.2009 17:34:09
и еще:
endless
Dim profile1 as String
profile1 = Environ("USERNAME")

ранее вы целиком привели код процедуры Private Sub Report_Open, и в ней этого нет.
ГДЕ же это написано?

ибо если это написано ВНЕ Report_Open, то Report_Open НЕ увидит значения этой переменной. Если это действительно так, то тогда в этом и причина. Тогда у вас вообще код в отчете работает только потому, что у вас там видимо отсутсвует Option Explicit. Иначе просто сругался бы на неописанную переменную profile1. Смотрите