Access2000 и отчеты

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Access2000 и отчеты

Сообщение Mao » 21.10.2004 (Чт) 9:43

Подскажите, как запустить из программы отчет, данными для которого служит SQL запрос, находящийся в строковой переменной?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 21.10.2004 (Чт) 10:05

Чего? Что значит "запустить отчет"?
Это вопрос из серии "как запустить ракету, если у меня есть топливо?"

Что ты хочешь увидеть?Ты грид нашел? Ты не знаешь, как показать данные в гриде? Или ты действительно отчетами занялся? термин "отчет" обычно означает документ, постороенный по БД, готовый к печати. Для этих отчетов есть свои инструменты...
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 21.10.2004 (Чт) 10:10

Либо отправить на печать отчет.

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 21.10.2004 (Чт) 10:41

Rainbow писал(а):Чего? Что значит "запустить отчет"?
Это вопрос из серии "как запустить ракету, если у меня есть топливо?"

Что ты хочешь увидеть?Ты грид нашел? Ты не знаешь, как показать данные в гриде? Или ты действительно отчетами занялся? термин "отчет" обычно означает документ, постороенный по БД, готовый к печати. Для этих отчетов есть свои инструменты...

Я знаю как записать запрос содержащийся в строковой переменной:
Set query = CurrentDb.CreateQueryDef("Запрос", strSQL)
Потом открыть форму, которая будет представлять данные полученные этим запросом:
DoCmd.OpenForm "Форма", acNormal
Forms![Форма].Caption = "Запрос"
Forms!Форма![Распределение].RowSource = "Запрос"

Так вот, мне нужно чтоб открывался, либо сразу отправлялся на печать отчет используемый данные запроса. И чтоб не записывать SQL запрос, а сразу юзать текстовую переменную с этим SQL запросом. Заранее Вам огромное спасибо.

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 21.10.2004 (Чт) 11:04

Отправить на печать отчёт:

Код: Выделить всё
DoCmd.Echo False
DoCmd.OpenReport "Отчёт", acViewPreview
DoCmd.PrintOut acPrintAll, , , , 3, 0
DoCmd.Echo True
DoCmd.Close acReport, "Отчёт", acSaveNo

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 21.10.2004 (Чт) 11:38

Scuder писал(а):Отправить на печать отчёт:

Код: Выделить всё
DoCmd.Echo False
DoCmd.OpenReport "Отчёт", acViewPreview
DoCmd.PrintOut acPrintAll, , , , 3, 0
DoCmd.Echo True
DoCmd.Close acReport, "Отчёт", acSaveNo

Так а как к этому отчету привязать SQL запрос??

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 21.10.2004 (Чт) 11:44

Не знаю. Если не найдёшь решения, то можно создать отчёт, который будет брать данные из запроса, которому ты уже умеешь присваивать свою переменную.

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 21.10.2004 (Чт) 15:04

Просто писать вот так:
Код: Выделить всё
Dim qdf As QueryDef
Dim query As QueryDef
CurrentDb.QueryDefs.Refresh
For Each qdf In CurrentDb.QueryDefs
  If qdf.name = "Запрос" Then
      db1.QueryDefs.Delete qdf.name
  End If
Next qdf
Set query = CurrentDb.CreateQueryDef("Запрос", strSQL)
DoCmd.Echo False
DoCmd.OpenReport "Отчёт", acViewPreview
DoCmd.PrintOut acPrintAll, , , , 3, 0
DoCmd.Echo True
DoCmd.Close acReport, "Отчёт", acSaveNo

по мойму, как то криво.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 21.10.2004 (Чт) 15:16

по мойму, как то криво.


Конечно криво.

У отчета есть свойство RecordSource - ему и присваивай свою строку запроса.

Так-же у отчета есть быть свойство Recordset - ему можно присвоить готовый Recordset.

P.S. Ведь когда-то дизайнер отчетов Access-a мне даже нравился. Теперь - вспоминаю те времена с содраганием...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 21.10.2004 (Чт) 15:21

Надо делать так
Dim sArg As String
sArg = "SELECT * FROM bla-bla-bla"
DoCmd.OpenReport "Отчёт", acViewPreview, , , , sArg

А в самом отчете в обработчике открытия
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = Me.OpenArgs
End Sub


PS: пока писал -- опередили :wink:

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 21.10.2004 (Чт) 15:31

Спасибо огромное фсем!

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 25.10.2004 (Пн) 14:56

Leon_ писал(а):Надо делать так
Dim sArg As String
sArg = "SELECT * FROM bla-bla-bla"
DoCmd.OpenReport "Отчёт", acViewPreview, , , , sArg

А в самом отчете в обработчике открытия
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = Me.OpenArgs
End Sub


PS: пока писал -- опередили :wink:

Так у метода OpenReport нет свойства OpenArgs и соответственно при присваивании методу me.RecordSource ругается на OpenArgs:
Metod or data member not found
Что тут можно сделать?? :(

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 25.10.2004 (Пн) 17:36

8)
Свойство OpenArgs надо искать не у метода (у которого его и не может быть), а у отчета. Все так, как я написал в примере. Дерзай!
PS: "Me" -- это ссылка не на метод, а на текущий объект -- форму, отчет.

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 26.10.2004 (Вт) 13:18

Leon_ писал(а):8)
Свойство OpenArgs надо искать не у метода (у которого его и не может быть), а у отчета. Все так, как я написал в примере. Дерзай!
PS: "Me" -- это ссылка не на метод, а на текущий объект -- форму, отчет.

Вот описание метода OpenReport
DoCmd.OpenReport reportname[, view][, filtername][, wherecondition] и не может быть там столько аргументов, сколько опысывали Вы. Это в методе DoCmd.OpenForm formname[, view][, filtername][, wherecondition][, datamode][, windowmode][, openargs] есть столько аргументов. Я сделал проще:
Код: Выделить всё
Public strSQL as string
strSQL = "SELECT * FROM bla-bla-bla"
DoCmd.OpenReport "Отчёт", acViewPreview

А в отчете следующее:
Код: Выделить всё
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = strSQL
End Sub

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 26.10.2004 (Вт) 13:27

:lol:
F1 писал(а):The OpenReport method carries out the OpenReport action in Visual Basic.
expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
expression Required. An expression that returns a DoCmd object.

ReportName Required Variant. A string expression that's the valid name of a report in the current database. If you execute Visual Basic code containing the OpenReport method in a library database, Microsoft Access looks for the report with this name, first in the library database, then in the current database.

View Optional AcView. The view to apply to the specified report.

AcView can be one of these AcView constants.
acViewDesign
acViewNormal default Prints the report immediately.
acViewPivotChart Not supported.
acViewPivotTable Not supported.
acViewPreview

FilterName Optional Variant. A string expression that's the valid name of a query in the current database.

WhereCondition Optional Variant. A string expression that's a valid SQL WHERE clause without the word WHERE.

WindowMode Optional AcWindowMode.

AcWindowMode can be one of these AcWindowMode constants.
acDialog
acHidden
acIcon
acWindowNormal default

OpenArgs Optional Variant. Sets the OpenArgs property.

Получилось без этого -- хорошо.

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 26.10.2004 (Вт) 13:45

Странна, когда я хочу впихнуть в OpenReport больше 4 аргументов компилятор выдает ошибку о неправильном числе аргументов.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron