BaseQueryList
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