BaseQueryList

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Содержимое страницы заменено на «Глобальный объект скрипт-функций '''BaseQueryList''' хранит наборы данных, на ос…»)
Строка 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:Учебный курс]]

Версия 14:33, 17 января 2016

Глобальный объект скрипт-функций BaseQueryList хранит наборы данных, на основании которых строятся отчеты. Методы и свойства объекта определены в интерфейсе IgsQueryList.

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

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