Помогите чайнику: отчет на основании sqL запроса.

an148
Дата: 05.12.2009 15:37:13
Есть форма
с выпадающим списком

кнопка запускающая запрос

по кнопке формируется запрос с параметром
результат запроса віводится в отчет

как-то так:

Private Sub Command2_Click()


Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strOrd As String


Set dbs = CurrentDb

Me.Combo0.SetFocus

strOrd = Me.Combo0.Text
strOrd = "'" + strOrd + "'"



strSQL = "SELECT partner.Name, chet.Nomer, chet.Data, chet.Prixod, chet.Rashod FROM partner INNER JOIN chet ON partner.ID_PARTnER=chet.ID_PARTnE WHERE partner.Name=" + strOrd
strSQL = strSQL + " ORDER BY chet.Data; "



dbs.QueryDefs.Delete ("приход")

Set qdf = dbs.CreateQueryDef("приход", strSQL)

'DoCmd.OpenReport "parthner", acViewPreview



DoCmd.OpenReport "parthner1", acViewPreview

'DoCmd.OpenReport "Report1", acViewPreview




Set dbs = Nothing
End Sub

Но отчет выводится пустой!!!
an148
Дата: 05.12.2009 15:40:16
Access 2003-й
mds_world
Дата: 05.12.2009 15:47:57
Распечатайте полученное выражение strSQL (Debug.Print) и поставьте его в запрос. Там исправьте ошибки и их их же в тексте процедуры.

И еще. Не нужно каждый раз удалять и снова создавать запрос, можно менять его свойство .SQL.
an148
Дата: 05.12.2009 16:23:42
mds_world,


Простите не понял. Ошибки в SQL?
Но вель мне не выдает никакого сообщения!?


Изначально отчет использует в качестве источника (Record Source) запрос (Qwery) идетничный
введенному в strSQL, но без параметров.
На основании полей этого запроса и нарисован отчет.
Но нужен параметр,

Если после этого я убираю из Record Source отчета имя запроса то выводится пустой отчет, с заголовками полей.

Если оставляю в Record Source Имя Сохраненного Запроса - выводит результат всего запроса(без учета параметра введенного мной в поле Combo0)

П.С. Если Сохраненный Запрос имеет параметр =[?], то при запуске отчет выдает запрос на ввод параметра

НО ВЕДЬ Я ЕГО УЖЕ ВВЕЛ!? в поле Combo0
отакота
Дата: 05.12.2009 16:34:26
an148
Изначально отчет использует в качестве источника (Record Source) запрос (Qwery) идетничный
введенному в strSQL, но без параметров.
На основании полей этого запроса и нарисован отчет.
Но нужен параметр,
В этом случае достаточно передать ваш критерий отбора прямо в команде OpenReport, там для этого специальный аргумент есть (WhereCondition)
an148
Дата: 05.12.2009 16:56:06
отакота
an148
Изначально отчет использует в качестве источника (Record Source) запрос (Qwery) идетничный
введенному в strSQL, но без параметров.
На основании полей этого запроса и нарисован отчет.
Но нужен параметр,
В этом случае достаточно передать ваш критерий отбора прямо в команде OpenReport, там для этого специальный аргумент есть (WhereCondition)


Хм! То есть фильтровать буду уже на уровне отчета?

Но ведь если большой объем результатов будет тормозить!?

П.С. А с QueryDefs можно как-то сделать?
Например если поля результатов одинаковые а запросы разные
отакота
Дата: 05.12.2009 17:32:42
an148
То есть фильтровать буду уже на уровне отчета?
Но ведь если большой объем результатов будет тормозить!?
не беспокойтесь, этот аргумент для MSAccess - не новость, он знает как с ним обращаться :)

an148
П.С. А с QueryDefs можно как-то сделать?
ну так ваш код это и делает, сам способ-то рабочий. если не работает, видимо где-то ошибка, вам подсказали уже как ее обнаружить.

Кстати, QueryDef можно ведь вообще не создавать. Можно прямо тот sql-текст, что у вас находится в переменной strOrd, записать в RecordSource отчета в обработке его события Report_Open.
an148
Дата: 05.12.2009 18:42:05
отакота и mds_world!
Без QueryDef получилось - Спасибо!

отакота

an148
П.С. А с QueryDefs можно как-то сделать?


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



Возможно я неправильно понял третье сообщение, но что ошибка в SQL-е?


П.С. Что должно быть начальным источником ОТЧЕТА при использовании QueryDef?
отакота
Дата: 05.12.2009 19:07:03
an148
Возможно я неправильно понял третье сообщение, но что ошибка в SQL-е?
сказать наверняка нельзя, не видя базы.

вот например, у вас в приведенном фрагменте inner join такой
ON partner.ID_PARTnER=chet.ID_PARTnE WHERE partner.Name=" + strOrd

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

ну и т.д.

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


an148
Что должно быть начальным источником ОТЧЕТА при использовании QueryDef?
Если вы НЕ собираетесь программно менять свойство RecordSource отчета, то в RecordSource должно быть записано ТО, что и будет источником записей в момент открытия этого отчета. Если отчет должен показывать данные из сохраненного запроса, то значит там должно быть написано ИМЯ этого запроса.