|
|
| Строка 1: |
Строка 1: |
| − | BaseQueryList: IgsQueryList (by Alexandra) | + | Глобальный объект скрипт-функций '''BaseQueryList''' хранит наборы данных, на основании которых строятся отчеты. Методы и свойства объекта определены в интерфейсе [[Gedemin_TLB.IgsQueryList|IgsQueryList]]. |
| | | | |
| − | Хранит датасеты (IgsQuery), на основании которых строятся отчеты.
| + | [[Category:VBScript]] |
| − | | + | |
| − | Методы:
| + | |
| − | 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
| + | |
| − | | + | |
| − | 7[[Category:VBScript]]
| + | |
| | [[Category:Учебный курс]] | | [[Category:Учебный курс]] |