BaseQueryList

Материал из GedeminWiki
Версия от 19:06, 30 декабря 2006; SYSDBA (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

BaseQueryList: IgsQueryList (by Alexandra)

Хранит датасеты (IgsQuery), на основании которых строятся отчеты.

Методы: 1) Add(QueryName: String; MemQuery: Boolean): Integer Добавляет датасет в список запросов, возвращает его индекс в списке (начиная с 0). MemQuery может иметь значения 0 и 1. Если MemQuery = 0, то данные хранятся в объекте класса TQuery. А значит, если gsQuery создавался как

           Set q = BaseQueryList.Add("Header", 0),

то он может выполнять SQL-запросы: q.SQL = "SELECT * FROM GD_CONTACT" q.Open Если же MemQuery = 1, данные хранятся в объекте класса TClientDataSet. В него можно добавлять поля и вставлять записи, например

 set Title = BaseQueryList.Query(BaseQueryList.Add("Title", 1))
 call Title.AddField("DateBegin", "ftDateTime", 0, 0)
 call Title.AddField("DateEnd", "ftDateTime", 0, 0)
 Title.Open
 Title.Edit
 Title.FieldByName("datebegin").AsDateTime = DateBegin
 Title.FieldByName("dateend").AsDateTime = DateEnd
 Title.Post

2) AddMasterDetail(MasterTable: String;

                                MasterField: String; 
                                DetailTable: String; 
                                DetailField: String)

Устанавливает отношение Master-Detail между двумя gsQuery, например

 set qMaster = BaseQueryList.Query(BaseQueryList.Add("Doc", 0))
 qMaster.SQL =   " SELECT doc.ID, " & _
                             "……" & _
                             " FROM GD_DOCUMENT doc " & _
                             " ……"
 set qDetail = BaseQueryList.Query(BaseQueryList.Add("DocLine", 0))
 qDetail.SQL =   " SELECT doc.PARENT AS MASTERKEY, " & _
                            "……" & _
                            " FROM GD_DOCUMENT doc " & _
                            " ……"
                            " ORDER BY doc.DOCUMENTDATE"                            
 qMaster.Open
 qDetail.Open
 call BaseQueryList.AddMasterDetail("Doc", "ID", "DocLine", "MASTERKEY;DOCUMENTDATE")

Оба Query должны быть открыты! В параметре DetailField после поля, по которому идет связка (MASTERKEY), через «;» перечисляются поля, по которым идет сортировка 3)Clear Очищает список запросов. После того, как отчет построен, его запросы все еще хранятся в BaseQueryList. Это, кстати, может быть полезным, если сначала надо выполнить обработку результатов запроса, например, по нажатию кнопки, а потом по ним построить отчет. Запрос формируется и выполняется в функции, вызываемой по нажатию этой кнопки, в конце функции вызывается какой-нибудь System.ReportSystem.BuildReport. В отчете BaseQueryList не очищается. Если наш выполненный ранее запрос назывался "Header", можем написать что-то вроде Set q = BaseQueryList.QueryByName("Header"), и не нужно выполнять его второй раз. Но! Чтобы "привязать" шаблон к функции отчета, эта функция должна выполниться хотя бы один раз "непосредственно". Если вызывать ее из другой функции, шаблон не заполнится данными. Поэтому сначала в функции отчета СОЗДАЕМ и ВЫПОЛНЯЕМ нужный запрос. Шаблон заполняется. Далее создание и выполнение запроса можно перенести в другую функцию, а в отчете обращаться к результату запроса, как было описано выше. 4) Delete(Index: Integer) Удаляет gsQuery с индексом Index. Индексы всех следующих за ним в списке запросов уменьшаются на 1. Например, при выполнении кода function rp_Main147051802_612792051

 BaseQueryList.Clear
 set q = BaseQueryList.Query(BaseQueryList.Add("q", 0))
 q.SQL = "SELECT * FROM GD_CONTACT"
 q.Open
 set q1 = BaseQueryList.Query(BaseQueryList.Add("q1", 0))
 q1.SQL = "SELECT * FROM GD_CONTACT"
 q1.Open
 call BaseQueryList.Delete(0)
 call BaseQueryList.Delete(1)
 set rp_Main147051802_612792051 = BaseQueryList

end function получим ошибку "List index out of bounds (1)", а если заменить

 call BaseQueryList.Delete(0)
 call BaseQueryList.Delete(1)

на

 call BaseQueryList.Delete(0)
 call BaseQueryList.Delete(0),

скрипт выполнится без ошибок (результат — пустой BaseQueryList). 5) DeleteByName(AName: String) Удаляет запрос с именем AName из списка 6) MainInitialize Очищает BaseQueryList. Вызывается в Clear. 7) Commit Похоже, метод ничего не делает! (Зато вызывается в Clear после MainInitialize) 8) ResultStream: Variant –???

Свойства: 1) Count: Integer Количество gsQuery в BaseQueryList. 2) Query(Index: Integer): IgsQuery Возвращает gsQuery с номером Index в списке 3) QueryByName(Name: String): IgsQuery Возвращает gsQuery с именем Name

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты