Академия за специални курсове по информационни технологии, Санкт Петербург

Обект на Access.Report, работа с отчети на Access програмно с помощта на VBA, създаване, отваряне, отпечатване на отчет от VBA, работа с области и контроли за отчет на Access

Друг често използван обект на Access в програмите е отчетът (представен от обекта Report). Докладите за достъп са може би най-лесният начин за генериране на отчети за бази данни (в сравнение с други методи за генериране на отчети, като например използването на Crystal Reports, Microsoft Reporting Services или пакетите VBA/ADO/Word и VBA/ADO/Excel, които вече обсъдихме). С отчетите на Access можете, разбира се, да генерирате отчети не само за самите бази данни на Access, но и за външни източници на данни, като бази данни на SQL Server или Oracle. В същото време необходимостта от предоставяне на допълнителна функционалност в отчетите (например условно форматиране) се реализира именно с помощта на VBA.

От програмна гледна точка работата с отчети е много подобна на работата с формуляри. По същия начин всички обекти на отчет могат да бъдат достъпни с помощта на колекцията Application.CurrentProject.AllReports (която съдържа обекти на AccessObject), а всички отворени отчети могат да бъдат достъпни с помощта на колекцията Reports с по-традиционни обекти на отчетите. По същия начин, много рядко се създават отчети програмно, обикновено от разделаОтчети на прозореца на базата данни. Въпреки това все още трябва програмно да създавате отчети по-често от формуляри. Можете програмно да създадете отчет, като използвате метода Application.CreateReport():

Dim oОтчитане като отчет

Задайте oReport = Application.CreateReport()

В този случай отчетът ще бъде създаден само в RAM, откъдетоще изчезне без следа след приключване на процедурата, която го е създала. Можете да запазите отчет с име по подразбиране (Отчет1, Отчет2 и т.н. в българската версия на Access), като добавите ред към нашия код

Но, разбира се, по-често трябва да запазим създадения отчет с името, което сме посочили. За целта, преди да извикате метода DoCmd.Close(), трябва да извикате друг метод - DoCmd.Save():

Разбира се, методът CreateReport() ще създаде празен отчет (освен ако не му подадем шаблон за отчет с вече съществуващи контроли като параметър). Можете да използвате същите контроли в отчет, както във формуляр. Но преди да поставите контроли в отчета, трябва да разберете къде ще бъдат разположени.

Един отчет в Access може да се състои от девет области, от които само три са видими по подразбиране:

Ако щракнете с десния бутон върху празна област на отчета и изберетеЗаглавие/бележка на отчета от контекстното меню, ще се покажат още две области на отчета (вижте Фигура 12.6):

курсове

Фиг. 12.6 В прозореца на дизайнера се появиха допълнителни области за отчет

След като разберем къде точно искаме да поставим контролата, можем да използваме метода Application.CreateReportControl(), за да поставим директно контролата в отчета. Като параметри този метод приема името на отчета (трябва да се отвори), вида на контролата, областта на отчета, в която трябва да се постави тази контрола, както и името на колоната, към която може да се обвърже контролата, и координатите на контролата в отчета. Например в областтаДетайли можете да създадете неприкачено текстово поле с име като това:

Задайте txt1 = CreateReportControl(oReport.Name, acTextBox, acDetail)

Ако сте тръгнали по обичайния начин и сте създали отчета не програмно, а на графичен екран с помощта на съветник или дизайнер, тогава може да се наложи да го отворите програмно. Това става, както вероятно вече се досещате, с помощта на метода DoCmd.OpenReport(). Тук обаче има една тънкост: ако изпълните най-простата версия на кода, напр

DoCmd.OpenReport "Sales_report", acViewPreview

Контролите в отчет могат да бъдат достъпни по същия начин като контролите на формуляр, като се използва колекцията Контроли.

Свойствата, методите и събитията на обекта Report са почти идентични със свойствата, методите и събитията на обекта Form, които бяха обсъдени по-долу. Единственото основно изключение е, че обектът Report предоставя специален набор от методи за рисуване, като Circle() (начертайте кръг или елипса), Line() (начертайте линия), PSet() (задайте цвета за отделен пиксел) и т.н., както и набор от свойства и методи за програмно показване на текстови етикети. Но обикновено няма смисъл да се занимавате с доста отнемащо време рисуване или извеждане на текст - много по-лесно е да извършите необходимите действия в режим на дизайнер на графичния екран. Ако вместо да рисувате кръгове и линии на екрана, използвате контролите за изображение (Картина), тогава ще имате много повече възможности.